1.想做一个数据采集系统,然后将数据存储起来,方便查看选择了STM32+MCGS触摸屏。
2.原理图绘制,选择立创的绘图软件,简单方面。用到了ADC采集模块与RS485通讯。
3.PCB的绘制同样采用了立创绘图软件,感觉和AD差不多,但是功能少很多,不过简单的电路板绘制也比较方便,不用单独绘制PCB的封装了,另一个重要原因,总有xiaohanjian给发律师函,公司也不舍得花钱!另外吐槽下中国的互联网公司,就不能搞点牛X的软件吗!!!道阻且长!!
4.样板回来了,开始焊接工作。小公司啥都是自己搞啊!吐槽下老版,不多找点人。
板子焊接完成了,不是很好看,水平有限,焊接瑕疵,上电试验,效果还行,没有电容爆炸 冒烟。
5.写程序了,先写STM32的程序,写控制下IO口 指示灯都没问题,按键也没问题,挺好!
6.先写485通讯程序,写了好久,下面是和屏通讯的主要寄存器区
void Modbus_RegMap(void)
{
//ÊäÈ뿪¹ØÁ¿¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò
Modbus_InputIO[0]=(vu32*)&PEin(4);//KEY0 //&PEin(4)£ºÈ¡PE4µÄµØÖ·£¬(vu32*)&PEin(4)½«PE4µØÖ·Ç¿ÖÆת»»Îªuw32ÀàÐ͵ĵØÖ·£¬Modbus_InputIO[0]=(vu32*)&PEin(4); ½«×ª»»ºÃµÄµØÖ·Ë͸øµØÖ·Ö¸ÕëModbus_InputIO[0]£»
Modbus_InputIO[1]=(vu32*)&PEin(3);//KEY1 //*Modbus_InputIO[0] È¡³öµØÖ·ÖеÄÄÚÈÝ¡£
Modbus_InputIO[2]=(vu32*)&PEin(2);//KEY2
Modbus_InputIO[3]=(vu32*)&PAin(0);//KEY3
//Êä³ö¿ª¹ØÁ¿¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò
// Modbus_OutputIO[0]=(vu32*)&PBout(5);//LED0
// Modbus_OutputIO[1]=(vu32*)&PEout(5);//LED1
Modbus_OutputIO[2]=(vu32*)&RUN;//
Modbus_OutputIO[3]=(vu32*)&ERR;//
Modbus_OutputIO[4]=(vu32*)&ALM;//
//±£³Ö¼Ä´æÆ÷Ö¸ÕëÖ¸Ïò
Modbus_HoldReg[0]=(u16*)&Show[0];//²âÊÔÊý¾Ý1
Modbus_HoldReg[1]=(u16*)&Show[1];//((u16*)&testData1)+1;//²âÊÔÊý¾Ý1
Modbus_HoldReg[2]=(u16*)&Show[3];//(u16*)&testData2;//²âÊÔÊý¾Ý2
Modbus_HoldReg[3]=(u16*)&Show[2];//((u16*)&testData2)+1;//²âÊÔÊý¾Ý2
Modbus_HoldReg[4]=(u16*)&testData1;
Modbus_HoldReg[5]=(u16*)&testData2;
Modbus_HoldReg[6]=(u16*)&testData3;
}
7.写主程序:
u8 ucstep=0;
u8 TMI=0;
void Key_Cmd(void);
int main(void)
{
delay_init(); //ÑÓʱº¯Êý³õʼ»¯
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//ÉèÖÃÖжÏÓÅÏȼ¶·Ö×éΪ×é2£º2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
KEY_Init(); //³õʼ»¯°´¼ü
Adc_Init(); //ADC³õʼ»¯
RTC_Init(); //RTC³õʼ»¯
RS485_Init();
Timer7_Init();
while(1)
{
switch(ucstep)
{
case 0:
break;
case 1:
RUN=1;
TMI++;
if(TMI>=50)
{
TMI=0;
ERR=!ERR;//DS0ÉÁ˸
}
break;
case 2:
ERR=1;
Adc_Service();
ucstep=3;
break;
case 3:
RS485_Service();
ucstep=4;
break;
case 4:
TMI++;
if(TMI>=20)
{
TMI=0;
RUN=!RUN;
}
ucstep=2;
break;
case 5:
RUN=!RUN;
ERR=!ERR;
ALM=!ALM;
ucstep=0;
break;
}
Key_Cmd();
}
}
void Key_Cmd(void)
{
u8 key;
key=KEY_Scan(0); //µÃµ½¼üÖµ
if(key)
{
switch(key)
{
case KEY1_PRES: //SD¿¨
ucstep=1;
break;
case KEY2_PRES: //¿ØÖÆLED0·×ª
ucstep=2;
break;
case KEY3_PRES: //¿ØÖÆLED1·×ª
ucstep=5;
break;
}
}else delay_ms(10);
}
好了 ,主程序也完成了,下面写MCGS触摸屏的程序。
8.MCGS触摸屏 先来个牛X界面 **长城永不到!!!!千里黄河水涛涛
9.装完了,该干正事了 ,编写正式测试界面
10.界面完事了 该配置变量和通道了
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
IF 进度计数>5 THEN
进度计数=0
进度=2
控制=2
ENDIF
进度计数=进度计数+1
IF 进度计数>5 THEN
进度计数=0
进度=2
控制=2
ENDIF
12.都搞定了。
---------------------
作者:刘东君
链接:https://bbs.21ic.com/icview-3188156-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。