485串口接收中断只能进入一次,以后就进不去了

2019-07-21 01:20发布

问题描述 :在淘宝买了一块51接口板 有485接口,向他发送固定格式的指令就会返回传感器的信息 .  stm32写程序按一次发送一次这种格式的指令,但是只有第一次发送会返回数据,第二次按就进入不了接收中断了 。重启stm32还是这样。  找了两天问题也没找到,求原子哥给点拨点拨
主要代码: 
[mw_shl_code=c,true] [mw_shl_code=c,true] [mw_shl_code=c,true]//发送读数据指令 //返回0表示发送完毕 int cmd_read() { unsigned char readCmd[8]={0x01, 0x03, 0x90, 0x01, 0, 0x09, 0xF9, 0x0C}; int i=0; TX_Mode();//发送模式 for(i=0;i<8;i++) { USART_SendData(USART3, readCmd);//发送数据 while(USART_GetFlagStatus(USART3,USART_FLAG_TXE) == RESET); } delay_us(500);//不延时第一次按都进不了中断,不知道为什么 RX_Mode();//接收模式 return 0; } [/mw_shl_code]
[mw_shl_code=c,true]int main(void) { u8 i = 0,k; u8 res=1; SystemInit();//系统初始化,主频设置为72MHz delay_init(72);//滴答时钟初始化设置 USART1_Config();//串口输出初始化 RS485_Config(); //485初始化 NVIC_485_Configuration();//485中断初始化 GPIO_KEY_Config();//按键初始化 printf(" RS485测试 "); USART_Cmd(USART3, ENABLE); USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//使能接收中断[/mw_shl_code]   RX_Mode(); [mw_shl_code=c,true] while(1) { if(ReadKey()== KEY1) { printf("开始发送指令 "); res=cmd_read(); while(res);//等待指令发送完毕 printf("指令发送完毕 "); while(RxCounter < RxBufferSize)//等待接收完成 { ; } printf(" 接收到的数据:"); for(k=0;k<RxCounter;k++) printf("%x ",RxBuffer[k]);//打印接收数据 printf(" "); res=1; RxCounter = 0;//清空接收计数 } } }[/mw_shl_code] void USART3_IRQHandler(void) //rs485中断
{
  if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
  {
      USART_ClearITPendingBit(USART3, USART_IT_RXNE);//清除接收中断标志位
    RxBuffer[RxCounter++] = USART_ReceiveData(USART3);//读取接收数据
}
}

[/mw_shl_code]
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
u10024127
1楼-- · 2019-07-21 04:52


串口助手接受的数据  
第一次按key1有数据返回 ,第二次 指令发送完,没有数据返回 
正点原子
2楼-- · 2019-07-21 07:39
 精彩回答 2  元偷偷看……

一周热门 更多>