由串口DMA配置扯出来的一些问题

STM32串口程序 stm32串口通讯程序 阅读详情

A:使用串口DMA收发,在初始化的时候,写了如下程序

	DMA_InitStruct.DMA_BufferSize = BufferSize;
	DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;
	DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;
	DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)str_UsartTx.Buff;
	DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
	DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;
	DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;
	DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)USART1->DR;
	DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
	DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
	DMA_InitStruct.DMA_Priority = DMA_Priority_High;
	DMA_Init(DMA1_Channel4,&DMA_InitStruct);

自认为对寄存器比较熟悉了,结果翻车了,于是开始了对于USART1->DR的深究

首先是USART1的定义

#define USART1              ((USART_TypeDef *) USART1_BASE)

可以看出来,USART1是一个USART_TypeDef类型的结构体指针了,USART1_BASE很明显是USART1对应的地址。

继续看USART_TypeDef的定义

typedef struct
{
  __IO uint16_t SR;
  uint16_t  RESERVED0;
  __IO uint16_t DR;
  uint16_t  RESERVED1;
  __IO uint16_t BRR;
  uint16_t  RESERVED2;
  __IO uint16_t CR1;
  uint16_t  RESERVED3;
  __IO uint16_t CR2;
  uint16_t  RESERVED4;
  __IO uint16_t CR3;
  uint16_t  RESERVED5;
  __IO uint16_t GTPR;
  uint16_t  RESERVED6;
} USART_TypeDef;

这个如果看USART寄存器映射,你就明白为什么会是这种结构了。至于RESERVEDn,是因为USART对应寄存器的高16位没有用到的缘故。顺便放一个USART的寄存器映射图


至于__IO,cor_cm3.h中有定义

#define     __O     volatile             /*!< Defines 'write only' permissions */
#define     __IO    volatile             /*!< Defines 'read / write' permissions */

OK,这就明了了,USART1是一个结构体指针,指向USART1的物理地址,所以需要用->来访问结构体成员,所以USART1->DR就是USART1中的DR成员,因为USART1指向了USART1的物理地址,所以DR就指向了USART1的DR寄存器

同样的方式,就可以很好的理解32中其他的寄存器访问原理了

stm32cubeMX 串口usart + DMA + FREERTOS配置 DMA接收任意长度数据 STM32cubeMX版本5.2.1 最近由于工作需要用到LWIP,看到网上有人说用cubeMX可以生成LWIP库,同时还能生成FREERTOS系统。就索性把整个工程的驱动库都换成了cubeMX生成的HAL库,在之前写工程基础上更改驱动配置,踩了一些坑,在这里把串口的配置及部分软件代码分享出来,希望能对大家有所帮助。 1、时钟配置 2、串口配置 3、... 阅读详情

相关推荐

基于STM32F407标准库串口DMA+空闲中断

核心板:STM32F407 实验目的:通过DMA接收串口发来的数据,并且利用串口空闲中断在将这些数据发送至串口助手。

m0_64354650的博客 7456

stm32f103zet6特别注册DMA如果设置成 存储器到外设模式 DMA_M2M一定要设置成DMA_M2M_Disable

stm32f103zet6特别注册DMA如果设置成 存储器到外设模式 DMA_M2M一定要设置成DMA_M2M_Disable

zaixingxing2539的博客 403

USART 串口 DMA 发送和接收

串口DMA发送: 发送数据的流程: 前台程序中有数据要发送,则需要做如下几件事 1.      在数据发送缓冲区内放好要发送的数据,说明:此数据缓冲区的首地址必须要在DMA初始化的时候写入到DMA配置中去。 2.      将数据缓冲区内要发送的数据字节数赋值给发送DMA通道,(串口发送DMA和串口接收DAM不是同一个DMA通道) 3.      开启DMA,一旦开启,则DMA开始发送数

(~﹃~)~zZ的专栏 1万+

STM32学习笔记(串口+DMA)

小焦的STM32学习日志(一)2020.4.20数据位大小与大端小端:实际应用:`assert_param();`函数的理解:串口配合DMA的使用方法回顾:实现平台说明:重要的初始化内容:需要额外注意的要点:串口DMA总结:2020.4.21串口接收的代码实现:2020.4.22数据拆分宏定义:串口发送的函数实现:串口发送的代码实现 :串口DMA的后记 ,总结: 2020.4.20 数据位大小...

weixin_45624682的博客 2513

华大HC32F460串口空闲中断+DMA收发配置,记录一下自己遇到的坑

华大HC32F460串口空闲中断+DMA收发配置,记录一下自己遇到的坑 华大HC32F460串口空闲中断+DMA收发配置,记录一下自己遇到的坑 注:个人笔记,如有错误,还望谅解。 STM32 在STM32中我们常用DMA外设直接读取内存数据来减轻CPU的工作量,例如在ST32上使用串口空闲中断触发DMA接收一帧数据并转存至预设的BUFF中以方便后续处理,而这个过程并不需要CPU来执行内存拷贝的工作从而减轻了CPU的工作量。 HC32 由于一些特别原因,项目所用的单片机由ST32更换到了华大的HC32,两者使

