Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2741
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

I2C

434

146if(hi2c->Instance == I2C1) {

147transferRequested = 1;

148transferDirection = TransferDirection;

149}

150}

Последняя часть, которую мы должны проанализировать, представлена обработчиками

ISR. ISR I2C1_EV_IRQHandler() вызывает HAL_I2C_EV_IRQHandler(), как было сказано ранее.

Это приводит к тому, что функция HAL_I2C_AddrCallback() вызывается каждый раз, когда ведущее устройство передает адрес ведомого устройства на шину. При вызове функция обратного вызова получает указатель на I2C_HandleTypeDef, представляющий собой дескриптор конкретного I²C, направление передачи (TransferDirection) и соответствующий адрес I²C (AddrMatchCode): он необходим, поскольку периферийное устройство I²C STM32, работающее в режиме ведомого, может ответить на два разных адреса, и поэтому у нас есть возможность написать условный код в зависимости от адреса I²C, выданного ведущим устройством.

14.3. Использование CubeMX для конфигурации периферийного устройства I²C

Как обычно, CubeMX сводит к минимуму усилия, необходимые для конфигурации периферийного устройства I²C. После включения периферийного устройства в представлении IP tree pane (из представления Pinout) мы можем сконфигурировать все параметры в представлении Configuration, как показано на рисунке 13.

Рисунок 13: Представление Configuration в CubeMX для конфигурации периферийного устройства I²C

I2C

435

Прочитайте внимательно

При включении периферийного устройства I2C1 в микроконтроллерах STM32 с корпусами LQFP-64 CubeMX по умолчанию включает периферийные I/O PB7 и PB6 (SDA и SCL соответственно). Это не те выводы, которые подключены к Arduino-совместимому разъему на Nucleo, поэтому вам нужно выбрать два альтернативных вывода PB9 и PB8, щелкнув по ним, а затем выбрав соответствующую функцию в выпадающем меню, как показано на рисунке 14.

Рисунок 14: Как выбрать правильные выводы I2C1 на плате Nucleo-64