ݺߣ

ݺߣShare a Scribd company logo
ПРОГРАММНО-
УПРАВЛЯЕМЫЕ
МИКРОКОНТРОЛЛЕРНЫЕ
УСТРОЙСТВА
Лектор: Камлач Павел Викторович
Кафедра ЭТТ
Ауд. 120 к.1, Ауд. 610 к.2
2017
1
2
АЦП STM32
1.Регистры АЦП STM32
2.Пример работы АЦП STM32
3
1. Регистры АЦП STM32.
Периферийные регистры должны быть записаны на уровне
слова (32 бита). Чтение доступа может выполняться
байтами (8 бит), полусловами (16 бит) или словами (32
бита)
4
1. SR – содержит флаги, указывающие на состояние АЦП.
2. CR1, CR2 – управляющие регистры, задают режим работы.
3. SMPR1, SMPR2 – задают время преобразования.
4. JOFR1…JOFR2 – определяют смещение данных в
инжектированной группе (ух, как сложно воспринимается при
первом прочтении).
5. HTR, LTR – задают верхнее и нижнее значение срабатывания
оконного компаратора.
6. SQR1…SQR3 – задают последовательность каналов
регулярной группы.
7. JSQR – задает последовательность каналов инжектированной
группы.
8. JDR1…JDR4 – регистры данных инжектированной группы.
9. DR – регистр данных регулярной группы.
5
ADC status register (ADC_SR)
6
ADC control register 1 (ADC_CR1)
7
ADC control register 2 (ADC_CR2)
8
Структура регистра ADC_SMPR1
Структура регистра ADC_SMPR2
9
ADC injected channel data offset register x
(ADC_JOFRx) (x=1..4)
10
Регистры LTR и HTR
11
Регистры SQRх
12
Регистр JSQR
13
Регистр JDRx
14
Регистр DR
15
ADC Common statusregister (ADC_CSR)
16
ADC common control register (ADC_CCR)
17
2. Пример работы АЦП STM32.
1) Включить тактирование порта А
2) Настроить ногу PA1 как вход без подтяжки (по
умолчанию она уже в таком состоянии)
3) Включить тактирование АЦП
4) Начать калибровку и дождаться её завершения
5) Добавить канал ADC1 в состав инжектированной группы
6) Выбрать источником запуска бит JSWSTART
7) Активировать режим непрерывного преобразования
8) Включить АЦП
9) Запустить преобразование
10) Дождаться завершения первого преобразования
11) Прочитать результат
18
19
#include<stm32f10x_rcc.h>
#include<stm32f10x_gpio.h>
#include "stm32f10x.h"
void delay(uint32_t i) {
volatile uint32_t j;
for (j=0; j!= i * 1000; j++)
;
}
20
int main(void)
{
GPIO_InitTypeDef PORT; //Включаем порты А
RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOA) , ENABLE); //Настраиваем ноги PC8 и PC9 на
выход. Там у нас висят светодиоды
PORT.GPIO_Pin = (GPIO_Pin_9 | GPIO_Pin_8);
PORT.GPIO_Mode = GPIO_Mode_Out_PP;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init( GPIOC , &PORT);
//Порт A настраивать смысла нет, все его ноги по умолчанию входы
что нам и нужно
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);
//Включаем тактирование АЦП
ADC1->CR2 |= ADC_CR2_CAL; //Запуск калибровки АЦП
while (!(ADC1->CR2 & ADC_CR2_CAL)); //Ожидаем окончания
калибровки
ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 |
ADC_SMPR2_SMP1_0); //Задаем длительность выборки
21
ADC1->CR2 |= ADC_CR2_JEXTSEL; //Преобразование нжектированной
группы запустится установкой бита JSWSTART
ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск
инжектированной группы
ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно
за другим
ADC1->CR1 |= ADC_CR1_JAUTO; //Разрешить преобразование
инжектированной группы
ADC1->JSQR |= (1<<15); //Задаем номер канала (выбран ADC1)
ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП
ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований
while (!(ADC1->SR & ADC_SR_JEOC)) ; //ждем пока первое
преобразование завершится
//Теперь можно читать результат из JDR1
uint32_t adc_res; // переменную для отладки
22
while(1)
{
adc_res=ADC1->JDR1;
delay(adc_res); //Исходя из значения АЦП делаем задержку
GPIO_WriteBit(GPIOC,GPIO_Pin_8,Bit_RESET); //Гасим диод...
GPIO_WriteBit(GPIOC,GPIO_Pin_9,Bit_SET); // Зажигаем диод...
adc_res=ADC1->JDR1;
delay(adc_res); //Всё повторяется...
GPIO_WriteBit(GPIOC,GPIO_Pin_9,Bit_RESET);
GPIO_WriteBit(GPIOC,GPIO_Pin_8,Bit_SET);
}
}
23
Вопросы?

