В демонстрационной плате Discovery на чипе STM32F407VG нет периферии для тестирования UART, поэтому чтоб в полной мере
изучить передачу данных этим интерфейсом понадобятся некоторые дополнительные приспособления. Конечно можно обойтись и
внутренними резервами, передавая сигнал от ножки к ножке замкнув их, но для более наглядной демонстрации лучше купить
переходник RS-232->USB, и используя разные терминалы симулирующие работу COM порта на компьютере передавать данные на
микроконтроллер, а также принимать от микроконтроллера видя сразу результат принятого текста.
В даном примере мы будем работать с периферией USART2 в STM32F407VG.
Начинается код традиционно с установкой тактирования выводов и самого модуля UART2 в регистре RCC_UART2. Так как порт GPIOA уже имеет некоторое значение по умолчанию в регистре GPIOA_MODER, последующие значения записываем через оператор "ИЛИ". Выводы UART2 отвечающие прием/передача (RX/TX) соответственно занимают пины PA2,PA3 и попадают в диапазон регистра GPIOA_AFRL (ножки 0-7). Номер альтернативной функции для UART2 равен 7 (вместе с UART1 и UART3, см . figure 26, Selecting an alternate function в документации). В GPIOA_AFRL устанавливаем значение соответствующее для AF7- 0x7700; (0b0111 - в биты соответствующие пинам PA2,PA3):
В регистр скорости передачи данных устанавливаем USART2_BRR=0x683; как получить данное значение читайте в STM32. USART
В даном примере мы будем работать с периферией USART2 в STM32F407VG.
Начинается код традиционно с установкой тактирования выводов и самого модуля UART2 в регистре RCC_UART2. Так как порт GPIOA уже имеет некоторое значение по умолчанию в регистре GPIOA_MODER, последующие значения записываем через оператор "ИЛИ". Выводы UART2 отвечающие прием/передача (RX/TX) соответственно занимают пины PA2,PA3 и попадают в диапазон регистра GPIOA_AFRL (ножки 0-7). Номер альтернативной функции для UART2 равен 7 (вместе с UART1 и UART3, см . figure 26, Selecting an alternate function в документации). В GPIOA_AFRL устанавливаем значение соответствующее для AF7- 0x7700; (0b0111 - в биты соответствующие пинам PA2,PA3):
В регистр скорости передачи данных устанавливаем USART2_BRR=0x683; как получить данное значение читайте в STM32. USART
- int main (void)
- {
- uint32_t i,k=0;
- RCC_UART2=0x20000; //тактирование UART2
- //.инициализация портов для UART2…
- GPIOA_MODER|=0xA0; //выводы UART как альтернативная функция
- GPIOA_AFRL=0x7700; //номер альтернативной функции
- //…………….инициализация UART2………
- USART2_BRR=0x683; //скорость передачи/приема
- USART2_CR1=0xC; //включить передачу и прием
- USART2_CR1|=0x2000; //запуск UART, идет поиск стартового бита
- while(1)
- {
- while(!(USART2_SR&0x20)); //проверка бита RXNE на наличие принятых данных
- k=USART2_DR; //чтение принятых данных с компьютера
- if (k==0x39) //анализ полученных данных
- GPIOD_ODR=0xF000;
- else
- {
- GPIOD_ODR=0;
- }
- USART2_DR=k; //отправка данных
- while(!(USART2_SR&0x40)){}; // проверка бита TC отправлены ли данные
- }
- }
Комментариев нет:
Отправить комментарий