聪聪哥哥 发表于 2025-8-29 21:03

【APM32F402R Micro-EVB】12:与工业串口屏的通讯测试

由于使用串口输出到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);//开启空闲中断       
}串口中断的发送方式:
/**
* @brief   bool SendDataToUSART1(int length)
*
* @param   串口中断发送方式
*
* @retvalNone
*/
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);
        }
return 1;
}
切换界面的底层驱动函数:
void ChangePage(unsigned short int no)
{
       SendBuffer2 = 0x5A ;
       SendBuffer2 = 0xA5 ;       
       SendBuffer2 = 0x07 ;
       SendBuffer2 = 0x82 ;       
       SendBuffer2 = 0x00 ;
       SendBuffer2 = 0x84 ;       
       SendBuffer2 = 0x5A ;
       SendBuffer2 = 0x01 ;       
       SendBuffer2 = 0x00 ;
       SendBuffer2 = no ;          
       SendDataToUSART2(10);
}在任务调度中添加,切换屏幕的函数如下所示:
char testdata ;
void task_500ms(void)
{
        BOARD_LED_Toggle(LED2);
testdata++;
if(testdata>=10)testdata = 0 ;
ChangePage(testdata);
}效果图如下所示:

DawnFervor 发表于 2025-8-30 13:43

干了个啥啊?
没有看出来啊

SpiritSong 发表于 2025-8-31 16:20

串口屏的应用模块,直接减少了图形化驱动的代码。
直接传输数据就可以显示了。

VelvetNight 发表于 2025-9-4 23:26

以前觉得115200bps已经非常快了,但现在又觉得串口通讯就慢

聪聪哥哥 发表于 2025-9-5 10:49

VelvetNight 发表于 2025-9-4 23:26
以前觉得115200bps已经非常快了,但现在又觉得串口通讯就慢

刷新一下图片可能会慢一些

永恒的一瞥 发表于 2025-9-8 19:43

串口屏会发生死机吗?
好奇的问一下

聪聪哥哥 发表于 2025-9-8 20:56

永恒的一瞥 发表于 2025-9-8 19:43
串口屏会发生死机吗?
好奇的问一下

不会,放心

VelvetNight 发表于 2025-9-13 15:04

这个方案不错,要是使用串口屏,主控的资源就可以少一些了

聪聪哥哥 发表于 2025-9-14 10:18

就是占用串口了,还有就是刷新速率的问题了

作业天敌在此 发表于 2025-9-16 20:28

串口2的初始化和中断发送部分代码写得很清楚,对于理解串口通讯很有帮助
页: [1]
查看完整版本: 【APM32F402R Micro-EVB】12:与工业串口屏的通讯测试