当前位置:   article > 正文

串口屏(USART HMI)与STM32_usart hmi软件

usart hmi软件

目录

一、前期准备

二、串口屏上位机

三、STM32软件编程


一、前期准备

1.STM32单片机

2.HMI USART串口屏

本人使用使用的是陶晶驰的串口屏。型号为TJC4832T135_011

3.USB转TTL串口模块电源板(CP2102芯片)(CH340也可以)

二、串口屏上位机

官网资料:USART HMI 资料中心

可拖动左侧工具箱进行界面设计,常用文本、按钮、数字、切图等。右侧可修改相应的属性,一个工程中即使有多个页面,不能出现两个名字相同的控件。若移植其他例程,串口屏型号不一致,在上侧设备栏进行修改,具体见教程。

三、STM32软件编程

1、串口3配置波特率为9600(串口屏默认)

2、hmi.c 封装了STM32向串口屏发送字符串和数字的函数

  1. #include "sys.h"
  2. #include "hmi.h"
  3. /************************************************************************
  4. 1.ÊýÖµ·¢Ëͺ¯Êý£ºvoid HMI_SendNum(USART_TypeDef* USARTx,u8 *data,u8 len,u16 Num,u8 len2)
  5. USART_TypeDef* USARTx£º Ñ¡Ôñ´®¿ÚÊä³ö£¬×¢Òâ±ØÐëÏȳõʼ»¯¡¢Ê¹Äܸô®¿Ú
  6. u16 *data£ºÉÏλ»úÉÏÊý×ÖλÏàÓ¦µÄ¸Ä±äÊýÖµ´úÂ룬Èç"n0.val="¡¢"n1.val="
  7. u8 len£º*data´úÂëµÄ³¤¶È¡£Èç"n0.val="³¤¶ÈΪ7¡£
  8. u16 Num£ºÐèÒª´®¿ÚÊä³öÏÔʾµÄÊýÖµ£¬×¢Ò⿪ͷ0²»ÏÔʾ£¬Êä³öÊý×Ö0¿ªÍ·»á±¨´í
  9. u8 len2£ºÐèÒªÏÔʾµÄÊýÖµµÄλÊý ×¢Òâ²»ÄÜ´óÓÚÉÏλ»úÉÏÉ趨µÄλÊý
  10. 2.×Ö·û´®·¢Ëͺ¯Êý£ºvoid HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
  11. USART_TypeDef* USARTx£º Ñ¡Ôñ´®¿ÚÊä³ö£¬×¢Òâ±ØÐëÏȳõʼ»¯¡¢Ê¹Äܸô®¿Ú
  12. u16 *data£ºÉÏλ»úÉÏÎı¾Î»ÏàÓ¦µÄ¸Ä±äÊýÖµ´úÂ룬Èç"t0.txt="¡¢"t1.txt="
  13. u8 len£º*data´úÂëµÄ³¤¶È¡£Èç"t0.txt="³¤¶ÈΪ7¡£
  14. u8 *text£ºÐèÒª´®¿ÚÊä³öÏÔʾµÄÎı¾
  15. u8 len2£ºÐèÒªÏÔʾµÄÎı¾µÄ³¤¶È£¬Ó¢ÎÄÒ»¸ö×Ö·ûÒ»×Ö½Ú¡¢ºº×ÖÒ»¸ö×ÖÁ½¸ö×Ö½Ú
  16. ×¢ÒâÈ¡µÄÖµ¿ÉÒÔ±ÈÎı¾³¤¶È´ó£¬µ«²»ÄÜ´óÓÚÉÏλ»úÉÏÉ趨µÄ³¤¶È
  17. *************************************************************************/
  18. //10µÄ³Ë·½º¯Êý£¬ÓÃÓÚÅжÏλÊý
  19. u32 HMI_Pow(u8 n)
  20. {
  21. u32 result=1;
  22. while(n--)result*=10;
  23. return result;
  24. }
  25. //ÊýÖµ·¢Ëͺ¯Êý
  26. //USART_TypeDef* USARTx£º Ñ¡Ôñ´®¿ÚÊä³ö£¬×¢Òâ±ØÐëÏȳõʼ»¯¡¢Ê¹ÄÜ´®¿Ú
  27. //u16 *data£ºÉÏλ»úÉÏÊý×ÖλÏàÓ¦µÄ¸Ä±äÊýÖµ´úÂë
  28. //u8 len£º*data´úÂëµÄ³¤¶È¡£
  29. //u16 Num£ºÐèÒªÏÔʾµÄÊýÖµ£¬×¢Ò⿪ͷ0²»ÏÔʾ
  30. //u8 len2£ºÐèÒªÏÔʾµÄÊýÖµµÄλÊý
  31. void HMI_SendNum(USART_TypeDef* USARTx,u8 *data,u8 len,u16 Num,u8 len2)
  32. {
  33. u8 t;
  34. for(t=0;t<len;t++)
  35. {
  36. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  37. USART_SendData(USARTx,data[t]);
  38. }
  39. for(t=0;t<len2;t++)
  40. {
  41. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  42. USART_SendData(USARTx,'0'+(Num/HMI_Pow(len2-t-1))%10);
  43. }
  44. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  45. USART_SendData(USARTx,0XFF);
  46. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  47. USART_SendData(USARTx,0XFF);
  48. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  49. USART_SendData(USARTx,0XFF);
  50. }
  51. //×Ö·û´®·¢Ëͺ¯Êý£ºHMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
  52. // USART_TypeDef* USARTx£º Ñ¡Ôñ´®¿ÚÊä³ö£¬×¢Òâ±ØÐëÏȳõʼ»¯¡¢Ê¹Äܸô®¿Ú
  53. // u16 *data£ºÉÏλ»úÉÏÎı¾Î»ÏàÓ¦µÄ¸Ä±äÊýÖµ´úÂ룬Èç"t0.txt="¡¢"t1.txt="
  54. // u8 len£º*data´úÂëµÄ³¤¶È¡£Èç"t0.txt="³¤¶ÈΪ7¡£
  55. // u8 *text£ºÐèÒª´®¿ÚÊä³öÏÔʾµÄÎı¾
  56. // u8 len2£ºÐèÒªÏÔʾµÄÎı¾µÄ³¤¶È£¬Ó¢ÎÄÒ»¸ö×Ö·ûÒ»×Ö½Ú¡¢ºº×ÖÒ»¸ö×ÖÁ½¸ö×Ö½Ú
  57. void HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
  58. {
  59. u8 t;
  60. for(t=0;t<len;t++)
  61. {
  62. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  63. USART_SendData(USARTx,data[t]);
  64. }
  65. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  66. USART_SendData(USARTx,0X22);
  67. for(t=0;t<len2;t++)
  68. {
  69. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  70. USART_SendData(USARTx,text[t]);
  71. }
  72. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  73. USART_SendData(USARTx,0X22);
  74. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  75. USART_SendData(USARTx,0XFF);
  76. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  77. USART_SendData(USARTx,0XFF);
  78. while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
  79. USART_SendData(USARTx,0XFF);
  80. }

3、STM32向串口屏发送数字,串口屏接收并更新显示(举例:发送变量U)

HMI_SendNum(USART3,"n0.val=",7,U,4);//该控件名字为n0.val,长度为7,发送数字位数为4

4、按下串口屏按钮,STM32做出反馈

可以看到在“磷酸铁锂”的“按下事件”发送后,串口屏会发送“01 03 0d 0a”给STM32

  1. if(USART3_RX_STA&0x8000)
  2. {
  3. hh=0;
  4. LCD_ShowxNum(156,30,hh,4,16,0);
  5. if(USART3_RX_BUF[0]==0x01&&USART3_RX_BUF[1]==0x03) //磷酸铁锂
  6. {
  7. hh=1;
  8. LCD_ShowxNum(156,60,hh,4,16,0);
  9. GPIO_SetBits(GPIOB,GPIO_Pin_5);
  10. delay_ms(500);
  11. GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  12. USART3_RX_STA=0;
  13. }
  14. }

STM32通过串口3接收到数据,通过USART3_RX_BUF数组前两位判断是否为“磷酸铁锂”发送的字符串,若是则执行一些响应

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号