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

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

370

Для высокоскоростных аналого-цифровых преобразований важно учитывать влияние компоновки печатной платы и правильность развязки цепей при проектировании платы. ST предоставляет хорошо написанное руководство по применению, AN283423, которое предлагает несколько важных советов по использованию АЦП, встроенного в микроконтроллеры STM32.

12.2. Модуль HAL_ADC

После краткого ознакомления с наиболее важными возможностями, предлагаемыми периферийным устройством АЦП в микроконтроллерах STM32, самое время погрузиться в связанные с ним API-интерфейсы CubeHAL.

Чтобы манипулировать периферийным устройством АЦП, HAL объявляет структуру Си ADC_HandleTypeDef, которая определена следующим образом:

typedef struct {

 

 

 

ADC_TypeDef

*Instance;

/* Указатель на дескриптор АЦП

*/

ADC_InitTypeDef

Init;

/* Параметры инициализации АЦП

*/

__IO uint32_t

NbrOfCurrentConversionRank;

/* Номер текущего ранга

 

 

 

преобразования АЦП

*/

DMA_HandleTypeDef

*DMA_Handle;

/* Указатель на дескриптор DMA

*/

HAL_LockTypeDef

Lock;

/* Блокировка объекта АЦП

*/

__IO uint32_t

State;

/* Состояние работы АЦП

*/

__IO uint32_t

ErrorCode;

/* Код ошибки АЦП

*/

} ADC_HandleTypeDef;

 

 

 

Давайте проанализируем наиболее важные поля данной структуры.

Instance (экземпляр): указатель на дескриптор АЦП, который мы будем исполь-

зовать. Например, ADC1 является дескриптором первого периферийного устройства АЦП.

Init: экземпляр структуры Си ADC_InitTypeDef, которая используется для конфи-

гурации АЦП. Мы рассмотрим ее более подробно в ближайшее время.

NbrOfCurrentConversionRank: соответствует текущему i-му каналу (рангу) в регуляр-

ной группе преобразования. Мы опишем данный параметр лучше в ближайшее время.

DMA_Handle: указатель на дескриптор DMA, сконфигурированный для выполнения

аналого-цифрового преобразования в режиме DMA. Он автоматически конфигурируется макросом __HAL_LINKDMA().

2http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/application_note/CD00211314.pdf

3Аналогичным руководством по применению для серии STM32F37x/38x является AN4207

(https://www.st.com/content/ccc/resource/technical/document/application_note/d9/90/d7/70/7c/ff/45/6d/DM00070 480.pdf/files/DM00070480.pdf/jcr:content/translations/en.DM00070480.pdf).

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

 

371

Конфигурация АЦП выполняется

с использованием экземпляра структуры

Си

ADC_InitTypeDef, которая определена следующим образом4:

 

typedef struct {

 

 

uint32_t ClockPrescaler;

/* Выбор тактовой частоты АЦП

*/

uint32_t Resolution;

/* Конфигурация разрядности АЦП

*/

uint32_t ScanConvMode;

/* Установка режима сканирования каналов.

*/

uint32_t ContinuousConvMode;

/* Определяет, выполняется ли преобразование

 

 

в непрерывном или однократном режиме

*/

uint32_t DataAlign;

/* Определяет, является ли выравнивание в регистре

 

данных АЦП левым или правым

*/

uint32_t NbrOfConversion;

/* Задает количество входов АЦП, которые

 

 

будут преобразованы в пределах

 

 

последовательности регулярной группы

*/

uint32_t NbrOfDiscConversion;

/* Задает количество прерывистых преобразований

 

 

основной последовательности регулярной

 

 

группы

*/

uint32_t DiscontinuousConvMode;

/* Определяет, выполняется ли последовательность

 

преобразования регулярной группы в Полной

 

 

или в Прерывистой последовательности

*/

uint32_t ExternalTrigConv;

/* Выбор внешнего события, используемого для

 

 

срабатывания запуска преобразования

*/

uint32_t ExternalTrigConvEdge;

/* Выбор фронта источника внешнего запуска и

 

 

его разрешение (имеется ввиду включение)

*/

uint32_t DMAContinuousRequests;

/* Определяет, выполняются ли запросы к DMA

 

 

в однократном или в непрерывном режиме

*/

uint32_t EOCSelection;

/* Определяет, какой флаг EOC используется для

 

 

режима опроса преобразования и прерываний

*/

} ADC_InitTypeDef;

 

 

Давайте проанализируем наиболее важные поля данной структуры.

ClockPrescaler: задает тактовую частоту (ADCCLK) для аналоговой части схемы

АЦП. В предыдущем параграфе мы видели, что АЦП имеет внутренний блок синхронизации, который управляет частотой переключения входного переключателя (см. рисунок 2). ADCCLK устанавливает скорость этого блока синхронизации и влияет на число выборок в секунду, поскольку определяет количество времени, используемое каждым тактом преобразования. Этот тактовый сигнал генерируется из тактового сигнала периферии, разделенного программируемым предделителем, который позволяет АЦП работать на частотах fPCLK /2,/4,/6 или /8 (сведения о максимальных значениях ADCCLK и его предделителе приведены в техническом описании конкретного микроконтроллера). В некоторых микроконтроллерах STM32 сигнал ADCCLK также может быть получен из HSI-генератора. Значение данного поля влияет на тактовый сигнал ADCCLK всех АЦП, реализованных в микроконтроллере.

4 Структура ADC_InitTypeDef немного отличается от структуры, определенной в HAL CubeF0 и CubeL0. Это связано с тем, что АЦП в этих семействах не дает возможности определять пользовательские входные последовательности дискретизации (назначая значения рангов). Кроме того, АЦП в этих семействах предоставляют возможность выполнять передискретизацию входного сигнала, а в HAL CubeL0 можно включить специальные функции с пониженным энергопотреблением, предлагаемые АЦП в этих микроконтроллерах. Для получения дополнительной информации обратитесь к исходному коду CubeHAL.