More Related Content

What's hot (20)

12. usart STM32
12. usart STM3212. usart STM32
12. usart STM32
KamlachPV
09. usart
09. usart09. usart
09. usart
KamlachPV
10. DMA STM32
10. DMA STM3210. DMA STM32
10. DMA STM32
KamlachPV
12. spi
12. spi12. spi
12. spi
KamlachPV
15. Сторожевые таймеры STM32
15. Сторожевые таймеры STM3215. Сторожевые таймеры STM32
15. Сторожевые таймеры STM32
KamlachPV
05. timers
05. timers05. timers
05. timers
KamlachPV
07. Работа с битами и невыровненными данными
07. Работа с битами и невыровненными данными07. Работа с битами и невыровненными данными
07. Работа с битами и невыровненными данными
KamlachPV
10. dac
10. dac10. dac
10. dac
KamlachPV
08. adc
08. adc08. adc
08. adc
KamlachPV
презентация7
презентация7презентация7
презентация7
student_kai
03.interrupt
03.interrupt03.interrupt
03.interrupt
KamlachPV
02. gpio
02. gpio02. gpio
02. gpio
KamlachPV
7.13.6 Руководство пользователя Altistart 48
7.13.6 Руководство пользователя Altistart 487.13.6 Руководство пользователя Altistart 48
7.13.6 Руководство пользователя Altistart 48
Igor Golovin
7.13.7 Руководство пользователя Altistart 48 протокол Modbus
7.13.7 Руководство пользователя Altistart 48 протокол Modbus7.13.7 Руководство пользователя Altistart 48 протокол Modbus
7.13.7 Руководство пользователя Altistart 48 протокол Modbus
Igor Golovin
01. Вводная лекция
01. Вводная лекция01. Вводная лекция
01. Вводная лекция
KamlachPV
04. cs
04. cs04. cs
04. cs
KamlachPV
07. dma
07. dma07. dma
07. dma
KamlachPV
контроллеры Duso cont
контроллеры Duso contконтроллеры Duso cont
контроллеры Duso cont
Alex Dyblya
описание бортового контроллера Locarus 702
описание бортового контроллера Locarus 702описание бортового контроллера Locarus 702
описание бортового контроллера Locarus 702
guest08fd05
15. Сторожевые таймеры STM32
15. Сторожевые таймеры STM3215. Сторожевые таймеры STM32
15. Сторожевые таймеры STM32
KamlachPV
07. Работа с битами и невыровненными данными
07. Работа с битами и невыровненными данными07. Работа с битами и невыровненными данными
07. Работа с битами и невыровненными данными
KamlachPV
презентация7
презентация7презентация7
презентация7
student_kai
7.13.6 Руководство пользователя Altistart 48
7.13.6 Руководство пользователя Altistart 487.13.6 Руководство пользователя Altistart 48
7.13.6 Руководство пользователя Altistart 48
Igor Golovin
7.13.7 Руководство пользователя Altistart 48 протокол Modbus
7.13.7 Руководство пользователя Altistart 48 протокол Modbus7.13.7 Руководство пользователя Altistart 48 протокол Modbus
7.13.7 Руководство пользователя Altistart 48 протокол Modbus
Igor Golovin
01. Вводная лекция
01. Вводная лекция01. Вводная лекция
01. Вводная лекция
KamlachPV
контроллеры Duso cont
контроллеры Duso contконтроллеры Duso cont
контроллеры Duso cont
Alex Dyblya
описание бортового контроллера Locarus 702
описание бортового контроллера Locarus 702описание бортового контроллера Locarus 702
описание бортового контроллера Locarus 702
guest08fd05

