官网资料:http://bbs.tjc1688.com/doku.php?id=start
什么是 串口 HMI (Human Machine Interface)
串口 HMI 就是设备封装好 HMI 的底层功能以后,通过串口(USART 232)与用户 MCU 进行交互,MCU 可以随时通过 USART 发指令通知设备切换某个页面或者改变某个组件的属性,设备也可以随时通过 USART 通知用户 MCU 操作者目前触摸了页面上的某个组件或者设备当前进入了某个页面。
**
对于串口HMI,用户只需要关注的是屏幕上的这些控件的属性。
发送指令使用字符串形式
屏幕数据返回则是用的 16 进制
**
发送代码实现思路:
(1)将上位机的一条指令拆成两部分-指令和数据。
先发指令,再发数据.
(2)设备接受指令结束符为”0XFF 0XFF 0XFF”三个字节
示例1:封装成数值发送函数
//USART_TypeDef USARTx: 选择串口输出,注意必须先初始化、使能串口
//u16 data:上位机上数字位相应的改变数值代码(字符串)
//u8 len:data代码的长度
//u16 Num:需要显示的数值,注意开头0不显示
//u8 len2:需要显示的数值的位数
void HMI_SendNum**(USART_TypeDef USARTx,u8 data,u8 len,u16 Num,u8 len2)
{
u8 t;
for(t=0;t
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET); //发送完成
USART_SendData(USARTx,data[t]);
}
for(t=0;t<len2;t++) ** ** //将多位数的数值也拆分成单个数值一个一个发送
{
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
USART_SendData(USARTx,’0’+(Num/HMI_Pow(len2-t-1))%10); //注意的是所有的发送都是以
ASCII 码(单个字符)的形式发送的,所以数值要加字符‘0’
}
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
*USART_SendData(USARTx,0XFF);
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
USART_SendData(USARTx,0XFF);
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
USART_SendData(USARTx,0XFF);
}
//10的乘方函数,用于判断位数
u32 HMI_Pow(u8 n)
{
u32 result=1;
while(n—)result*=10;
return result;
}
示例2:printf()+发送三个结束符
1. printf("n0.val=666"); //发送命令
2. printf("\xff\xff\xff"); //发送结束符
3.
4. printf("n0.val=666\xff\xff\xff");
5.
6. printf("n0.val=%d\xff\xff\xff",MyData); //一次性发完命令和结束符
7. printf("t0.txt=\"%d\"\xff\xff\xff",MyTxt); //一次性发完命令和结束符
串口屏文件下载:USB转ttl连接串口屏(TXD与RX,RXD与TX连接),点击下载。
通信:单片机TX接到屏幕RX
务必注意波特率保持一致,串口屏出厂默认9600
串口屏往单片机发数据,需要在串口中断里处理,实现交互
HMI逻辑语句(可用于页面切换)
跨页面操作控件属性