前言
今天总结“STM32F103 https://yunpan.cn/cSdzWimMT8v7S 访问密码 4a02
STM32F10x的资料可以在我360云盘下载:
https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90
内容讲解
工程概要说明: 今天使用DMA1通道4(这里是重点,下面讲解)传输串口发送的数据。工程配置串口使能DMA传输,DMA按要求发送完成会响应DMA中断,这时在中断里变化一次LED,以提示的作用。关于串口使用DMA接收的原理类似,后期我会举例讲解。
提供的工程以简单为原则,详细中文注释,方便自己方便大家。
关于“STM32F103 DMA_USART” 我把重要的几点在下面分别讲述:
一、RCC时钟
该函数位于bsp.c文件下面;
注意:
这里是使用RCC_AHBPeriphClockCmd,我开始调试的时候,使用RCC_APB1PeriphClockCmd,怎么都不行,结果我才发现时钟错了。
二、DMA的NVIC配置
该函数位于bsp.c文件下面;
由于使用DMA中断,这里必须配置才能响应中断。
三、DMA输出配置
该函数位于main.c文件下面;
主要就是我框出来的两点比较重要,串口发送数据寄存器地址,中断需要配置。
这里我封装成一个发送函数接口,所以下面是直接调用这个函数。
四、DMA中断
该函数位于stm32f10x_it.c文件下面;
提出来说,有两点:1、函数必须有。2、需要清除标志位。
五、今天的重点
为什么是“DMA1_Channel4”,开始学习的人很纳闷,其实这里是规定的(定的要求,见手册)。
说明
今天提供的软件工程基于STM32F103大容量芯片,其实只要适当修改工程的部分配置,STM32F1的芯片都适用。
关键字:STM32F1 DMA USART
引用地址:
STM32F1_DMA(USART)
推荐阅读最新更新时间:2024-11-11 19:43
如何在STM32F4 ARM MCU和Python之间建立USART通信
步骤1:软件和硬件要求 在硬件方面,您需要: STM32F4发现板(或其他任何STM32板) USB转TTL转换器 在软件方面: STM32CubeMX Keil uVision5 已安装串行库的Python 步骤2:STM32CubeMX配置 首先让我们了解我们想要做什么。我们希望通过USART从Python将数据传输到板上,并检查是否有正确的数据并切换LED。因此,我们需要启用USART和Led。 从“连接性”选项卡中启用USART2。 将模式更改为异步 波特率更改为9600 Bits/s 无奇偶校验的字长为8位 无奇偶校验位 从DMA设置中以特殊模式添加USART2_RX 从NVIC设置中启用USART2全局中断 然后生
[单片机]
ATmega32 USART的初始化
ATmega32 在进行通信之前首先要对 USART 进行初始化。初始化过程通常包括波特率的设定,帧结构的设定,以及根据需要使能接收器或发送器。对于中断驱动的 USART 操作,在初始化时首先要清零全局中断标志位 ( 全局中断被屏蔽 )。 重新改变 USART 的设置应该在没有数据传输的情况下进行。TXC 标志位可以用来检验一个数据帧的发送是否已经完成, RXC 标志位可以用来检验接收缓冲器中是否还有数据未读出。在每次发送数据之前 ( 在写发送数据寄存器 UDR 前 )TXC 标志位必须清零。 以下是 USART 初始化程序示例。例程采用了轮询 ( 中断被禁用 )的异步操作,而且帧结构是固定的。波特率作为函数参数给出。在汇编程序里
[单片机]
STM32F1_ 外部SRAM作为运行内存
前言 今天总结“STM32F103外部SRAM作为运行内存”。对于运行内存应该都知道它的意思,主要是程序运行时所使用的RAM,比如我们定义的全局变量、局部变量这些在程序运行时都会在RAM中为它们开辟一片空间,用于运行时所使用。 今天提供的工程是基于前面“TIM延时”的工程修改而来,但是今天的例子是使用ST官方提供的标准库里面“system_stm32f10x.c”文件里面现成的函数接口(使用寄存器配置),使其控制外部SRAM作为运行内存。昨天的工程使用标准库fsmc相应的函数接口来配置的FSMC,昨天工程的目的就是为了使其大家熟悉参数信息。因此,今天单独再提供一个工程”FSMC读写外部SRAM_官方配置”(就是用寄存器配置的版
[单片机]
STM32学习记录8:DMA
官方的例子:STM32F10x_StdPeriph_Lib_V3.1.2\Project\STM32F10x_StdPeriph_Examples\DMA\FLASH_RAM /* DMA1 channel6 configuration */ DMA_DeInit(DMA1_Channel6); //peripheral base address 外设地址是自己的一个定义 //例如#define SPI1_DR_Addr ( (u32)0x4001300C ) DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer; //memory base
[单片机]
裸机系列——DMA工作
DMA 优点是其进行数据传输时不需要 CPU 的干涉,可以大大提高 CPU 的工作效率。 DMA 大容量数据传输中非常重要,比如图像数据传输, SD 卡数据传输, USB 数据传输等等。 S3C2410 有四个 DMA ,每个 DMA 支持工作方式基本相同,但支持的 source Dest 可能略有不同。 那么怎么使用 DMA 呢, S3C2410 内部集成了 DMA 控制器,我们只需要简单的配置一下寄存器就可以实现 DMA 的传输了。 步骤与要点: 1.数据从哪里来,到哪里去? 使用 DMA 当然首先我们要知道数据的流向, DISRCx 寄存器是 DMA 初始源寄存器存放了数据的源地址。 DIDSTx 是 DMA
[单片机]
S3C2440 DMA工作原理
这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。 Atomic transfer:指的是DMA的单次原子操作,它可以是Unit模式(传输1个data size),也可以是burst模式(传输4个data size),具体对应DCON 。 Data Size:指的是单次原子操作的数据位宽,8、16、32,具体对应DCON 。 Request Source:DMA请求的来源有两种,软件&硬件模块,由DCON 控制;当为前者时,由软件对DMASKTRIG寄存器的位0置位触发一次DMA 操作。当为后者时,具体来源由DCON 控制,不同硬件模块的某时间触发一次DMA操作,具体要见不同的硬件模
[单片机]
STM32中DMA模块的使用
DMA(Direct Memory Access)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。 一个完整的微控制器通常由CPU、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的。如果CPU先从A外设拿到一个数据送给B外设使用,同时C外设又需要D外设提供一个数据。。。这样的数据搬运工作将使CPU的负荷显得相当繁重。 严格的说,搬运数据只是CPU的比较不重要的一种工作。CPU最重要的工作室进行数据运算,从加减乘除到一些高级的运算,包括浮点、积分、微分、FFT等。CPU还需要负责复杂的中断
[单片机]
STM32F407 ADC DMA 采样实验
最近公司又做了一款407的样板,正好需要用到407的ADC功能,需要用PC.2来检测RFID芯片的射频电源功率,首先看了下407的数据手册 iframe id="iframe_0.45073829567991197" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22https://home.eeworld.com.cn/data/attachment/album/201410/08/181130bnnyxoy20j8qyame.jpg?_=5758081%22%20style=%22border:none;max-width:1440px%22%
[单片机]