解决串口开启DMA接受却只能接收到第一个字节的问题

最新更新时间:1970-01-01来源: eefocus关键字:串口 手机看文章 扫描二维码
随时随地手机看文章

设备:

单片机:STM32G070 MDK:V5.25


问题描述:

发现串口接受不到数据,只能接受到第一个字节。


  MX_USART4_UART_Init();

  HAL_Delay(200);

  HAL_UART_Receive_DMA(&huart4, UART_DMA_RXBuf, UART_RX_BUF_SIZE);


原因分析:

在单片机执行完串口初始化之后,并没有立马开启DMA接收,在这个时间差之内如果有数据发过来就会导致这个问题


解决方案:

在完成串口初始化之后,立马开启DMA接收,中间不能有较大的空挡时间差即可。


  MX_USART4_UART_Init();

//  HAL_Delay(200);

  HAL_UART_Receive_DMA(&huart4, UART_DMA_RXBuf, UART_RX_BUF_SIZE);


关键字:串口 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic547004.html

上一篇:STM32G070单片机 PD0 PB15引脚内部下拉使用需要主意
下一篇:【STM32】外部中断不可以同PIN

推荐阅读

STM8L151C8单片机学习例程(4)——串口发送字符,字符串
V1.0* @date    2019.5.1* @brief    串口发送字符,字符串,整形,浮点,hex等数据                由串口助手可知:浮点数发8.9,接收为8.899,0.01%误差                发8.92,收8.920;发8.925,收8.925,0误差                中断接收代码
发表于 2022-01-10
STM8L151C8单片机学习例程(4)——<font color='red'>串口</font>发送字符,字符串
STM8L151C8单片机学习例程(7)——ADC采集,串口发送电压值
STM8L_7_ADC:1.User:工程及main文件2.Hardware:ADC,USART,CLK,LED,Delay3.STM8L15x_StdPeriph_Driver:STM8自带库文件4.Debug:hex文件存放于EXE文件夹5.Function:    ADC采集,串口发送电压值/********************************************************************************* @file    main.c* @author  Alex——小白* @version V1.0
发表于 2022-01-10
STM8L151C8单片机学习例程(7)——ADC采集,<font color='red'>串口</font>发送电压值
STM32+FreeRTOS+CUBEMX_学习笔记(五)HAL串口终极总结
前言:在写这篇文章的过程中,我参考了很多的博文。这些博文给了我很多帮助,但是不得不说,网上的博文终究是层次不齐的。当遇到一些关于原理的地方,还是官方文档比较靠谱。毕竟官方要保证这些文档的可靠性。如果只是想找对应的方式,直接看目录到对应的地方就可以啦注意,源码库在最后。目的:学习HAL库串口操作函数实现串口的中断收发定长数据实现串口的帧头帧尾判断收发不定长数据实现串口的空闲中断收发不定长数据实现串口的DMA收发不定长数据环境和平台:keil5cubemxstm32c8t6一、HAL库的串口函数学习:1.1、hal库:HAL库是ST新推出的官方库,该库同图形化开发工具CUBEMX可以结合使用,从而方便开发者的快速操作。但是在实际的使用
发表于 2022-01-07
STM32+FreeRTOS+CUBEMX_学习笔记(五)HAL<font color='red'>串口</font>终极总结
Proteus C51仿真学习板5——串口中断
都能理解彼此的基础上才能正常交流,而不是仅仅是“你在干嘛”。串口通信就是用1根线上发数据,1根线收数据。主要定义了5个参数——波特率、起始位、数据位、奇偶校验、停止位,双方参数匹配一致就能正常通信。串口通信,简单的说就是因为数据是串在一起一个个发送和接收的。例如:两个人交流时语速(波特率)要一致,一个人说得快,一个说的慢,那就很难沟通了;当2个人交流语速一致时,那么就要通过举手(起始位)示意,告诉对方我要开始说话了;然后说话(数据位);说完话后可以思考思考自己说的话是不是对的——奇偶校验,也可以不用考虑太多就直接放下手,示意我说完了——结束位。51单片机的串口时序:默认态为1,起始位为0(1bit),8位数据(8bit),结束位
发表于 2022-01-06
Proteus C51仿真学习板5——<font color='red'>串口</font>中断
4412 串口编程
一、打开串口串口在linux里都是设备,可以用open之类的函数操作#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <string.h>void main(){        int fd;        char *uart3 = "/dev/ttySAC3";   
发表于 2022-01-06
STM103单片机串口输出函数printf重映射
在调试程序的时候经常需要使用printf’函数来打印相关调试信息,在STM103单片机中printf函数默认只能在串口1使用,有时候串口1被占用了,想要输出调试信息时会比较麻烦。现在就总结一下如何在其他串口上使用printf函数。这里使用正点原子的例程来做说明。默认串口1初始化代码如下#if 1#pragma import(__use_no_semihosting)//标准库需要的支持函数struct __FILE{    int handle;};FILE __stdout;//定义_sys_exit()以避免使用半主机模式_sys_exit(int x){    x = x;}//重定义
发表于 2022-01-06

推荐帖子

为什么我的1602液晶屏写程序进去没反应
为什么我的1602液晶屏写程序进去没反应,一上电下面一排变黑了,上面的没有反映。我把我写好的程序烧进去也是这样的,然后我用其他的程序烧进去一直都是这样的,没有变化,是哪里出现了问题啊为什么我的1602液晶屏写程序进去没反应
ylf175300 51单片机
求助----TMS320LF2407的初始化程序
希望有完整的程序 __新手刚开始学习嵌入式系统 望高手帮忙,感激不尽!求助----TMS320LF2407的初始化程序
xianquan 嵌入式系统
EEWORLD大学堂----使用Atmel Studio 6进行系统内编程
使用AtmelStudio6进行系统内编程:http://training.eeworld.com.cn/course/450介绍在AtmelStudio6中进行系统内编程。视频中将通过一个案例项目手把手教你一些关键步骤。EEWORLD大学堂----使用AtmelStudio6进行系统内编程
dongcuipin 嵌入式系统
Web动态显示芯片内核温度
通过JavaScript周期500ms发送XMLHttpRequest的方式,获取芯片内核温度,不用刷新网页,可以动态显示的一种简单方法。functiongettemp() { vargettemp=false; functiongettempComplete() { if(gettemp.readyState==4) { if(gettemp.status==200)
academic 微控制器 MCU
2812中这个错误怎么处理
undefinedfirstreferenced symbol&
lcllcl20031 null
吉时利源表在电子薄膜材料的应用方案
某一维线性尺度远远小于它的其他二维尺度的材料成为薄膜材料,理论上薄膜材料厚度介于单原子到几毫米,但由于厚度小于100nm的薄膜已经被称为二维材料,因此薄膜材料通常指厚度介于微米到毫米的薄金属或有机物层。 薄膜材料:薄膜材料可以分为非电子薄膜材料和电子薄膜材料,非电子薄膜材料需要对其电学特性进行分析,不是本方案针对的对象。电子薄膜又可以分为导电薄膜,介质薄膜,半导体薄膜,电阻薄膜,磁性薄膜,压电薄膜,光电薄膜,热电薄膜,超导薄膜等,表面电阻率是电子薄膜电学性质的重要参数。 一.电子薄膜
agitek2022 测试/测量
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved