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

[复制链接]
904|9
聪聪哥哥 发表于 2025-8-29 21:03 | 显示全部楼层 |阅读模式
  由于使用串口输出到PC端,查看数据有些不太直观,想查看单片机的工作状态,或者是串口收到的数据时候,我这边经常使用IIC的OLED屏幕,或者是串口的工业屏幕。这样查看数据还是很方便的。
在之前的帖子里面实现的串口的DMA发送与串口空闲中断与DMA接收的方式,今天和大家分享一下,串口的中断方式驱动显示屏。
串口2的初始化部分:
  1. //========================================================================
  2. // 函数: void USART2_INIT(int bound)
  3. // 描述: 串口1初始化函数
  4. // 参数: 波特率.
  5. // 返回: None.
  6. // 版本: V1.0, 2025-08-08
  7. //========================================================================
  8. void USART2_INIT(int bound)
  9. {
  10.         USART_Config_T USART_ConfigStruct;
  11.   RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_DMA1);

  12.         USART_ConfigStruct.baudRate = bound;
  13.         USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
  14.         USART_ConfigStruct.mode = USART_MODE_TX_RX;
  15.         USART_ConfigStruct.parity = USART_PARITY_NONE;
  16.         USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
  17.         USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
  18.         BOARD_COM_Config(COM2, &USART_ConfigStruct);
  19.         USART_EnableInterrupt(USART2, USART_INT_RXBNE);//开启串口接收中断
  20.         USART_EnableInterrupt(USART2, USART_INT_TXBE);  //开启空闲中断       
  21. }
串口中断的发送方式:
  1. /**
  2. * [url=/u/brief]@brief[/url]   bool SendDataToUSART1(int length)
  3. *
  4. * @param   串口中断发送方式
  5. *
  6. * @retval  None
  7. */
  8. char SendDataToUSART2(int length)
  9. {   
  10.         uint8_t i;

  11.         for(i = 0; i < length; i++)
  12.         {
  13.                         while(USART_ReadStatusFlag(USART2, USART_FLAG_TXBE) == RESET);
  14.                         USART_TxData(USART2, SendBuffer2[i]);
  15.         }
  16. return 1;
  17. }
切换界面的底层驱动函数:
  1. void ChangePage(unsigned short int no)
  2. {
  3.          SendBuffer2[0] = 0x5A ;
  4.          SendBuffer2[1] = 0xA5 ;       
  5.          SendBuffer2[2] = 0x07 ;
  6.          SendBuffer2[3] = 0x82 ;       
  7.          SendBuffer2[4] = 0x00 ;
  8.          SendBuffer2[5] = 0x84 ;       
  9.          SendBuffer2[6] = 0x5A ;
  10.          SendBuffer2[7] = 0x01 ;       
  11.          SendBuffer2[8] = 0x00 ;
  12.          SendBuffer2[9] = no ;            
  13.          SendDataToUSART2(10);
  14. }
在任务调度中添加,切换屏幕的函数如下所示:
  1. char testdata ;
  2. void task_500ms(void)
  3. {
  4.         BOARD_LED_Toggle(LED2);
  5. testdata++;
  6. if(testdata>=10)  testdata = 0 ;
  7. ChangePage(testdata);
  8. }
效果图如下所示:
12 00_00_00-00_00_30.gif
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的初始化和中断发送部分代码写得很清楚,对于理解串口通讯很有帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

307

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部