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



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

С данным механизмом мы уже неоднократно работали, поэтому, думаю, нам будет в данном уроке несложно.

Схема наша также осталась прежней

 

 

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

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

 

 

 

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

 

 

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

 

 

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

 

 

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

 

 

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

 

 

 

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

 

LCD_String("Scan Interrupt");

 

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

 

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 Scan. Interrupt

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

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

*