你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验之谈】基于STM32+MCGS触摸屏四通道数据采集的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-12 14:00

​1.想做一个数据采集系统,然后将数据存储起来,方便查看选择了STM32+MCGS触摸屏。

2.原理图绘制,选择立创的绘图软件,简单方面。用到了ADC采集模块与RS485通讯。



3.PCB的绘制同样采用了立创绘图软件,感觉和AD差不多,但是功能少很多,不过简单的电路板绘制也比较方便,不用单独绘制PCB的封装了




4.样板回来了,开始焊接工作。




板子焊接完成了,不是很好看,水平有限,焊接瑕疵,上电试验,效果还行,没有电容爆炸 冒烟。

5.写程序了,先写STM32的程序,写控制下IO口 指示灯都没问题,按键也没问题,挺好!




6.先写485通讯程序,写了好久,下面是和屏通讯的主要寄存器区


  1. void Modbus_RegMap(void)

  2. {

  3.         //ÊäÈ뿪¹ØÁ¿¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò

  4. 04//KEY0     //&PEin(4)£ºÈ¡PE4µÄµØÖ·£¬(vu32*)&PEin(4)½«PE4µØÖ·Ç¿ÖÆ×ª»»Îªuw32ÀàÐ͵ĵØÖ·£¬Modbus_InputIO[0]=(vu32*)&PEin(4); ½«×ª»»ºÃµÄµØÖ·Ë͸øµØÖ·Ö¸ÕëModbus_InputIO[0]£»

  5. 13//KEY1     //*Modbus_InputIO[0] È¡³öµØÖ·ÖеÄÄÚÈÝ¡£

  6. 22//KEY2

  7. 30//KEY3

  8.         

  9.         //Êä³ö¿ª¹ØÁ¿¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò

  10. //      Modbus_OutputIO[0]=(vu32*)&PBout(5);//LED0

  11. //      Modbus_OutputIO[1]=(vu32*)&PEout(5);//LED1

  12. 2//

  13. 3//

  14. 4//

  15.         

  16.         

  17.         //±£³Ö¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò

  18. 00//²âÊÔÊý¾Ý1

  19. 11//((u16*)&testData1)+1;//²âÊÔÊý¾Ý1

  20. 23//(u16*)&testData2;//²âÊÔÊý¾Ý2

  21. 32//((u16*)&testData2)+1;//²âÊÔÊý¾Ý2

  22. 4]=(u16*)&testData1;

  23. 5]=(u16*)&testData2;

  24. 6]=(u16*)&testData3;

  25. 7.写主程序:

  26. u8 ucstep=0;

  27. u8 TMI=0;

  28. void Key_Cmd(void);

  29. int main(void)

  30. {

  31. //ÑÓʱº¯Êý³õʼ»¯         

  32. //ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶        

  33. //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú

  34. //³õʼ»¯°´¼ü

  35. //ADC³õʼ»¯

  36. //RTC³õʼ»¯

  37.         RS485_Init();

  38.         Timer7_Init();



  39.         while(1)

  40.         {

  41.                 switch(ucstep)

  42.                 {

  43.                         case 0:                                

  44.                                                 break;                        

  45.                         case 1:

  46. 1;

  47.                                                 TMI++;

  48.                                                 50)

  49.                                                 {

  50. 0;

  51. //DS0ÉÁ˸        

  52.                                                 }

  53.                                           break;

  54.                         case 2:

  55. 1;

  56.                                                  Adc_Service();

  57. 3;

  58.                                                  break;

  59.                         case 3:

  60.                                                 RS485_Service();

  61. 4;

  62.                                                 break;

  63.                         case 4:

  64.                                                 TMI++;

  65.                                                 20)

  66.                                                 {

  67. 0;

  68.                                                         RUN=!RUN;

  69.                                                 }

  70. 2;

  71.                                                 break;

  72.                         case 5:

  73.                                                 RUN=!RUN;

  74.                                                 ERR=!ERR;

  75.                                                 ALM=!ALM;

  76. 0;

  77.                                                 break;

  78.                 }

  79.                 Key_Cmd();

  80.         }

  81. }



  82. void Key_Cmd(void)

  83. {

  84.         u8 key;

  85. 0//µÃµ½¼üÖµ

  86.         if(key)

  87.         {                                                   

  88.                 switch(key)

  89.                 {                                 

  90.                         //SD¿¨

  91. 1;

  92.                                          break;

  93.                         //¿ØÖÆLED0·­×ª

  94. 2;

  95.                                          break;

  96.                         //¿ØÖÆLED1·­×ª         

  97. 5;

  98.                                          break;

  99.                 }

  100. else delay_ms(10);
复制代码

好了 ,主程序也完成了,下面写MCGS触摸屏的程序。


8.MCGS触摸屏



IF $Second MOD 10 = 0 THEN


电压1=设备0_读写4WUB0001

电压2=设备0_读写4WUB0002

电压3=设备0_读写4WUB0003

电压4=设备0_读写4WUB0004


!SaveData(电压)


测试窗口.控件67.Refresh()

测试窗口.控件67.End()

ENDIF


进度计数=进度计数+1


5 THEN


进度计数=0

进度=2

控制=2

        

ENDIF


进度计数=进度计数+1


5 THEN


进度计数=0

进度=2

控制=2

        

ENDIF

12.都搞定了 ,看下效果吧。不会
---------------------
作者:刘东君


收藏 评论0 发布时间:2022-12-12 14:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版