STM Урок 191. LL. STM32F1. ADC. Regular Once. DMA. Запуск по таймеру

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

С запуском АЦП по событию таймера мы уже знакомы из урока 188, поэтому написать нам код будет не так сложно. Также мы уже не будем исследовать изменения в инициализации ADC, так как мы уже знаем, что там и где изменится.

Схема нашего урока не изменилась также не изменилась

 

 

Проект мы сделаем из проекта урока 189 урока с именем LL_ADC_REG_DMA и дадим ему имя LL_ADC_REG_TIM_DMA.

 

 

Откроем наш проект в Cube MX и включим таймер 3

 

 

Настроим период таймера 100 милисекунд и включим событие, по которому таймер будет дёргать ADC

 

 

В свойствах ADC1 настроим старт конверсии от нашего таймера

 

 

Не забываем также задействовать библиотеку LL для таймера

 

 

 

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

 

 

Выведем соответствующую строку на дисплей

 

 

Запустим наш таймер

 

 

Удалим вызов функции старта АЦП из бесконечного цикла, так как он будет стартовать от таймера

 

/* USER CODE BEGIN 3 */

LL_ADC_REG_StartConversionSWStart(ADC1);

 

Также поднимем выше сброс флага во избежание одновременного обращения к массиву с сырыми значениями каналов

 

fl_adc = 0;

while (!fl_adc) {}

fl_adc = 0;

 

Также удалим задержку, она теперь нам не нужна, так как конверсия засчёт настройки таймера будет происходить 10 раз в секунду и мы будем вместо задержки ждать установки флага

 

LCD_String(str01);

LL_mDelay(100);

 

Соберём код, прошьём контроллер и посмотрим результат

 

 

 

У нас по-прежнему всё отлично работает!

Таким образом, на данном уроке мы научились запускать преобразование от регулярных каналов по событию таймера, как и раньше, используя при этом периферию DMA.

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

 

 

 

Исходный код

 

 

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

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

Дисплей LCD 16×2

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

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

 

 

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

STM LL. STM32F1. ADC. Regular Once. DMA. Запуск по таймеру

 

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

STM LL. STM32F1. ADC. Regular Once. DMA. Запуск по таймеру

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

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

*