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

Аналого-цифровое преобразование

390

99

100void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {

101convCompleted = 1;

102}

Код должен быть достаточно простым для понимания. Функция MX_TIM2_Init() конфигурирует таймер TIM2 так, чтобы он переполнялся каждую 1 с. Кроме того, таймер сконфигурирован так, что когда он переполняется, устанавливается линия TRGO (строка 95). Вместо этого АЦП сконфигурирован на выполнение 3 преобразований одного и того же канала (канала, подключенного к датчику температуры). АЦП также сконфигурирован на запуск от линии TRGO таймера TIM2 (строки [64:65]). Наконец, таймер запускается в строке 29, и АЦП запускается в режиме DMA, чтобы считать через DMA 3 выборки данных из регистра данных. DMA также сконфигурирован для работы в циклическом режиме. Если вы запустите пример, то увидите, что каждые три секунды DMA завершает передачу и устанавливается переменная convCompleted: это приводит к тому, что три преобразования отправляются по интерфейсу UART2.

Владельцы плат Nucleo на основе микроконтроллера STM32F410RB найдут немного другой пример. Это потому, что эти микроконтроллеры STM32 не позволяют запускать АЦП по событию обновления таймера, а только по событию захвата/сравнения. По этой причине таймер запускается в режиме захвата/сравнения, как описано в Главе 11.

12.2.9. Преобразования, управляемые внешними событиями

В некоторых микроконтроллерах STM32 можно сконфигурировать линию запроса прерывания контроллера EXTI для запуска аналого-цифрового преобразования. Например, в микроконтроллере STM32F401RE линия 11 контроллера EXTI может быть разрешена для такого использования. Это означает, что любой вывод микроконтроллера, подключенный к данной линии (PA11, PB11 и т. д.), является допустимым источником для запуска преобразований. Обратите внимание, что невозможно одновременно использовать линию EXTI и таймер в качестве источника запуска.

12.2.10. Калибровка АЦП

АЦП, реализованные в некоторых семействах STM32, например, в STM32L4 и в STM32F3, предоставляют процедуру автоматической калибровки, которая управляет всей последовательностью калибровки, включая последовательность включения/отключения АЦП. Во время данной процедуры АЦП вычисляет калибровочный коэффициент размерностью 7 бит, который применяется внутри АЦП до следующего отключения АЦП. Во время процедуры калибровки приложение не должно использовать АЦП и должно ждать завершения калибровки. Калибровка является предварительной для любой операции АЦП. Она устраняет погрешность смещения (offset error), которая может варьироваться от микросхемы к микросхеме из-за изменений в техпроцессе или в запрещенной зоне (bandgap). Калибровочный коэффициент, применяемый для несимметричных (singleended) входов, отличается от коэффициента, применяемого для дифференциальных входов.

Модуль HAL_ADC_Ex предоставляет три функции, которые используются при калибровке АЦП. Функция