|
在STM32F103ZET6开发过程中,用到HAL库中的串口1DMA空闲中断处理数据时发现: 当接收数据长度超过16字节后,(__HAL_DMA_GET_COUNTER(&huart1.hdmarx))也就是串口1的CNDTR寄存器会首先减16,然后恢复到给定长度,再次进入中断减去剩余长度(又或当长度超过16字节后空闲中断再次进入) 例如限定接收数据长度为0xFFF,当接收数据超过0x0F(例0x12)后,CNDTR寄存器会首先变为0xFF0,然后回到0xFFF,再变为0xFFE。 程序波特率115200,数据位8,停止位1。如何解决呢? 以下是部分代码块 |
STM32F207IG10Mbps 半双工以太网异常
串口DMA收发出现ORE错误
STM32F407xx 是否可以输出 50MHz 时钟供给 RMII 以太网 PHY
STM32 增加 WiFi + 以太网的低成本方案
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
USB Audio Class 1.0 Type I IEEE_FLOAT 描述符问题
在RS485通信中如何有效避免误码,距离5米,速率115200
HAL 库建议支持GPIO 同时配置为AF 与外部中断 EXTI
STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?
询问电源纹波对芯片的影响
微信公众号
手机版
你代码里还开启了别的什么中断吗?或者代码哪里有误?
或者你把中断里的HAL_UART_Receive_DMA(&huart1, UART_RX_BUF, UART_RX_LEN); 及后面
中断使能的两句 放到你的main循环里清除标志之后试试。
本身库中有完整的启动函数和中断处理函数,并有接收完成的回调函数可用。
建议还是用库中的架构为好(最好是新版),自己改写的话中间很多细节需要关注,尽量用现成的。
代码中还包含以下的中断,但我认为以下中断不会影响串口的接收空闲中断功能:


使用库中的空闲中断回调函数
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef huart, uint8_t pData, uint16_t Size)
其内部逻辑也是调用的串口空闲中断,尝试这个函数时也会出现不进位的问题。
如果楼主觉得串口等逻辑是正确的,不妨看看计算时是不是数据类型转换的问题。
[md]要验证是否别的中断影响IDLE中断了,把UART idle中断优先级设置到最高即可验证;
另外,也可以考虑下堆栈方面的问题。再就是仔细检查下代码,变量定义、数组大小这些是否有
小疏忽的地方。