Эта библиотека предназначена для использования интерфейса I2C в режиме Master. Выбранные выводы I2C должны быть записаны в C-файле (в H-файле можно регулировать частоту тактирования). К линиям SCL и SDA необходимо подключить подтягивающие вверх резисторы по 4,7кОм, иначе интерфейс работать не будет. Данная библиотека позволяет использовать низкоуровневые функции для отправки и получения байтов от устройства Slave.В библиотеке есть функции для приема/отправки как одиночных байтов, так и последовательности. Для приема/отправки нескольких байт используется массив. Также предусмотрена функция паузы, необходимая для работы с медленными устройствами. В примере приведено три одинаковые библиотеки - I2C1, I2C2 и I2C3. Для работы с библиотекой I2C1 SCL подключается к PB6, а SDA - к PB7.
Требования:
Подключаемые модули CooCox-IDE: GPIO, I2C.
Поддерживаемые библиотеки: отсутствуют.
Функции:
void UB_I2C1_Init(void); // инициализация интерфейса I2C int16_t UB_I2C1_ReadByte(uint8_t slave_adr, uint8_t adr); // прочтение байта int16_t UB_I2C1_WriteByte(uint8_t slave_adr, uint8_t adr, uint8_t wert); // запись байта int16_t UB_I2C1_ReadMultiByte(uint8_t slave_adr, uint8_t adr, uint8_t cnt); // чтение нескольких байт int16_t UB_I2C1_WriteMultiByte(uint8_t slave_adr, uint8_t adr, uint8_t cnt); // запись нескольких байт void UB_I2C1_Delay(volatile uint32_t nCount); // функция паузы
Пример использования:
//-------------------------------------------------------------- // File : main.c // Datum : 07.03.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der I2C-LoLevel-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_i2c1.h" int main(void) { int16_t wert; SystemInit(); // Инициализация кварца UB_I2C1_Init(); // Инициализация I2C1 // Байт ведомого устройства I2C с адресом 0xA0 // Читать адрес 0x01 из регистра wert=UB_I2C1_ReadByte(0xA0,0x01); if(wert<0) { // ошибка } // Байт 0x12 ведомого устройства I2C с адресом 0xC0 // Сохранить в регистре адрес 0х02 wert=UB_I2C1_WriteByte(0xC0,0x02,0x12); if(wert<0) { // ошибка } UB_I2C1_Delay(400); // небольшая пауза while(1) { } }
В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_i2c_v101_rus.rar (10 Кб)
- Demo_18_I2C_LoLevel_rus.rar (177 Кб)
Комментарии (3) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация