Современная электроника №9/2021

ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 44 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2021 SPI1->DR = ‘v’; delay(10); SPI1->DR = ‘o’; delay(10); } Код программы инициализации для ведомого микроконтроллера (см. рис. 12б): #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_ SPI1EN; // включаем тактирование SPI1 // подсоединение линий порта РА к шине APB2 RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; RCC->APB2ENR |= RCC_APB2ENR_ USART1EN; // включаем тактирова- ние USART1 Рис. 13. Осциллограммы передачи данных через интерфейс SPI. Передача символов: «s» (а), «l» (б), «o» (в) и «v» (г), двоичные коды которых (01110011, 01101100, 01101111 и 01110110 соответственно) на осциллограмме отображены голубым цветом // настройка линий РА5 (SCK), PA6 (MISO), PA7 (MOSI) порта РА // биты CNF5, CNF7 = 10, биты MODE5, MODE7 = 00 // биты CNF6 = 10, биты MODE6 = 11 GPIOA->CRL = 0x8b833333; // настройка линии РА9 (TXD) порта РА на вывод данных по USART // биты CNF1 = 10, биты MODE1 = 01 GPIOA->CRH = 0x33333393; // конфигурация SPI1 SPI1->CR1 = (1<<6) | (0<<2); // включаем SPI, режим работы Slave (ведомый) // конфигурация 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) // бесконечный цикл // после установки в 1 флага RXNE регистра SPI1_SR { while(!(SPI1->SR & SPI_SR_ RXNE)) { } char d = SPI1->DR; // начинаем приём данных по SPI // ожидаем когда очистится буфер передачи USART while ( USART1->SR == ((0<<6)|(0<<7)) ) { } // помещаем данные в буфер USART, начинаем передачу на экран терми- нала USART1->DR = d; delay(10); } } После того как в рабочей области про- екта собрана схема, а на вкладке Source Code введён код программы, можно запускать моделирование, для чего пред- усмотрена кнопка Run the simulation в левом нижнем углу окна программы. Как видно на рис. 12, компиляция законче- на успешно – в коде программы отсут- ствуют ошибки. Разработанный проект (см. рис. 11) функционирует верно – на экран виртуального терминала была выведена указанная в коде программы комбинация символов. Осциллограм- а в б г

RkJQdWJsaXNoZXIy MTQ4NjUy