Современная электроника №8/2021
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 36 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 8 2021 ся, а в сдвиговом регистре приёмни- ка перезаписываются; ● PE – 0-й бит регистра устанавливает- ся в единицу при обнаружении ошиб- ки чётности. Передача данных через последовательный интерфейс USART Рассмотрим работу модуля USART на конкретном примере. Передадим про- граммным способом на экран виртуаль- ного терминала комбинацию симво- лов английского алфавита «ABC» через последовательный интерфейс. Для этого создадим в Proteus новый проект с использованием микроконтроллера STM32F103C4 (см. рис. 2), микросхема которого находится в разделе Stellaris Family библиотеки Microprocessor ICs базы данных компонентов Proteus (см. рис. 3). Щёлкнув левой кнопкой мыши на панели INSTRUMENTS (рис. 4) строку с названием VIRTUAL TERMINAL, а затем OSCILLOSCOPE разместим мышью в рабочем поле проекта виртуальный терминал и виртуальный осциллограф, которым воспользуемся для просмотра осциллограммы работы USART. Чтобы открыть панель INSTRUMENTS на левой панели схемного редактора, нажимают пиктограмму Virtual Instruments Mode. Подсоединим вывод РА9 (TXD) микро- контроллера к выводу RXD виртуально- го терминала, а также к каналу А осцил- лографа. В окне настроек микроконтроллера Edit Component в поле Crystal Frequency установим частоту его работы 2 МГц (см. рис. 5а). В окне настроек терминала (см. рис. 5б) определим значения сле- дующих параметров: ● Baud Rate – скорость обмена данны- ми (9600 бод); ● Data Bits – формат пакета данных (8 бит); ● Parity – контроль чётности (отсут- ствует – NONE); ● Stop Bits – количество стоповых би- тов (1). Окна настроек открывают двойным щелчком левой кнопкой мыши по раз- мещённому на схеме компоненту. Для проверки работы собранной схе- мы на языке программирования С была написана программа, код которой при- ведён ниже: #include <stm32f1xx.h> // подклю- чение библиотеки функций #define F_CPU 2000000 // рабочая частота микроконтроллера #define baudrate 9600L // ско- рость обмена данными int init_USART() // инициализа- ция USART и GPIO { // включаем тактирование USART1 RCC->APB2ENR |= RCC_APB2ENR_ USART1EN; // подсоединение линий порта РА к шине APB2 RCC->APB2ENR |= RCC_APB2ENR_ IOPAEN; // настройка линии РА9 (TXD) пор- та РА // биты CNF = 10, биты MODE = 01 GPIOA->CRH = 0x00000090; // конфигурация 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; } // вывод данных void send_USART (char value) { while ( USART1->SR == ((0<<6)|(0<<7)) ) { } // ожидаем, когда очистится буфер передачи USART1->DR = value; // помещаем данные в буфер, начинаем передачу } Рис. 2. Новый проект на базе микроконтроллера STM32F103C4 в Proteus 8.11 Рис. 3. Выбор микросхемы STM32F103C4 из библиотеки микроконтроллеров Microprocessor ICs базы данных компонентов Proteus
RkJQdWJsaXNoZXIy MTQ4NjUy