Пробовал поиграться с частотой системных тиков - не помогло. Функция чтения ниже.
void Recieve_from_I2C(char* bufer, int address, int byte_count)
{
char addr;
for(int i=0; i<byte_count; i++)
{
do{
I2C_GenerateSTART(I2C1, ENABLE);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
addr = 0xA0 | ((address & 0x300) >> 7);
I2C_Send7bitAddress(I2C1, addr, I2C_Direction_Transmitter);
delay_us(90);}
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
addr = address;
I2C_SendData(I2C1, i+addr);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
addr = 0xA0 | ((address & 0x300) >> 7);
I2C_Send7bitAddress(I2C1, addr, I2C_Direction_Receiver);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
*(bufer+i) = I2C_ReceiveData(I2C1);
I2C_GenerateSTOP(I2C1, ENABLE);
}
}
Таск:
void Led_Task(void *pvParameters)
{
char a=0;
Send_to_I2C(&a, 0x00, 1);
Recieve_from_I2C(bufer, 0x10, 11);
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
vTaskDelay(2000);
GPIO_SetBits(GPIOC, GPIO_Pin_13);
vTaskDelay(2000);
}
}