Similar to 09. АЦП STM32(2) (20)

Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
Smolensk Computer Science Club
описание процессор спутник
описание процессор спутникописание процессор спутник
описание процессор спутник
Андрей Марин
Лекция № 2 Организация ЭВМ и систем
Лекция № 2 Организация ЭВМ и системЛекция № 2 Организация ЭВМ и систем
Лекция № 2 Организация ЭВМ и систем
Александр Силантьев
Лекция №2 Организация ЭВМ и систем
Лекция №2 Организация ЭВМ и системЛекция №2 Организация ЭВМ и систем
Лекция №2 Организация ЭВМ и систем
pianist2317
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
Tech Talks @NSU
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Mikhail Kurnosov
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Mikhail Kurnosov
Nedospasov defcon russia 23
Nedospasov defcon russia 23Nedospasov defcon russia 23
Nedospasov defcon russia 23
DefconRussia
7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)
Smolensk Computer Science Club
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
GetDev.NET
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Mikhail Kurnosov
Обзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектурОбзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектур
IoT Community
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Mikhail Kurnosov
Стек протоколов ip
Стек протоколов ipСтек протоколов ip
Стек протоколов ip
Дмитрий Тихонов
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
larhat
ЭКРА. Проблемы построения и надежности цифровой подстанции
ЭКРА. Проблемы построения и надежности цифровой подстанцииЭКРА. Проблемы построения и надежности цифровой подстанции
ЭКРА. Проблемы построения и надежности цифровой подстанции
DigitalSubstation
High performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиHigh performance computing - принципы проектирования сети
High performance computing - принципы проектирования сети
MUK
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
Smolensk Computer Science Club
описание процессор спутник
описание процессор спутникописание процессор спутник
описание процессор спутник
Андрей Марин
Лекция №2 Организация ЭВМ и систем
Лекция №2 Организация ЭВМ и системЛекция №2 Организация ЭВМ и систем
Лекция №2 Организация ЭВМ и систем
pianist2317
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
Tech Talks @NSU
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Mikhail Kurnosov
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...Использование Time-Stamp Counter для измерения времени выполнения кода  на пр...
Использование Time-Stamp Counter для измерения времени выполнения кода на пр...
Mikhail Kurnosov
Nedospasov defcon russia 23
Nedospasov defcon russia 23Nedospasov defcon russia 23
Nedospasov defcon russia 23
DefconRussia
7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)
Smolensk Computer Science Club
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
GetDev.NET
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Mikhail Kurnosov
Обзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектурОбзор современных микроконтроллеров и их архитектур
Обзор современных микроконтроллеров и их архитектур
IoT Community
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Mikhail Kurnosov
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
larhat
ЭКРА. Проблемы построения и надежности цифровой подстанции
ЭКРА. Проблемы построения и надежности цифровой подстанцииЭКРА. Проблемы построения и надежности цифровой подстанции
ЭКРА. Проблемы построения и надежности цифровой подстанции
DigitalSubstation
High performance computing - принципы проектирования сети
High performance computing - принципы проектирования сетиHigh performance computing - принципы проектирования сети
High performance computing - принципы проектирования сети
MUK

More from KamlachPV (20)

