STM Урок 193. LL. STM32F1. ADC. Injected Once. Interrupt



Продолжаем работать с АЦП (ADC) контроллера STM32F1 с использованием библиотеки LL. Также работать мы пока будем с однократным преобразованием и с инжектированным каналом, только отслеживать окончание процесса преобразования мы будем при помощи механизма прерываний от АЦП.

В уроке 186 мы уже работали с прерываниями от АЦП, правда работали мы тогда с регулярным каналом, но, думаю, что с инжекторным каналом использование механизма прерываний будет аналогичным.

Схема урока у нас также не изменится

 

 

Проект мы будем использовать с прошлого урока с именем LL_ADC_INJ_ONCE и назовём его LL_ADC_INJ_ONCE_INT.

Откроем проект в Cube MX и в настройках ADC1 включим глобальные прерывания

 

 

Сгенерируем проект для Keil, откроем его, настроим автоперезагрузку после прошивки, отключим оптимизацию, подключим к дереву проекта файлы lcd.c и i2c_user.c, откроем main.c и добавим глобальный пользовательский флаг

 

 

 

Добавим функцию, в которой данный флаг будет устанавливаться

 

 

В файле stm32f1xx_it.c добавим прототип для данной функции

 

 

В функции-обработчике прерываний от АЦП ADC1_2_IRQHandler вызовем нашу функцию, а также сбросим флаг прерывания, если он будет установлен

 

 

Вернёмся в main.c и в функции main() включим локальные прерывания по событию окончания преобразования

 

 

Добавим строку на дисплей

 

 

Удалим вот эти строки из бесконечного цикла

 

while (!LL_ADC_IsActiveFlag_JEOS(ADC1)) {}

LL_ADC_ClearFlag_JEOS(ADC1);

 

 

Вместо них обработаем установку нашего пользовательского флага

 

 

Вот и весь, в принципе, код. Проверим его работу

 

 

 

 

 

Таким образом, в данном уроке нам удалось, вооружившись накопленными знаниями, запустить механизм обработки прерываний АЦП, используя при этом уже не регулярный, а инжектированный канал, в результате чего мы теперь можем отслеживать событие окончания преобразования в отдельном обработчике, не затрагивая ход основной программы. Хотя сейчас это у нас не особо заметно, так как процедуру перерасчёта в вольты сырого значения сигнала и вывод его на дисплей мы проделываем по-прежнему в основном коде, и также висим перед этим, дожидаясь пользовательского флага, ибо мы не можем столь не совсем короткие вещи поручить обработчику прерываний, тем не менее мы знаем, как данный обработчик организовать, что в будущем позволит нам более короткие процедуры обработки окончания преобразования вынести именно туда.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Программатор недорогой можно купить здесь ST-Link V2

Дисплей LCD 16×2

Переходник I2C to LCD можно приобрести здесьI2C to LCD1602 2004

Логический анализатор 16 каналов можно приобрести здесь

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM LL. STM32F1. ADC. Injected Once. Interrupt

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*