[STM32C0] 【STM32C092RC 测评】+11 与串口工业屏通讯测试

[复制链接]
1912|2
 楼主| 聪聪哥哥 发表于 2025-5-27 19:42 | 显示全部楼层 |阅读模式
本帖最后由 聪聪哥哥 于 2025-5-27 19:49 编辑

之前对其他的32位单片机对一款工业屏做了调试,今天移植到STM32上面,实际测试一下运行效果,STM32C092的有关串口的知识,请查看之前的C092的论坛帖子。一:STM32cube MX 配置:
这里由于串口2已经被ST-link占用,这里我使用串口3进行串口屏幕的切换;
串口3的串口的波特率,校验位,停止位的设置
1.png
配置串口3以DMA的方式发送接收
2.png
使能DMA的优先级,如下所示:
3.png
二:函数代码如下所示:
2.1 串口3的底层驱动代码如下:
  1. /**
  2.   * 函数功能: 串口3的DMA发送
  3.   * 输入参数: 无
  4.   * 返 回 值: 无
  5.   * 说    明: 无
  6.   */
  7. void UART3_TX_DMA_Send(uint8_t *buffer, uint16_t length)
  8. {
  9.         HAL_UART_Transmit(&huart3,buffer,length,1000);
  10. }
2.2 相关串口品的操作过程:
  1. /***********************************************************************************************
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]   void Display_Text(unsigned int uiAdd, char *Str)
  3.   * @param   切换界面
  4.   * @retval  无
  5.   * [url=home.php?mod=space&uid=187600]@author[/url]  聪聪哥哥
  6.   * [url=home.php?mod=space&uid=895143]@version[/url] V1.1.0
  7.   * [url=home.php?mod=space&uid=212281]@date[/url]    12-2-2025
  8. *************************************************************************************************/
  9. void SendTestData(char ID)
  10. {
  11.          SendBuffer3[0] = 0x5A ;
  12.          SendBuffer3[1] = 0xA5 ;        
  13.          SendBuffer3[2] = 0x07 ;
  14.          SendBuffer3[3] = 0x82 ;        
  15.          SendBuffer3[4] = 0x00 ;
  16.          SendBuffer3[5] = 0x84 ;        
  17.          SendBuffer3[6] = 0x5A ;
  18.          SendBuffer3[7] = 0x01 ;        
  19.          SendBuffer3[8] = 0x00 ;
  20.          SendBuffer3[9] = ID ;               

  21.          ucDispMode = ID ;
  22.          HAL_UART_Transmit(&huart3,&SendBuffer3[0],10,10);
  23. }

屏幕显示以及接收中断的处理部分:
  1. /***********************************************************************************************
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]   void GuiDisplay(void)
  3.   * @param   界面显示函数 展示
  4.   * @retval  无
  5.   * [url=home.php?mod=space&uid=187600]@author[/url]  聪聪哥哥
  6.   * @version V1.1.0
  7.   * [url=home.php?mod=space&uid=212281]@date[/url]    12-2-2025
  8. *************************************************************************************************/
  9. void GuiDisplay(void)
  10. {
  11.    switch (ucDispMode)
  12.         {

  13.                 case 0:      
  14.                         break ;  
  15.                 case 1 :   
  16.                         break ;
  17.                 default :
  18.                  break ;
  19.         }
  20. }
  21. /***********************************************************************************************
  22.   * @brief   void DWIN_Key_Deal(uint16_t KeyValue)
  23.   * @param   按键处理函数
  24.   * @retval  无
  25.   * @author  聪聪哥哥
  26.   * @version V1.1.0
  27.   * @date    12-2-2025
  28. *************************************************************************************************/
  29. void DWIN_Key_Deal(uint16_t KeyValue)
  30. {

  31.                 switch (KeyValue)
  32.                 {

  33. /*工作界面显示*/
  34.                         case 0x100 :                           SendTestData(3);
  35.                                                                                                          
  36.                                         break ;               
  37.                         default:
  38.                         break ;

  39.                 }

  40.                 KeyValue = 0 ;
  41. }
  42. /***********************************************************************************************
  43.   * @brief   void DWIN_Rec_Deal(void)
  44.   * @param   串口3从DWIN屏接收数据
  45.   * @retval  无
  46.   * @author  聪聪哥哥
  47.   * @version V1.1.0
  48.   * @date    12-2-2025
  49. *************************************************************************************************/
  50. void DWIN_Rec_Deal(void)
  51. {
  52.         uint16_t RecAdd;
  53.         uint16_t KeyValue;

  54.         if(usart3_Flag == 1)
  55.         {
  56.                 usart3_Flag = 0 ;
  57.                 if((Usart3_DEAL_RX_Buf[0] == 0x5A)&&(Usart3_DEAL_RX_Buf[1] == 0xA5))
  58.                 {
  59.                         switch(Usart3_DEAL_RX_Buf[3])
  60.                         {
  61.                                 case 0x83: RecAdd = (Usart3_DEAL_RX_Buf[4]<<8) + Usart3_DEAL_RX_Buf[5];
  62.                                                         switch(RecAdd)
  63.                                                         {
  64. /*-------------------------------------------------------------------------------------------------------*/
  65. /*---------------------------------按键地址变量-----------------------------------------------------------*/
  66. /*-------------------------------------------------------------------------------------------------------*/
  67.                                                                 case 0x4000:                KeyValue = (Usart3_DEAL_RX_Buf[7]<<8) + Usart3_DEAL_RX_Buf[8];
  68.                                                                                                               DWIN_Key_Deal(KeyValue);
  69.                                                                         break;

  70.                                                                 default :
  71.                                                                         break ;                                                                        
  72.                                                         }
  73.                         }
  74.                 }
  75.                                 memset(Usart3_DEAL_RX_Buf,0,32);
  76.         }
  77. }
实测串口切换屏幕界面功能:
  1.    if(Time2point %200 == 0)
  2.                         {
  3. PicID++ ;
  4.   if(PicID >=20) PicID = 1 ;
  5.   SendTestData(PicID);
  6.                         }
效果图如下所示:
WeChat_20250527194110 00_00_00-00_00_30.gif
目前在调试的发现DMA的发送数据的时候,出现点问题,有时候会进入硬件错误的程序代码内,所以修采用了阻塞性发送的方式,进行数据的传输,等等查看哪里配置出现的问题,在进行修改。

  
t60yz 发表于 2025-5-31 23:41 | 显示全部楼层
STM32C0串口3的TX、RX脚要正确接线,且电平符合工业屏要求(通常TTL电平3.3V)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

108

主题

309

帖子

1

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