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.

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

 

 

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

 

Исходный код

 

 

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

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

Дисплей LCD 16×2

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

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

 

 

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

 

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

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

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

*