串口3中断服务程序如下: void USART3_IRQHandler(void) { /* USER CODE BEGIN USART3_IRQn 0 */ __HAL_UART_CLEAR_IT(&huart3,UART_IT_RXNE); user_Uart1Handler(); } void user_Uart1Handler() { if(__HAL_UART_GET_FLAG(&huart3, UART_FLAG_RXNE)!=RESET) { if(modbus.RxState==0) { modbus.RxState=0xaa; __HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE); modbus.recnt=0; modbus.rcbuf[modbus.recnt++]=huart3.Instance->RDR; } else if(modbus.RxState==0xaa) { modbus.rcbuf[modbus.recnt++]=huart3.Instance->RDR; } __HAL_UART_CLEAR_FLAG(&huart3,UART_FLAG_RXNE); } if((__HAL_UART_GET_IT(&huart3,UART_IT_IDLE)!=RESET)) { __HAL_UART_DISABLE_IT(&huart3,UART_IT_IDLE); __HAL_UART_DISABLE_IT(&huart3,UART_IT_RXNE); modbus.RxState=0x55; } } 问题:如采用串口调试助手发送04 03 01 03,全速运行,modbus.rcbuf中只有04,RDR寄存器中是03 请教各位大神,为何会出现这种情况,谢谢 |
张冠李戴了
那里应该是当时写错了,但是并不影响
写错了改回来当然不影响。
写错了没有改回来也不影响运行就怪了。二进制的东西,0就是0,1就是1.怎么不影响?
评分
查看全部评分
评分
查看全部评分
那只是我自己定义的函数名,改不改都不影响,谢谢
谢谢你。是的,接收一个字节进入一次中断,一帧数据接收完进入空闲中断,会关空闲中断,关接收中断。我再调试看看
https://www.stmcu.org.cn/module/forum/thread-621310-1-1.html
评分
查看全部评分
你好,谢谢你的解答。我理解的是接收完一帧数据之后才会进入空闲中断,那这种情况有什么好的解决办法吗