Включение, запуск оцифров ки, режимы работы модулей ADC



Помимо того, что модуль ADC нужно затактироватьза тактировать, его ещё нужно включить. Включение модуля ADC производится установкой бита ADON в регистре ADC_CR2. Причём тут есть интересная особенность. Если ADON = 0 и вы записываете в этот бит значение 1, то происходит запуск модуля ADC (пробуждение из режима power-down). Если у Вас уже ADON = 1 и вы снова записываете в этот бит значение 1, то происходит старт оцифровки для группы обычных каналов (бит ADON устанавливается функцией ADC_Cmd библиотеки StdPeriph).

Запустить оцифровку для группы обычных каналов можно также по триггеру. Событие, вызывающее срабатывание триггера настраивается битами EXTSEL[2:0] регистра ADC_CR2 (функция ADC_Init библиотеки StdPeriph, параметр ADC_ExternalTrigConv). Сам режим запуска по триггеру разрешается установкой бита EXTTRIG регистра ADC_CR2 (функция ADC_ExternalTrigConvCmd библиотеки StdPeriph). Одним из вариантов срабатывания триггера является установка бита SWSTART регистра ADC_CR2 (это, так называемый «программный старт»). В библиотеке StdPeriph даже есть специальная функция (ADC_SoftwareStartConvCmd), которая может одновременно включить режим внешнего триггера и устанавитьустановить бит SWSTART сразу же вызывая срабатывание этого самого триггера.

Одиночные и непрерывные преобразования

Битом CONT регистра ADC_CR2 можно выбрать режим одиночных или непрерывных преобразований (CONT = 0 — single mode, CONT = 1 — continuous mode). В одиночном режиме после выполнения одного запроса на оцифровку ADC останавливается. В непрерывном режиме после выполнения одного запроса тут же генерируется новый и так до тех пор, пока ADC не будет выключен. С помощью библиотеки StdPeriph состояние бита CONT настраивается функцией ADC_Init (параметр ADC_ContinuousConvMode).

Сканирование списка каналов

Битом SCAN регистра ADC_CR1 можно включить или выключить режим сканирования. Если режим сканирования включен (SCAN = 1), то в результате запуска ADC будут по очереди просканированы и оцифрованы все каналы из обычной или инжектированной группы. В этом режиме нужно обязательно использовать DMA чтобы автоматически забирать результаты оцифровки каналов обычной группы. Если режим сканирования выключен, то будет оцифровываться только один единственный канал, — первый канал списка, указанный в битах SQ1[4:0] регистра ADC_SQR3 для группы обычных каналов, или канал, указанный в битах JSQx[4:0] регистра ADC_JSQR для группы инжектированных каналов (x=4-JL, где JL — размер группы инжектированных каналов, указанный в регистре ADC_JSQR). С помощью библиотеки StdPeriph состояние бита SCAN настраивается функцией ADC_Init (параметр ADC_ScanConvMode).

Использование DMA

Для того, чтобы после оцифровки каждого канала генерировался запрос к DMA — нужно разрешить его использование установкой в 1 бита DMA регистра ADC_CR2 (можно использовать функцию ADC_DMACmd библиотеки StdPeriph). Учтите, что запросы к DMA могут генерировать только ADC1 и ADC3. Забирать с помощью DMA данные от ADC2 можно только в том случае, если модули ADC1,2 работают совместно, в двойном режиме.

В самом контроллере DMA запросы от ADC1 висят на первом канале, который тоже нужно настроить, — указать откуда и куда перекладывать данные, их размер, как управлять счётчиком и так далее. При использовании библиотеки StdPeriph всё это можно сделать функцией DMA_Init.

Опрос инжектированных каналов

Опрос группы инжектированных каналов может запускаться двумя способами. Первый — по внешнему триггеру. Событие, вызывающее срабатывание триггера, в этом случае настраивается битами JEXTSEL[2:0] регистра ADC_CR2 (функция ADC_ExternalTrigInjectedConvConfig библиотеки StdPeriph), а сам режим разрешается установкой бита JEXTTRIG регистра ADC_CR2 (функция ADC_ExternalTrigInjectedConvCmd библиотеки StdPeriph). Для этой группы также есть свой бит программного старта — JSWSTART, а в библиотеке StdPeriph есть своя функция программного запуска оцифровки инжектированных каналов, одновременно устанавливающая биты JEXTTRIG и JSWSTART (фукция ADC_SoftwareStartInjectedConvCmd). Естественно, что для такого программного запуска сначала нужно настроить триггер инжектированной группы на срабатывание от бита JSWSTART.

Если событие, вызывающее срабатывание триггера произошло во время опроса обычной группы каналов, то опрос обычной группы прерывается, выполняется опрос инжектированной группы, после чего возобновляется опрос обычной группы.

Второй вариант запуска оцифровки группы инжектированных каналов — установить бит JAUTO в регистре ADC_CR1. В этом случае оцифровка каналов инжектированной группы будет автоматически запускаться после оцифровки всех каналов обычной группы. С помощью библиотеки StdPeriph состояние бита JAUTO можно задать функцией ADC_AutoInjectedConvCmd.


Дата добавления: 2020-01-07; просмотров: 225; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!