单片机串口rx接受完数据后还会拉低

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机串口rx接受完数据后还会拉低相关的知识,希望对你有一定的参考价值。

参考技术A 软件检查串口中断服务程序
重点排查是否有语句或逻辑会导致中断服务程序无法返回——例如你是否在中断处理程序中加入了软延时(类似delay这种),建议在串口中断的ISR中加入断点观察调试,若有JTAG,也观察死机时串口各个寄存器的值,一个个分析找出问题根源;其次,看DataSheet,检查MCU串口是否含有缓冲区,如果有,缓冲区满了未即使读出串口也会停止接收——还是跟中断有关系,只是这种情况下,在死机的时候你就要看单片机其他部分是否还正常工作——建议用一个Timer翻转IO口操纵LED,如果LED在闪,表示单片机其他部分正常,串口未发生中断。
硬件检查串口连接
串口的信号是否稳定?电流是否有波动?电平是否正常?一般来说,对于串口通信这么简单的电路,不会有太大问题,不过检查一下是万全之策。

STM32低功耗串口接受数据异常

文章目录

低功耗串口接受数据异常

一、异常信息

1.1 硬件环境

小熊派 STM32L4 单片机

1.2 软件环境

STM32CubeMX 6.2.1

MDK 5.3

1.3 问题描述

使用 STM32CubeMX 配置 STM32 的 LPUART 后,生成代码使用串口 DMA 接受数据,在开启数据接受后,指定接受的数据长度,接受完成后,串口继续接受数据,在开启下一个串口接受时则会读取之前的数据,例如:

串口使能接受 5 个数据,然后上位机发送 ABCDEFG,本次串口 DMA 在接受到 ABCDE 时就会产生接受完成标志,调用回调函数,至于 FG 则不会接受丢弃掉,但我如果在设置接受 2 个数据,这两个数据居然还能接受到

在仿真调试里面运行程序时这两个数据不会接受到,很正常,符合逻辑,但一旦实际下载到单片机里面实际运行就会出现错误

二、问题分析

根据实验现象,仿真是很正常的,但实际下载运行就会出现问题,推测编译器或者生成的代码有问题

理论上第一次接受数量达标后,代码会将接受完成标志置位,然后串口的缓存区不会再接受任何数据,出现这种情况的原因可能是接受完成后数据 DMA 和串口没有关闭

三、解决方式

在调用之前我们将 DMA 的缓存区清空即可,例如我下面的代码,使用 memset 清空缓存区

以上是关于单片机串口rx接受完数据后还会拉低的主要内容,如果未能解决你的问题,请参考以下文章

在用单片机接受串口数据的时候,第一位是0x0A

AVR单片机教程——串口接收

51单片机和计算机之间实现串口通信的电路图

单片机可以将UART的Tx与Rx直接相连吗

如何实现模块与单片机的RX和TX连接并让它与PC机连接,就是实现TX和RX的分时复用功能

单片机模拟串口通讯,将串口接收到的数据原样发送,收到的数据长度不同。怎样判断数据接收完毕?