Для самого запуска ADC, в нашем случае это ADC1->8 канал, и его работы по оцифровке
входного сигнала нужно совсем немного:
1) Настройка тактирования нужного порта (GPIOB).
2) Настройка входного пина PB0 на котором находится 8 канал ADC1 (см. Документацию вывода ножек. Нас интересует "третье" состояние ножки - аналоговый режим, не путать с режимом альтернативной функции или тем более режимом обычного ввода/вывода). Тут нам понадобится всего один регистр GPIOB_MODER.
3) Настройка тактирования ADC1. Из физической схемы или карты адресного пространства видно, что ADC находятся на шине APB2. В регистрах тактирования RCC_APB2ENR находим бит ADC1EN, устанавливающий тактирование нужного нам ADC (ADC1).
4) Переходим к настройкам самого ADC. Устанавливаем бит ADDON регистра ADC1_CR2, который включит ADC. В этом режиме ADC потребляет незначительное количество энергии, и находится в состоянии покоя.
5) В этот же регистр ADC1_CR2 установим бит CONT (режим непрерывного преобразования).
6) В первые 5 битов регистра ADC1_SQR3 установим номер канала для преобразования (8 канал). В следующие биты этого регистра, задаются другие номера каналов если нужно их считывать по очереди.
7) Устанавливаем бит SWSTART регистра ADC1_CR2, который запускает процесс преобразования.
8) Ждем появления флага EOC в статусном регистре ADC1_SR, сигнализирующий о конце преобразования. Флаг сбрасывается аппаратно после чтения регистра данных ADC1_DR.
9) Читаем преобразованные данные с регистра ADC1_DR.
1) Настройка тактирования нужного порта (GPIOB).
2) Настройка входного пина PB0 на котором находится 8 канал ADC1 (см. Документацию вывода ножек. Нас интересует "третье" состояние ножки - аналоговый режим, не путать с режимом альтернативной функции или тем более режимом обычного ввода/вывода). Тут нам понадобится всего один регистр GPIOB_MODER.
3) Настройка тактирования ADC1. Из физической схемы или карты адресного пространства видно, что ADC находятся на шине APB2. В регистрах тактирования RCC_APB2ENR находим бит ADC1EN, устанавливающий тактирование нужного нам ADC (ADC1).
4) Переходим к настройкам самого ADC. Устанавливаем бит ADDON регистра ADC1_CR2, который включит ADC. В этом режиме ADC потребляет незначительное количество энергии, и находится в состоянии покоя.
5) В этот же регистр ADC1_CR2 установим бит CONT (режим непрерывного преобразования).
6) В первые 5 битов регистра ADC1_SQR3 установим номер канала для преобразования (8 канал). В следующие биты этого регистра, задаются другие номера каналов если нужно их считывать по очереди.
7) Устанавливаем бит SWSTART регистра ADC1_CR2, который запускает процесс преобразования.
8) Ждем появления флага EOC в статусном регистре ADC1_SR, сигнализирующий о конце преобразования. Флаг сбрасывается аппаратно после чтения регистра данных ADC1_DR.
9) Читаем преобразованные данные с регистра ADC1_DR.
- int main(void){
- RCC_GPIO|=0x2;
- GPIOB_MODER|=0x3;
- RCC_ADC|=0x100;// Установка тактирования ADC1
- ADC1_CR2=0x1;// Включаем ADC1
- ADC1_CR2|=0x2;// Постоянное преобразование
- ADC1_SQR3=8;// Номер канала
- ADC1_CR2|=0x40000000;// Запуск процесса преобразования
- while(1){
- while((ADC1_SR&0x2)!=0x2){}
- USART2_DR=ADC1_DR;// Отправляем данные куда нужно
- }
- }
Комментариев нет:
Отправить комментарий