16. sa
16. sa16. sa
16. sa
KamlachPV
15. lcd
15. lcd15. lcd
15. lcd
KamlachPV
14. 5in3
14. 5in314. 5in3
14. 5in3
KamlachPV
11. i2c
11. i2c11. i2c
11. i2c
KamlachPV
06. memory
06. memory06. memory
06. memory
KamlachPV
11. Слуховой аппарат
11. Слуховой аппарат11. Слуховой аппарат
11. Слуховой аппарат
KamlachPV
10. Биоуправляемые ортопедические аппараты
10. Биоуправляемые ортопедические аппараты10. Биоуправляемые ортопедические аппараты
10. Биоуправляемые ортопедические аппараты
KamlachPV
09. Биоуправление
09. Биоуправление09. Биоуправление
09. Биоуправление
KamlachPV
08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО
08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО
08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО
KamlachPV
07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ
07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ
07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ
KamlachPV
06. Искусственная почка
06. Искусственная почка06. Искусственная почка
06. Искусственная почка
KamlachPV
05. Искусственные имплантанты в офтальмологии
05. Искусственные имплантанты в офтальмологии05. Искусственные имплантанты в офтальмологии
05. Искусственные имплантанты в офтальмологии
KamlachPV
04. Ортезотерапия
04. Ортезотерапия04. Ортезотерапия
04. Ортезотерапия
KamlachPV
03. Искусственная коррекция движений
03. Искусственная коррекция движений03. Искусственная коррекция движений
03. Искусственная коррекция движений
KamlachPV
02. Психологическая диагностика
02. Психологическая диагностика02. Психологическая диагностика
02. Психологическая диагностика
KamlachPV
01. Реабилитация
01. Реабилитация01. Реабилитация
01. Реабилитация
KamlachPV
15. vozdeystvi ye na litosferu
15. vozdeystvi ye na litosferu15. vozdeystvi ye na litosferu
15. vozdeystvi ye na litosferu
KamlachPV
14. vozdeystvi ye na gidrosferu
14. vozdeystvi ye na gidrosferu14. vozdeystvi ye na gidrosferu
14. vozdeystvi ye na gidrosferu
KamlachPV
13. ischerpayemyye istochniki energii
13. ischerpayemyye istochniki energii13. ischerpayemyye istochniki energii
13. ischerpayemyye istochniki energii
KamlachPV
12. energosberezheniye
12. energosberezheniye12. energosberezheniye
12. energosberezheniye
KamlachPV
11. Слуховой аппарат
11. Слуховой аппарат11. Слуховой аппарат
11. Слуховой аппарат
KamlachPV
10. Биоуправляемые ортопедические аппараты
10. Биоуправляемые ортопедические аппараты10. Биоуправляемые ортопедические аппараты
10. Биоуправляемые ортопедические аппараты
KamlachPV
09. Биоуправление
09. Биоуправление09. Биоуправление
09. Биоуправление
KamlachPV
08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО
08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО
08. РАЗРАБОТКА И ПОСТАНОВКА МЕДИЦИНСКИХ ИЗДЕЛИЙ НА ПРОИЗВОДСТВО
KamlachPV
07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ
07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ
07. АППАРАТЫ ИСКУССТВЕННОГО КРОВООБРАЩЕНИЯ
KamlachPV
06. Искусственная почка
06. Искусственная почка06. Искусственная почка
06. Искусственная почка
KamlachPV
05. Искусственные имплантанты в офтальмологии
05. Искусственные имплантанты в офтальмологии05. Искусственные имплантанты в офтальмологии
05. Искусственные имплантанты в офтальмологии
KamlachPV
04. Ортезотерапия
04. Ортезотерапия04. Ортезотерапия
04. Ортезотерапия
KamlachPV
03. Искусственная коррекция движений
03. Искусственная коррекция движений03. Искусственная коррекция движений
03. Искусственная коррекция движений
KamlachPV
02. Психологическая диагностика
02. Психологическая диагностика02. Психологическая диагностика
02. Психологическая диагностика
KamlachPV
01. Реабилитация
01. Реабилитация01. Реабилитация
01. Реабилитация
KamlachPV
15. vozdeystvi ye na litosferu
15. vozdeystvi ye na litosferu15. vozdeystvi ye na litosferu
15. vozdeystvi ye na litosferu
KamlachPV
14. vozdeystvi ye na gidrosferu
14. vozdeystvi ye na gidrosferu14. vozdeystvi ye na gidrosferu
14. vozdeystvi ye na gidrosferu
KamlachPV
13. ischerpayemyye istochniki energii
13. ischerpayemyye istochniki energii13. ischerpayemyye istochniki energii
13. ischerpayemyye istochniki energii
KamlachPV
12. energosberezheniye
12. energosberezheniye12. energosberezheniye
12. energosberezheniye
KamlachPV

