STM32F4. Урок 18 - Низькорівневий I2C
Ця бібліотека призначена для використання інтерфейсу 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); // функція затримки
Приклад використання:
//-------------------------------------------------------------- // Файл : main.c // Дата : 07.03.2013 // Версія : 1.0 // Автор : UB // EMail : mc-4u(@)t-online.de // Веб : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Модуль : CMSIS_BOOT, M4_CMSIS_CORE // Функція : Демонстрація I2C-LoLevel-бібліотеки // Примітка : Ці два файли повинні бути на 8MHz // "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 // Зберегти в реєстрі адресу 0x02 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 Кб)