Современная электроника №8/2021
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 42 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 8 2021 любой операции должны предшество- вать команды задержки. Также необхо- димо обеспечить формирование такто- вого сигнала на линии Е микросхемы LM044L. В нашем примере это сделано программно посредством чередования подачи значений нуля и единицы. После создания схемы, подключения всех приборов и настройки их пара- метров переходят к следующему эта- пу разработки: написанию программ- ного кода управления устройством (в нашем примере на языке С), который в Proteus вводят на вкладке Source Code. В результате его компиляции (при усло- вии отсутствия в коде ошибок) на дис- ке компьютера будет получен исполня- емый файл с расширением *.elf, путь к которому автоматически прописыва- ется в окне свойств микроконтролле- ра в поле Program File. Завершающий этап работы в редак- торе Schematic Capture – запуск процес- са моделирования схемы (см. рис. 16), который выполняют кнопкой Run the simulation, расположенной в левом нижнем углу окна редактора или командой основного менюDebug/Run Simulation. Текст программы инициализации микроконтроллера: #include <stm32f1xx.h> // подклю- чение заголовочного файла #define F_CPU 2000000 // рабочая частота микроконтроллера #define baudrate 9600L // cкорость обмена данными void delay (int dly) // подпро- грамма формирования задержки { int i; for(; dly>0; dly--) for ( i=0; i<10000; i++); } int main() // начало программы { RCC->APB2ENR |= RCC_APB2ENR_ USART1EN; // включаем тактирова- ние USART1 // подсоединение линий порта РА к шине APB2 RCC->APB2ENR |= RCC_APB2ENR_ IOPAEN; // подсоединение линий порта РB к шине APB2 RCC->APB2ENR |= RCC_APB2ENR_ IOPBEN; GPIOA->CRL = 0x33333333; // линии РА0-РА7 порта PА работают на вывод данных GPIOB->CRL = 0x33333333; // линии РB0-РB7 порта PB работают на вывод данных // настройка линии РА10 (RXD) пор- та РА, биты CNF = 10, биты MODE = 00 GPIOA->CRH = 0x33333833; // конфигурация USART1 USART1->CR1 = (1<<13); // раз- решаем USART1, сбрасываем осталь- ные биты USART1->BRR = (F_CPU/ (16 * baudrate))*16; // рассчитываем зна- чение для регистра BRR USART1->CR1 |= (1<<2); // вклю- чаем приёмник USART1->CR2 = 0; // сбрасываем все флаги регистров CR2 и CR3 USART1->CR3 = 0; // настройка дисплея // устанавливаем 1 на выводе PB0 микроконтроллера, RS=0 (при- ём команд) GPIOB->ODR= (1<<0)|(0<<4); delay(10); // вызов подпрограм- мы задержки // включаем дисплей GPIOA->ODR =(1<<0)|(1<<1)|(1<<2)| (1<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7); // устанавливаем 0 на выводе PB0 микроконтроллера GPIOB->ODR= (0<<0)|(0<<4); delay(10); // установка 8-разрядной шины GPIOA->ODR = (0<<0)|(0<<1)|(1<< 2)|(0<<3)|(1<<4)|(1<<5)|(0<<6)|(0 <<7); // устанавливаем 1 на выводе PB0 микроконтроллера GPIOB->ODR= (1<<0)|(0<<4); delay(10); // очистка дисплея и установка курсора в нулевую позицию GPIOA->ODR = (1<<0)|(0<<1)|(0<< 2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(0 <<7); // устанавливаем 0 на выводе PB0 микроконтроллера GPIOB->ODR= (0<<0)|(0<<4); delay(10); while (1) { GPIOB->ODR = (1<<0)|(1<<4); delay(10); // RS=1 (приём данных) while ((USART1->SR & USART_SR_ RXNE) == 0) { } // ожидаем данные char d = USART1->DR; // начинаем прием данных GPIOA->ODR = d; // отправляем дан- ные на экран дисплея Рис. 14. Выбор логического анализатора на панели INSTRUMENTS и его подключение к схеме ввода/вывода текстовых данных Рис. 15. Настройка параметров отображения символов на экране виртуального терминала
RkJQdWJsaXNoZXIy MTQ4NjUy