采用串口接收中断的方式读取485土壤传感器数值,为什么每个位都接收了两遍呀,
这是main函数的调用
RS485_Send_Buf(TR_Read);
HAL_Delay(300);
RS485_Receive_Buf(rs485buf,14);
SD=(rs485buf[3]*256+rs485buf[4])/10;
//SD=(rs485buf[5]*256+rs485buf[6])/10;
//printf("½ÓÊÕµ½µÄζÈÊý¾ÝΪ£º%d",WD);
printf("½ÓÊÕµ½µÄʪ¶ÈÊý¾ÝΪ£º%d\r\n",SD);
这是发送和接收函数
void RS485_Send_Buf(uint8_t *buf1)
{
sp3485_tx_enable; //ÉèÖÃΪ·¢ËÍģʽ
HAL_UART_Transmit(&huart2,buf1,8,0xff);
modbus.recount=0;
sp3485_rx_enable; //ÉèÖÃΪ½ÓÊÕģʽ
}
void RS485_Receive_Buf(uint8_t *buf,uint16_t len)
{
HAL_Delay(10);
for(int i=0;i<modbus.recount;i++)
{
printf("Received byte: %02X\n", modbus.rcbuf[i]);
buf[i]= modbus.rcbuf[i];
}
//HAL_UART_Receive(&huart2, buf, len, 0xff);
for(int i=0; i<14; i++)
{
printf("%02X ", buf[i]);
}
printf("\n");
modbus.recount=0; //ÇåÁã
}
这是中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//½ÓÊÕÍê³É»Øµ÷º¯Êý£¬µ±HAL_UART_Receive_IT½ÓÊÜÍê»á×Ô¶¯µ÷ÓÃÕâ¸öº¯Êý
{
if (huart == &huart2)
{
if(modbus.recount<64)
{
modbus.rcbuf[modbus.recount]=RES; //¼Ç¼½ÓÊÕµ½µÄÖµ
modbus.recount++; //½ÓÊÕÊý¾ÝÔö¼Ó1
//printf("%02X",RES);
}
//modbus.reflag = 1;
// ÖØÐ¿ªÆôÖжÏ
data_ready=1;
HAL_UART_Receive_IT(&huart2, (uint8_t *)&RES, 1);
}
}
希望大家能帮我看看这是为啥啊我收到的是图片中这样重复的
