上一篇文章研究了两个stm32芯片之间如何利用485进行数据交互,本文在此基础上,进一步研究stm32如何与嵌入式触摸屏建立通信联系。选取威纶通TK6071iP作为主机,通过其COM2上的RS-485接口,与作为从机的一块TM32F103开发板连接。
主机与从机之间的485通信线路采用半双工形式,威纶通TK6071iP触摸屏配置采用Modbus RTU通信规约。作为从机,stm32开发板需要开发相应的Modbus RTU协议。本文首先直接采用上一篇文章中的基本程序,尝试接收上位机基于Modbus RTU通信规约发送的数据,分析数据发送机制的特点,为后续开发下位机的协议做铺垫。
一、威纶通触摸屏配置
建立基本工程,用相应元件搭建指令/数据发送界面,进行相应配置。搭建过程可直接参考威纶通官方例程,几个主要的配置过程如下:
1、系统参数设置
2、元件设置
首先采用多状态设置元件,然后采用数值元件,分别测试两种常用元件能不能将数据发送到从机上。
二、通信测试
1、多状态设置元件
从机接收中断代码:
void USART2_IRQHandler(void)
{
u8 readd;
u8 error;
u8 check_temp = 0;
u8 i;
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
{
//检测噪音、帧错误或校验错误
if(USART_GetFlagStatus(USART2,USART_FLAG_NE|USART_FLAG_FE|USART_FLAG_PE))
{
error = 1;
}
else
{
error = 0;
}
//读取接收字节
readd = USART_ReceiveData(USART2);
//逐个读取各字节
if((RS485_RX_CNT < 8)&&(error == 0))
{
RS485_RX_BUFF[RS485_RX_CNT]=res;
RS485_RX_CNT++;
}
//8字节读取完毕,进行数据整理,及返回数据发送
if(RS485_RX_CNT == 8)
{
RS485_RX_CNT = 0;
//首先进行数据校验
for(i=0;i<7;i++)
{
check_temp += RS485_RX_BUFF[i];
}
//若校验通过,返回一组数据
if(check_temp == RS485_RX_BUFF[7])
{
//组织返回数据
RS485_TX_BUFF[0] = 0x10;
RS485_TX_BUFF[1] = 0x10;
RS485_TX_BUFF[2] = 0x10;
RS485_TX_BUFF[3] = 0x10;
RS485_TX_BUFF[4] = 0x10;
RS485_TX_BUFF[5] = 0x10;
RS485_TX_BUFF[6] = 0x10;
//生成返回数据的校验值
RS485_TX_BUFF[7] = 0x00;
for(i=0;i<7;i++)
{
RS485_TX_BUFF[7] += RS485_TX_BUFF[i];
}
//数据发送
RS485_RN = 1;
RS485_Send(RS485_TX_BUFF,8);
RS485_RN = 0;
}
//若校验不通过,返回另一组数据
else
{
//组织返回数据
RS485_TX_BUFF[0] = 0x11;
RS485_TX_BUFF[1] = 0x00;
RS485_TX_BUFF[2] = 0x00;
RS485_TX_BUFF[3] = 0x00;
RS485_TX_BUFF[4] = 0x00;
RS485_TX_BUFF[5] = 0x00;
RS485_TX_BUFF[6] = 0x00;
//生成返回数据的校验值
RS485_TX_BUFF[7] = 0x00;
for(i=0;i<7;i++)
{
RS485_TX_BUFF[7] += RS485_TX_BUFF[i];
}
//数据发送
RS485_RN = 1;
RS485_Send(RS485_TX_BUFF,8);
RS485_RN = 0;
}
}
}
}
从机收到的指令如下图,对比发现其与主机发送的格式一致。所以多状态设置元件的指令可以直接被从机接收。
2、数值元件
采用数值元件,触摸屏上电初始化之后,发数据之前会报错,入下图所示:
经初步测试,根据从机得到的指令进行分析,个人认为出现错误的原因可能是由于数值元件在触摸屏上电之后,在正式发数据之前,需要与从机进行初步的通信,以确认连接通畅。此时由于从机中尚无相应的Modbus规约,无法相应来自于数值元件的通信请求,主机反复多次发送请求却得不到响应,最终导致触摸屏做出装置无响应的判断。
三、结论
为了实现与HMI之间的完整通信,需在stm32中引入Modbus RTU通信规约,过程中需对HMI的数据发送和接收机制进行深入的测试,才能更好地实现高质量的数据交互。