wojiusuibiankan的博客 9149

基于DMA的串口通信

使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,分别采用中断方式、DMA方式完成下列任务: STM32系统给上位机(win10)连续发送“hello windows!”;当上位机给stm32发送字符“stop”后,stm32暂停发送“hello windows!”;发送一个字符“start”后,stm32继续发送;

weixin_68811361的博客 1952

STM32—DMA使用

DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。为了好理解,可以称之为只能传输数据的CPU。

自我升级中 2181

RK3588与FPGA高速PCIe通信:从理论带宽到实战优化的全流程解析

本文深入解析了瑞芯微RK3588与FPGA之间基于PCIe Gen2的高速通信全流程。从理论带宽计算(约1640MB/s)出发,详细拆解了硬件连接、驱动加载、DMA配置等关键步骤,并重点分享了中断优化、内存管理及高级调优等实战技巧,旨在帮助开发者从“跑通”到“跑好”,实现接近理论极限的稳定高效数据传输。

weixin_29175469的博客 320

关于串口USART一些知识

** 中断 中断有中断标志位和中断使能位,当开启对应的中断使能时,若其中断标志位置1,则会进入对应的中断服务函数,需要注意的是标志位是否自动清0。 ** TC:发送完成标志位 RXNE:读数据寄存器非空 TXE:发送数据寄存器空 正点原子的这个循环里面的代码并没有将TC标志置0,然后又进入下一次USART1->DR=USART_RX_BUF[t],虽然实验现象达到了,但是感觉以后用在较复杂的地方这种操作容易出问题的,参考了下面的资料: USART_IT_TC,USART_IT_TXE中断标志位的区

棒棒的博客 7525

GPU架构-SIMT

本文深度剖析了GPU的SIMT架构,从硬件实现层面解析其与SIMD的本质差异。SIMT通过将32个线程捆绑为warp执行,在标量编程模型下实现数据并行。文章对比了SIMD和SIMT的执行模型、分支处理机制及存储层次,指出SIMT是对SIMD的虚拟化抽象。重点分析了Volta架构引入的独立线程调度技术,以及访存合并对性能的关键影响。通过定量数据展示了各代GPU架构的寄存器文件规模和线程调度机制,为开发者优化GPU程序提供了硬件层面的理论基础。

技术引领业务创新 966

ROS应用之如何配置RTOS满足机器人系统中的实时要求

实时操作系统(RTOS)基本概念实时操作系统(RTOS)是设计用于实时应用的操作系统,其主要目标是在确定的时间内完成任务。RTOS的任务调度算法和优先级控制机制能够确保高优先级任务按时完成。精确的传感器数据采集:传感器数据需要在规定时间内采集并传输给控制系统。快速响应外部事件:对于控制系统,需要确保指令在最短的时间内得到响应。任务的调度周期:任务的周期可以通过公式计算,其中 ftask 是任务的调度频率。优先级分配。

weixin_68094467的博客 1004

STM32使用DMA接收串口数据

目录 01、概述 02、DMA接收 03、中断 04、代码 01、概述 在之前的文章里《STM32串口详解》和《STM32 DMA详解》文章中,详细讲解了STM32的串口和DMA外设,本篇文章将不在细述串口和DMA的知识。 在串口讲解的文章中,示例代码采用中断方式接收和发送数据,中断的好处在于可以及时响应,快速接收到数据,但缺点也很明显,那就是频繁中断,接收1000个字节需要中断1000次,频繁中断就意味着会打断其他代码的执行,对一些应用场景是不允许的。这个时候,使用DMA+串口的组合就可以很

人生一路,点滴记录 2万+

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 439

串口DMA方式发送&接收

串口DMA方式收发         笔者使用的是STM32F407VET6,共包含6路串口,页尾处程序已将全部串口的DMA收发配置完成,本文仅以串口1为例进行讲解。(查看代码可直接跳至第二节或页尾处下载) 1 STM32F4 DMA  简介         DMA,全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方...

且听风吟的博客 3万+

【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记使用说明及章节导航

本文档汇总了王道考研408计算机网络和湖科大教书匠计算机网络课程的重点内容,包括计算机网络体系结构、物理层、数据链路层、网络层、传输层和应用层的详细讲解。通过ISO/OSI和TCP/IP模型,深入探讨了通信基础、介质访问控制、IP地址、TCP/UDP协议、流量控制和网络编程等关键概念。此外,还提供了Linux网络编程实践,帮助读者巩固理论知识

快乐江湖的博客 2万+

【系统架构设计师】预测试卷四:综合知识(75道选择题)

