由于使用串口输出到PC端,查看数据有些不太直观,想查看单片机的工作状态,或者是串口收到的数据时候,我这边经常使用IIC的OLED屏幕,或者是串口的工业屏幕。这样查看数据还是很方便的。
在之前的帖子里面实现的串口的DMA发送与串口空闲中断与DMA接收的方式,今天和大家分享一下,串口的中断方式驱动显示屏。
串口2的初始化部分:
- //========================================================================
- // 函数: void USART2_INIT(int bound)
- // 描述: 串口1初始化函数
- // 参数: 波特率.
- // 返回: None.
- // 版本: V1.0, 2025-08-08
- //========================================================================
- void USART2_INIT(int bound)
- {
- USART_Config_T USART_ConfigStruct;
- RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_DMA1);
- USART_ConfigStruct.baudRate = bound;
- USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
- USART_ConfigStruct.mode = USART_MODE_TX_RX;
- USART_ConfigStruct.parity = USART_PARITY_NONE;
- USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
- USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
- BOARD_COM_Config(COM2, &USART_ConfigStruct);
- USART_EnableInterrupt(USART2, USART_INT_RXBNE);//开启串口接收中断
- USART_EnableInterrupt(USART2, USART_INT_TXBE); //开启空闲中断
- }
串口中断的发送方式:
- /**
- * [url=/u/brief]@brief[/url] bool SendDataToUSART1(int length)
- *
- * @param 串口中断发送方式
- *
- * @retval None
- */
- char SendDataToUSART2(int length)
- {
- uint8_t i;
- for(i = 0; i < length; i++)
- {
- while(USART_ReadStatusFlag(USART2, USART_FLAG_TXBE) == RESET);
- USART_TxData(USART2, SendBuffer2[i]);
- }
- return 1;
- }
切换界面的底层驱动函数:
- void ChangePage(unsigned short int no)
- {
- SendBuffer2[0] = 0x5A ;
- SendBuffer2[1] = 0xA5 ;
- SendBuffer2[2] = 0x07 ;
- SendBuffer2[3] = 0x82 ;
- SendBuffer2[4] = 0x00 ;
- SendBuffer2[5] = 0x84 ;
- SendBuffer2[6] = 0x5A ;
- SendBuffer2[7] = 0x01 ;
- SendBuffer2[8] = 0x00 ;
- SendBuffer2[9] = no ;
- SendDataToUSART2(10);
- }
在任务调度中添加,切换屏幕的函数如下所示:
- char testdata ;
- void task_500ms(void)
- {
- BOARD_LED_Toggle(LED2);
- testdata++;
- if(testdata>=10) testdata = 0 ;
- ChangePage(testdata);
- }
效果图如下所示:
|