jenya7 0 10 февраля, 2020 Опубликовано 10 февраля, 2020 · Жалоба Хочу сделать драйвер для STM32L475 типа того как я работаю с другими сериями. int I2C_Wait(I2C_TypeDef * I2Cx) { unsigned int timeout = 0; while(LL_I2C_IsActiveFlag_NACK(I2Cx) == 0) { if(++timeout > I2C_TIMEOUT) { LL_I2C_ClearFlag_NACK(I2Cx); return -1; } } LL_I2C_ClearFlag_NACK(I2Cx); return 0; } void I2C_Read(I2C_TypeDef * I2Cx, uint8_t slave_addr, uint8_t reg_addr, uint8_t *data) { /*----------first step - set register address to read from-----------*/ uint8_t address = slave_addr & 0xFE; LL_I2C_SetTransferRequest(I2Cx, LL_I2C_REQUEST_WRITE); // send start signal LL_I2C_GenerateStartCondition(I2Cx); //send slave LL_I2C_TransmitData8(I2Cx, address); I2C_Wait(I2Cx); //send register address LL_I2C_TransmitData8(I2Cx, reg_addr); I2C_Wait(I2Cx); LL_I2C_GenerateStopCondition(I2Cx); /*-----------second step - read from the written register address-----*/ //slave address for read address = slave_addr | 0x01; //Repeated Start LL_I2C_GenerateStartCondition(I2Cx); LL_I2C_TransmitData8(I2Cx, address); I2C_Wait(I2Cx); LL_I2C_SetTransferRequest(I2Cx, LL_I2C_REQUEST_READ); LL_I2C_AcknowledgeNextData(I2Cx, LL_I2C_ACK); *data = LL_I2C_ReceiveData8(I2Cx); for (delay = 0; delay < 1000; delay++) ; } void I2C_Write(I2C_TypeDef * I2Cx, uint8_t slave_addr, uint8_t reg_addr, uint8_t data) { //for write operation R/Wn bit should be low uint8_t address = slave_addr & 0xFE; LL_I2C_SetTransferRequest(I2Cx, LL_I2C_REQUEST_WRITE); // send start signal LL_I2C_GenerateStartCondition(I2Cx); // send ID with W/R bit LL_I2C_TransmitData8(I2Cx, address); I2C_Wait(I2Cx); // Write Register Address LL_I2C_TransmitData8(I2Cx, reg_addr); I2C_Wait(I2Cx); LL_I2C_TransmitData8(I2Cx, data); I2C_Wait(I2Cx); LL_I2C_GenerateStopCondition(I2Cx); for (delay = 0; delay < 1000; delay++) ; } Но что то не работает. Может я ошибся в логике процесса? Кто нибудь знает I2C на низком уровне? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 10 февраля, 2020 Опубликовано 10 февраля, 2020 · Жалоба У NXP спецификация на "И-квадрат-Си" шину в открытом доступе дольше, чем вы на форуме... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 11 февраля, 2020 Опубликовано 11 февраля, 2020 · Жалоба 9 часов назад, Obam сказал: У NXP спецификация на "И-квадрат-Си" шину в открытом доступе дольше, чем вы на форуме... Ее даже можно не открывать. Вместо этого открыть мануал на МК и по регистрам с нуля написать за пару часов офигительный драйвер. Но Женя, видимо, считает, что словосочетание "низкоуровневый программист" это про качество работы программиста Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться