问题描述:用原子哥的RS485通讯示例对伺服进行控制时,发现当通讯速度过快时,经常会卡死在接收中断里。楼主使用的波特率为1Mbps,一帧发送数据包为10-20字节,一帧接收数据包20-30字节,接收速率10us。
参考以下两个文档:
http://www.eeworld.com.cn/mcu/article_2016061326948.html
http://blog.csdn.net/zyboy2000/article/details/8677256
后发现ORE中断未被RESET
修改如下(用红色标注):
#include "rs485.h"
#include "delay.h"
UART_HandleTypeDef USART2_RS485Handler; //USART2句柄(用于RS485)
#if EN_USART2_RX //如果使能了接收
//接收缓存区
u8 RS485_RX_BUF[64]; //接收缓冲,最大64个字节.
//接收到的数据长度
u8 RS485_RX_CNT=0;
void USART2_IRQHandler(void)
{
u8 res;
if(__HAL_UART_GET_IT(&USART2_RS485Handler,USART_IT_ORE)!=RESET){
__HAL_UART_CLEAR_OREFLAG(&USART2_RS485Handler);
}
if(__HAL_UART_GET_IT(&USART2_RS485Han