09. АЦП STM32(2)

  • 2. 2 АЦП STM32 1.Регистры АЦП STM32 2.Пример работы АЦП STM32
  • 3. 3 1. Регистры АЦП STM32. Периферийные регистры должны быть записаны на уровне слова (32 бита). Чтение доступа может выполняться байтами (8 бит), полусловами (16 бит) или словами (32 бита)
  • 4. 4 1. SR – содержит флаги, указывающие на состояние АЦП. 2. CR1, CR2 – управляющие регистры, задают режим работы. 3. SMPR1, SMPR2 – задают время преобразования. 4. JOFR1…JOFR2 – определяют смещение данных в инжектированной группе (ух, как сложно воспринимается при первом прочтении). 5. HTR, LTR – задают верхнее и нижнее значение срабатывания оконного компаратора. 6. SQR1…SQR3 – задают последовательность каналов регулярной группы. 7. JSQR – задает последовательность каналов инжектированной группы. 8. JDR1…JDR4 – регистры данных инжектированной группы. 9. DR – регистр данных регулярной группы.
  • 9. 9 ADC injected channel data offset register x (ADC_JOFRx) (x=1..4)
  • 16. 16 ADC common control register (ADC_CCR)
  • 17. 17 2. Пример работы АЦП STM32. 1) Включить тактирование порта А 2) Настроить ногу PA1 как вход без подтяжки (по умолчанию она уже в таком состоянии) 3) Включить тактирование АЦП 4) Начать калибровку и дождаться её завершения 5) Добавить канал ADC1 в состав инжектированной группы 6) Выбрать источником запуска бит JSWSTART 7) Активировать режим непрерывного преобразования 8) Включить АЦП 9) Запустить преобразование 10) Дождаться завершения первого преобразования 11) Прочитать результат
  • 18. 18
  • 20. 20 int main(void) { GPIO_InitTypeDef PORT; //Включаем порты А RCC_APB2PeriphClockCmd((RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOA) , ENABLE); //Настраиваем ноги PC8 и PC9 на выход. Там у нас висят светодиоды PORT.GPIO_Pin = (GPIO_Pin_9 | GPIO_Pin_8); PORT.GPIO_Mode = GPIO_Mode_Out_PP; PORT.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init( GPIOC , &PORT); //Порт A настраивать смысла нет, все его ноги по умолчанию входы что нам и нужно RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE); //Включаем тактирование АЦП ADC1->CR2 |= ADC_CR2_CAL; //Запуск калибровки АЦП while (!(ADC1->CR2 & ADC_CR2_CAL)); //Ожидаем окончания калибровки ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP1_0); //Задаем длительность выборки
  • 21. 21 ADC1->CR2 |= ADC_CR2_JEXTSEL; //Преобразование нжектированной группы запустится установкой бита JSWSTART ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск инжектированной группы ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно за другим ADC1->CR1 |= ADC_CR1_JAUTO; //Разрешить преобразование инжектированной группы ADC1->JSQR |= (1<<15); //Задаем номер канала (выбран ADC1) ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований while (!(ADC1->SR & ADC_SR_JEOC)) ; //ждем пока первое преобразование завершится //Теперь можно читать результат из JDR1 uint32_t adc_res; // переменную для отладки
  • 22. 22 while(1) { adc_res=ADC1->JDR1; delay(adc_res); //Исходя из значения АЦП делаем задержку GPIO_WriteBit(GPIOC,GPIO_Pin_8,Bit_RESET); //Гасим диод... GPIO_WriteBit(GPIOC,GPIO_Pin_9,Bit_SET); // Зажигаем диод... adc_res=ADC1->JDR1; delay(adc_res); //Всё повторяется... GPIO_WriteBit(GPIOC,GPIO_Pin_9,Bit_RESET); GPIO_WriteBit(GPIOC,GPIO_Pin_8,Bit_SET); } }