本文整理系统架构设计师考试高频考点,涵盖计算机系统基础、计算机网络、数据库、软件工程与UML四大模块,共28道典型题目。重点解析Cache局部性原理、RISC/CISC区别、TCP三次握手、B+树索引优势、CAP定理、螺旋模型特点等核心概念,并标注易错选项,帮助考生快速掌握解题思路。 关键词:系统架构、Cache、RISC、TCP、B+树、CAP定理、螺旋模型

数据知道的博客 537

STM32 串口采用DMA方式收发

一直都没有整理STM32 DMA应用,这篇文章算是抛砖引玉吧,欢迎拍砖。 本人QQ 330952038,欢迎交流学习什么是DMA —- Directional Memory Access, 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作我们通过以下几方面学习串口DMA: 一、如何理解D

gdjason的博客 3万+

基于FPGA的FIR数字滤波器设计

clear;close all fc=1/4;fs=5/16; %输入给定指标 Rp=3;As=60;Fs=2; f=[fc,fs];m=[1,0]; %计算remezord函数所需参数f,m,dev dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)]; [N,fo,mo,W]=remezord(f,m,dev,Fs); %确定remez函数所需参数 hn=remez(N,fo,mo,W);...

FPGA/MATLAB学习教程/源码/项目合作开发 9448

STM32串口DMA发送中断配置

本文以STM32F1xx的串口1为例,简单呈现下使用DMA中断连续发送的代码 串口DMA配置通常可以分为2个部分: 1.串口配置 2.DMA配置 串口配置 void UART1_Init(u32 bound){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef...

return_oops的博客 1万+

使用STM32H7点亮RGB屏幕

希望本文能对你有所帮助!RGB屏幕是一种具有红、绿、蓝三种颜色通道的显示设备,通过控制每个通道的亮度,可以显示出丰富多彩的图像和动画。要使用STM32H7控制RGB屏幕,我们需要连接适当的引脚,并编写适当的代码来控制每个颜色通道的亮度。在主循环中,我们先点亮红色通道,然后延迟一段时间,接着点亮绿色通道,再延迟一段时间,最后点亮蓝色通道,并再次延迟。需要注意的是,示例代码中的延迟循环使用了一个简单的计数器实现,但实际应用中可能需要更精确的延迟方式,例如使用定时器中断或操作系统提供的延迟函数。

QoyOle的博客 918

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

STM32CUBEMX配置教程(九)STM32串口DMA收发数据

STM32CUBEMX配置教程(九)STM32串口DMA收发数据 基于STM32H743VI 使用STM32CUBEMX两年了,始终觉得这个工具非常的方便,但因为不是经常使用,导致有些要点总是会有些遗忘,因此写下这一系列教程以供记忆,顺便让我这个大萌新给广大小萌新提供一些学习帮助。 此次工程效果:串口115200波特率,接收串口助手XCOM发送的数据并发送回XCOM 本次配置的工程链接在最下方,有需要自取。 0基础可以从第一个教程开始阅读 STM32CUBEMX配置教程(一)基础配置 STM32CUBEMX

weixin_44584198的博客 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

M0G3507 接收串口DMA

需要注意,配置的dma搬运fifo触发条件是3个数据,所以当数据是36个时dma理应要搬运多出来的3个让fifo不为空,但是触发了中断我又关闭了dma,强行留住了最后3个数据,所以会让我进入fifo处理多余的数据。中断方面,正常需要开启DMA传输结束中断,这里为了防止数据接收异常,加入了接收超时中断,M0G3507串口接收超时中断触发条件有2个:1、fifo不为空(这个非常需要注意,有时候超时中断不触发就是这个问题),2、超时。所有配置结束,没有截图的就是默认,没有截图的就是默认,没有截图的就是默认!

MillionZhao的博客 5082

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

STM32+串口DMA配置和使用

DMA,直接存储器存取(Direct Memory Access)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。串口(uart)是一种低速的串行异步通信,适用于低速通信场景,通常使用波特率小于或等于115200bps。对于小于或者等于115200bps波特率的,而且数据量不大的通信场景,一般没必要使用DMA,或者说使用DMA并未能充分发挥出DMA的作用。

weixin_49030685的博客 4010

串口DMA知识梳理以及在Stm32的应用(HAL库)

一.关于DMA 1.什么是DMA? 答:DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。否则,CPU需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。 2.DMA的意义是什么? 答:简单的来说,能控制主存内部读写,这样有利于减轻CPU负担,加快读取速度。 3.串口使用DMA与不使用DMA有什么区别? 答:区别可大了.

冬瓜的博客 1万+

DMA详解以及在串口数据处理上的应用

DMA串口数据发送接收。

白云苍狗 6650
上一篇: 插入排序
下一篇: TrueStudio创建User文件夹
FR_Remember
博客等级 码龄10年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值