基于stm32的串口屏教程。用过的人都说好,哈哈哈,减少了我们很多不太必要的麻烦步骤。
- 程序资料包CSDN下载地址:https://download.csdn.net/download/qq_38351824/12111050
- 微信公众号下载地址:① 关注Tech云 ② 回复 陶晶驰HMI3.5寸串口屏的详解 文章最后有下载链接
我们对以下几个常用的模块写一个专门的测试程序,也对HIM与stm32的通信函数进行了封装。
滑动文本控件:g0.txt="文本测试"
文本控件: t0.txt="测试成功ok"
进度条控件:j0.val=90
滑块控件:h0.val=66
数字控件:n0.val=1236
单选框控件:r0.val=0
多选框控件:c0.val=1
(1)字符串接收函数:uint8_t Usart_Sum_rec( USART_TypeDef * pUSARTx, uint8_t * rev)
//字符接收函数:
//uint8_t Usart_Sum_rec( USART_TypeDef * pUSARTx, uint8_t * rev)
//返回值:1为获取数据成功 0为获取数据失败
//USART_TypeDef * pUSARTx 选择串口输出,注意必须先初始化、使能该串口
//uint8_t * rev 利用指针获取数据
uint8_t Usart_Sum_rec( USART_TypeDef * pUSARTx, uint8_t * rev)
{
if(USART_GetFlagStatus(pUSARTx,USART_FLAG_RXNE)!=RESET)
{
*rev = USART_ReceiveData(pUSARTx);
Delay_ms(1);
return 1;
}
return 0;
}
(2)字符串发送函数:HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
//字符串发送函数:
//HMI_SendText(USART_TypeDef* USARTx,u8 *data,u8 len,u8 *text,u8 len2)
//USART_TypeDef* USARTx: 选择串口输出,注意必须先初始化、使能该串口
//char *data:上位机上文本位相应的改变数值代码,如"t0.txt="、"t1.txt="
//u8 len:*data代码的长度。如"t0.txt="长度为7。
//char *text:需要串口输出显示的文本
//u8 len2:需要显示的文本的长度,英文一个字符一字节、汉字一个字两个字节
void HMI_SendText(USART_TypeDef* USARTx,char *data,u8 len,char *text,u8 len2)
{
u8 t;
for(t=0;t
(3)数值发送函数:void HMI_SendNum(USART_TypeDef* USARTx,char *data,u8 len,u16 Num,u8 len2)
//10的乘方函数,用于判断位数
u32 HMI_Pow(u8 n)
{
u32 result=1;
while(n--)result*=10;
return result;
}
//数值发送函数
//USART_TypeDef* USARTx: 选择串口输出,注意必须先初始化、使能串口
//char *data:上位机上数字位相应的改变数值代码
//u8 len:*data代码的长度。
//u16 Num:需要显示的数值,注意开头0不显示
//u8 len2:需要显示的数值的位数
void HMI_SendNum(USART_TypeDef* USARTx,char *data,u8 len,u16 Num,u8 len2)
{
u8 t;
for(t=0;t
void HMI_Test(void)
{
uint8_t rev_num=0; //接收数据使用
//写入检测//
//滑动文本控件:g0.txt="文本测试"
HMI_SendText(UART5,"g0.txt=",7,"文本测试",16);
Delay_ms(100);
//文本控件: t0.txt="测试成功ok"
HMI_SendText(UART5,"t0.txt=",7,"测试成功ok",16);
Delay_ms(100);
//进度条控件:j0.val=90
HMI_SendNum(UART5,"j0.val=",7,90,4);
Delay_ms(10);
//滑块控件:h0.val=66
HMI_SendNum(UART5,"h0.val=",7,66,4);
Delay_ms(10);
//数字控件:n0.val=1236
HMI_SendNum(UART5,"n0.val=",7,1236,4);
Delay_ms(10);
//单选框控件:r0.val=0
HMI_SendNum(UART5,"r0.val=",7,0,4);
Delay_ms(10);
//多选框控件:c0.val=1
HMI_SendNum(UART5,"c0.val=",7,1,4);
Delay_ms(10);
//读取检测//
while(1)
if(Usart_Sum_rec(UART5,&rev_num)) //如果接收到了数据
{
if(rev_num=='3'){ //如果接收到了数据3
HMI_SendNum(UART5,"h0.val=",7,0,4); //滑块控件:h0.val=0
Delay_ms(10);
}
}
}