新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2020-7-19
- 在线时间
- 7 小时
|
3金钱
本帖最后由 Hanbing34 于 2020-8-3 18:57 编辑
移植了STM32F407x 通过RS485 Modbus RTU从传感器读取寄存器的程序后,读不出来传感器的寄存器的值?
单片机接收不到传感器传过来的数据
/////////////////////////////////////////////////////////////////////////////////////
//RS485服务程序,用于处理接收到的数据(请在主函数中循环调用)
void RS485_RX_Service(void)
{
uint16_t calCRC;
uint16_t recCRC;
//485_RxFlag=1;
printf("RS485_RxFlag=%d\r\n",RS485_RxFlag);
//此处打印出来的 RS485_RxFlag=0
if(RS485_RxFlag==1)
{printf("RS485_RX_BUFF[0]=%d\r\n",RS485_RX_BUFF[0]);
//此处打印结果为3,如果执行337行代码,将485_RxFlag人为改为1,此处打印结果为3,
printf("RS485_RX_BUFF[1]=%d\r\n",RS485_RX_BUFF[1]);
//此处打印结果为3,此处打印结果也为3,如果执行337行代码,将485_RxFlag人为改为1,此处打印结果为3
if(RS485_RX_BUFF[0]==SlaverAddr01||RS485_RX_BUFF[0]==SlaverAddr02)//地址正确
{
if(RS485_RX_BUFF[1]==Fuction)//功能码正确
{
calCRC=CRC_Compute(RS485_RX_BUFF,RS485_RX_CNT-2);//计算所接收数据的CRC
recCRC=RS485_RX_BUFF[RS485_RX_CNT-1]|(((uint16_t)RS485_RX_BUFF[RS485_RX_CNT-2])<<8);//接收到的CRC(低字节在前,高字节在后)
if(calCRC==recCRC)//CRC校验正确
{
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// switch(RS485_RX_BUFF[1])//根据不同的功能码进行处理
// {
// case 03:
// {
Modbus_03_Solve();
// break;
// }
}
}
}
}
RS485_RxFlag=0;//复位帧结束标志
RS485_RX_CNT=0;//接收计数器清零
_485_TX_EN();//开启发送模式
TX_RX_SET=0; //命令完成
// }
}
当程序执行到这个函数的if(RS485_RxFlag==1)后不再向下执行,
通过串口助手在if(RS485_RxFlag==1)之前一行打印RS485_RxFlag值,
打印出来的结果是RS485_RxFlag的值为0
|
|