Современная электроника №8/2021
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 44 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 8 2021 ляет приёмом данных по USART2 через виртуальный терминал PRIEMNIK и их выводом через USART1 на экран терми- нала PEREDATCHIK. Текст программы инициализации микроконтроллера: #include <stm32f1xx.h> // подклю- чение заголовочного файла #define F_CPU 2000000 // рабочая частота контроллера #define baudrate 9600L // cкорость обмена данными int main() // начало программы { RCC->APB2ENR |= RCC_APB2ENR_ USART1EN; // включаем тактирова- ние USART1 RCC->APB1ENR |= RCC_APB1ENR_ USART2EN; // включаем тактирова- ние USART2 // подсоединение линий порта РА к шине APB2 RCC->APB2ENR |= RCC_APB2ENR_ IOPAEN; // настройка линии РА3 (RXD) порта РА, биты CNF = 10, биты MODE = 00 GPIOA->CRL = 0x00008000; // настройка линии РА9 (TXD) порта РА, биты CNF = 10, биты MODE = 01 GPIOA->CRH = 0x00000090; // конфигурация USART2 USART2->CR1 = (1<<13); // раз- решаем USART2, сбрасываем осталь- ные биты USART2->BRR = (F_CPU/ (16 * baudrate))*16; // рассчитываем зна- чение для регистра BRR USART2->CR1 |= (1<<2); // вклю- чаем приёмник USART2->CR2 = 0; // сбрасываем все флаги регистров CR2 и CR3 USART2->CR3 = 0; // конфигурация USART1 USART1->CR1 = (1<<13); // раз- решаем USART1, сбрасываем осталь- ные биты USART1->BRR = (F_CPU/ (16 * baudrate))*16; // рассчитываем зна- чение для регистра BRR USART1->CR1 |= (1<<3); // вклю- чаем передатчик USART1->CR2 = 0; // сбрасываем все флаги регистров CR2 и CR3 USART1->CR3 = 0; while (1) { // бесконечный цикл while ((USART2->SR & USART_SR_ RXNE) == 0) { } // ожидаем данные char d = USART2->DR; // начина- ем приём данных с экрана первого терминала while ( USART1->SR == ((0<<6)|(0<<7)) ) { } // ожидаем, когда очистится буфер передачи // помещаем данные в буфер, начи- наем передачу на экран второго тер- минала USART1->DR = d; }} Работа с универсальным синхронно/асинхронным приёмопередатчиком USART в микроконтроллерах Mega в Proteus Рассмотрим процесс моделирования схем с использованием микроконтрол- леров AVR семейства Mega на приме- ре микросхем ATmega128 и ATmega16. Все микроконтроллеры семейства Mega имеют в своём составе от одно- го до четырёх модулей универсального синхронно/асинхронного приёмопе- редатчика USART. В микроконтролле- ре ATmega16 присутствует один такой модуль, а в ATmega128 – два. Выводы микроконтроллера, исполь- зуемые модулями USART, являются линиями ввода/вывода общего назна- чения. К примеру, в микроконтролле- ре ATmega16 модулем USART использу- ются линии PD0 (RXD) – вход USART, PD1 (TXD) – выход USART, PB0 (XCK) – вход/выход внешнего тактового сиг- нала USART. Модуль состоит из трёх основных частей: блока тактирования, бло- ка передатчика и блока приёмника. Буферные регистры приёмника и пере- датчика располагаются по одному адре- су пространства ввода/вывода и обо- значаются как регистр данных UDR. В этом регистре хранятся младшие 8 бит принимаемых и передаваемых данных. При чтении регистра UDR выполняется обращение к буферно- му регистру приёмника, при записи – к буферному регистру передатчика. Для управления модулем USART используются три регистра: UCSRA, UCSRB, UCSRC. Работа передатчика разрешается установкой в лог. «1» бита TXEN регистра UCSRB. При установке бита вывод TXD подключается к пере- датчику USART и начинает функциони- ровать как выход, независимо от уста- новок регистров управления портом. Если используется синхронный режим работы, то переопределяется также функционирование вывода XCK. Пере- дача инициируется записью передавае- мых данных в буферный регистр пере- датчика – регистр данных UDR. После этого данные пересылаются из реги- стра UDR в сдвиговый регистр пере- датчика. После пересылки слова дан- ных в сдвиговый регистр флаг UDRE регистра UCSRA устанавливается в 1, что означает готовность передатчи- ка к получению нового слова данных. Рис. 18. Приём данных через USART2 и их передача через USART1 в микроконтроллере STM32F103C4 Рис. 19. Окно настроек микроконтроллера ATmega16
RkJQdWJsaXNoZXIy MTQ4NjUy