搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
花生_TL007
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
网络七层模型:理解网络通信的架构(〇)
2
ChatGPT3.5、GPT4.0、DALL·E 3和Midjourney对话与绘画智能体验_gpt3.5 调用dalla
3
Word2vec原理+实战学习笔记(二)_语言模型预测都为pad
4
大语言模型与知识图谱统一化_大型语言模型和知识图谱
5
计算机网络设计校园网实验报告,计算机网络课程设计实验报告---校园网网络构建方案设计和实现...
6
医疗最终会成为最大的AI垂直领域吗?
7
使用大型语言模(LLM)构建系统(三):思维链推理_大语言模型思维链怎么做
8
操作指南:备份软件 FreeFileSync_freefilesync 镜像 更新
9
WorkerMan::Worker类解析(4)_kill_worker_timer_time
10
知识图谱与智能交通:改变未来的交通体系
当前位置:
article
> 正文
STM32的DMA
作者:花生_TL007 | 2024-04-08 22:45:51
赞
踩
STM32的DMA
DMA(Direct memory access)直接存储器存取,用来提供在外设和存储器之间或者存储
器和存储器之间的高速数据传输,无须CPU干预,数据可以通过DMA快速地移动,这就节
省了CPU的资源来做其他操作。
STM32有两个DMA控制器共12个通道(DMA1有7个通道,DMA2有5个通道),每个通
道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个
DMA请求的优先权。
3.1、DMA作用
DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环
节,
主要涉及四种数据传输模式,其本质还是一样的,都是地址到地址的数据传
输。
外设到内存
内存到外设
内存到内存
外设到外设
3.2、
DMA传输相关参数
源地址
目标地址
数据传输量
...
3.3、DMA的主要特征
12个独立的可配置的通道(请求):DMA1有7个通道,DMA2有5个通道,每个通
道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过
软件来配置:
同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很
高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推)
独立数据源和目标数据区的传输宽度包括字节、半字、全字,源地址和目标地址
必须按数据传输宽度对齐。
支持循环的缓冲器管理
每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错)
FLASH、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和
目标
编程的数据传输数目:最大为65535
3.4、stm32DMA资源
3.4.1、DMA1控制器
从外设(TIMx[x=1、2、3、4]、ADC1、SPI1、SPI/I2S2、I2Cx[x=1、2]和USARTx[x=1、
2、3])产生的7个请求,通过逻辑或输入到DMA1控制器。
外设的DMA请求,可以通过设置相应外设寄存器中的控制位,被独立地开启或关闭
3.4.2、DMA2控制器
从外设(TIMx[5、6、7、8]、ADC3、SPI/I2S3、UART4、DAC通道1、2和SDIO)产生的5
个请
求,经逻辑或输入到DMA2控制器
外设的DMA请求,可以通过设置相应外设寄存器中的DMA控制位,被独立地开启或关闭
注意:DMA2控制器及相关请求仅存在于大容量产品和互联型产品中
3.5、stm32DMA相关固件库函数说明
3.5.1、初始化函数
1
void
DMA_Init
(
DMA_Channel_TypeDef
*
DMAy_Channelx
,
\
2
DMA_InitTypeDef
*
DMA_InitStruct
)
参数:
@DMAy_Channelx:DMA通道
y:1或2,用于选择DMA1或DMA2
x:对于DMA1:1-7,对于DMA2:1-5
@DMA_InitStruct:DMA配置结构体指针
1
typedef struct
2
{
3
uint32_t DMA_PeripheralBaseAddr
;
//
外设地址
4
uint32_t DMA_MemoryBaseAddr
;
//
存储器地址
5
uint32_t
DMA_DIR
;
//
传输方向
6
uint32_t DMA_BufferSize
;
//
输出大小
7
uint32_t DMA_PeripheralInc
;
//
外设地址增量模式
8
uint32_t DMA_MemoryInc
;
//
存储器地址增量模式
9
uint32_t DMA_PeripheralDataSize
;
//
外设数据宽度
10
uint32_t DMA_MemoryDataSize
;
//
存储器数据宽度
11
uint32_t DMA_Mode
;
//
模式选择
12
uint32_t DMA_Priority
;
//
通道优先级
13
uint32_t
DMA_M2M
;
//
存储器到存储器模式
14
}
DMA_InitTypeDef
;
传输方向:
1
#define
DMA_DIR_PeripheralDST
((
uint32_t
)
0x00000010
)
2
#define
DMA_DIR_PeripheralSRC
((
uint32_t
)
0x00000000
)
DMA通道x配置寄存器(DMA_CCRx):
外设地址增量模式:
1
#define
DMA_PeripheralInc_Enable
((
uint32_t
)
0x00000040
)
2
#define
DMA_PeripheralInc_Disable
((
uint32_t
)
0x00000000
)
存储器地址增量模式:
1
#define
DMA_MemoryInc_Enable
((
uint32_t
)
0x00000080
)
2
#define
DMA_MemoryInc_Disable
((
uint32_t
)
0x00000000
)
外设数据宽度:
1
#define
DMA_PeripheralDataSize_Byte
((
uint32_t
)
0x00000000
)
2
#define
DMA_PeripheralDataSize_HalfWord
((
uint32_t
)
0x00000100
)
3
#define
DMA_PeripheralDataSize_Word
((
uint32_t
)
0x00000200
)
存储器数据宽度
1
#define
DMA_MemoryDataSize_Byte
((
uint32_t
)
0x00000000
)
2
#define
DMA_MemoryDataSize_HalfWord
((
uint32_t
)
0x00000400
)
3
#define
DMA_MemoryDataSize_Word
((
uint32_t
)
0x00000800
)
4
模式选择(DMA_Mode):
1
#define
DMA_Mode_Circular
((
uint32_t
)
0x00000020
)
//
循环模式
2
#define
DMA_Mode_Normal
((
uint32_t
)
0x00000000
)
//
正常模式
通道优先级:
1
#define
DMA_Priority_VeryHigh
((
uint32_t
)
0x00003000
)
2
#define
DMA_Priority_High
((
uint32_t
)
0x00002000
)
3
#define
DMA_Priority_Medium
((
uint32_t
)
0x00001000
)
4
#define
DMA_Priority_Low
((
uint32_t
)
0x00000000
)
存储器到存储器模式:
1
#define
DMA_M2M_Enable
((
uint32_t
)
0x00004000
)
2
#define
DMA_M2M_Disable
((
uint32_t
)
0x00000000
)
3.5.2、DMA通道使能
1
void
DMA_Cmd
(
DMA_Channel_TypeDef
*
DMAy_Channelx
,
\
2
FunctionalState NewState
)
3.5.3、DMA中断配置
1
void
DMA_ITConfig
(
DMA_Channel_TypeDef
*
DMAy_Channelx
,
uint32_t
DMA_IT
,
\
2
FunctionalState NewState
)
3.5.4、其他辅助函数
DMA清除中断挂起
1
void
DMA_ClearITPendingBit
(
uint32_t DMAy_IT
)
DMA获取中断状态
1
ITStatus
DMA_GetITStatus
(
uint32_t DMAy_IT
)
获取传输剩余个数
1
uint16_t
DMA_GetCurrDataCounter
(
DMA_Channel_TypeDef
*
DMAy_Channelx
)
3.6、memory to memory实例
使用DMA的M2M模式从内嵌flash拷贝数据到sram中:
1
//32
个
4
字节数据
2
0x01020304
,
0x05060708
,
0x090A0B0C
,
0x0D0E0F10
,
3
0x11121314
,
0x15161718
,
0x191A1B1C
,
0x1D1E1F20
,
4
0x21222324
,
0x25262728
,
0x292A2B2C
,
0x2D2E2F30
,
5
0x31323334
,
0x35363738
,
0x393A3B3C
,
0x3D3E3F40
,
6
0x41424344
,
0x45464748
,
0x494A4B4C
,
0x4D4E4F50
,
7
0x51525354
,
0x55565758
,
0x595A5B5C
,
0x5D5E5F60
,
8
0x61626364
,
0x65666768
,
0x696A6B6C
,
0x6D6E6F70
,
9
0x71727374
,
0x75767778
,
0x797A7B7C
,
0x7D7E7F80
stm32的内嵌flash中存放的是code和const修饰的变量值
4.dma数据传输示例
1、User目录新建dma_mtom.h和dma_mtom.c文件,通过三色板文件添加按钮添加文件
2、编写dma_mtom.c代码
2.1在外设库定义文件找到RCC_AHBPeriphClockCmdASB总线的外部使能函数
3.编译
4.没有错误
5.下载程序到STM32单片机中进行调试
6.按下复位按键
7.黄灯和红灯亮了,代表p13的引脚写入成功
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/花生_TL007/article/detail/388715
推荐阅读
article
STM3
2
学习笔记
2
-
智能
小车
循迹
实验_
智能
小车
黑线
循迹
实验报告
...
特斯拉镇楼1、什么是
小车
循迹
?将
小车
放在黑色跑道上面,
小车
沿着黑色跑道运动→
循迹
黑色跑道
2
、
小车
循迹
基本原理原理:介绍...
赞
踩
article
STM32
/C5
1
开发环境搭建(
KeilV5
安装)
_
stm32f
1
xx
_
dfp 2.4.
1
...
Keil C5
1
是美国Keil Software公司出品的5
1
系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能...
赞
踩
article
STM32
X-
CUBE
-
AI
:
Pytorch
模型
部署全流程_单片机上如何搭载
pytorch
模型
...
需要注意的是,在
STM32
CUBE
MX上安装
CUBE
AI
时,可能并不能安装到最新版本的
CUBE
AI
,因此可以前往ST官网...
赞
踩
article
ESP8266
+
STM32
+
阿里
云保姆级教程(AT指令+
MQTT
)_怎么开启
at
+
mqtt
...
不建议使用USB转TTL模块供电,可能因为电压电流不稳定导致模块工作异常!推荐外部供电!!注意所有模块均要公地!!需要先...
赞
踩
article
keil5
自带“
串口
模拟器“调试打印(
stm32
)_
keil5
软件
仿真
串口
功能
printf
...
打开
软件
调试 代码编写
串口
程序 开始编译 view菜单->serial Windows -> uart1 # -> 全速...
赞
踩
article
STM32 使用
SYN6288
语音
模块...
本篇文章带大家学习一下
SYN6288
语音
模块,这个模块可以用于车载设备,
语音
电子书等众多产品当中,而且这个模块支持多种编...
赞
踩
article
STM32
LD3320
语音
识别
模块
SPI驱动 (
STM32
CUBE
MX HAL库)...
LD3320
语音
识别
模块
驱动:一、硬件连接主控芯片:
STM32
F103VCT6PB12-----------
LD3320
...
赞
踩
article
【
STM32
+HAL】
语音
识别
模块
LD3320
(SPI版)_
语音
识别
模块
stm32
...
若要更改
语音
输入关键词,可在
LD3320
.c中的LD_AsrAddFixed函数中增加拼音,并在文件最下面的回调函数中增...
赞
踩
article
STM32
-
ADC
+
DMA
使用
(巨全面)_
stm32g030
双路adc dma...
在
STM32
中,
ADC
可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁¹。STM3...
赞
踩
article
MQTT
+
ONENET
+
STM32
+LWIP驱动...
MQTT
学习使用,
ONENET
平台移植通讯,
STM32
移植LWIP使用
MQTT
进行通讯,
MQTT
数据包被分割解决办法MQ...
赞
踩
article
STM32
+
SIM800C
采用
MQTT
协议登录
OneNet
上传温湿度、MQ2烟雾浓度、GPS数据_m...
一、环境介绍MCU:
STM32
F103C8T6GSM
模块
:
SIM800C
开发软件:Keil5
MQTT
协议采用
OneNet
...
赞
踩
article
【
STM32
】
MQ2
烟雾
浓度
传感器
_基于
stm32
的
mq2
烟雾
传感器
...
MQ2
烟雾
浓度
传感器
_基于
stm32
的
mq2
烟雾
传感器
基于
stm32
的
mq2
烟雾
传感器
...
赞
踩
article
【
STM32
+
HAL
库+
CubeMX
】
UART
轮询收发、中断收发、
DMA
收发方法及空闲中断详解_st...
UART
是一种异步串行通信接口,常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输,使用起来相对简单...
赞
踩
article
【
STM32
】
超声波
传感器
HC
-
SR04
知识_hc-
sr04
超声波
传感器
...
超声波
传感器
模块上面通常有两个
超声波
元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触...
赞
踩
article
STM32
-
FSMC
理解及与
FPGA
通讯问题整理
_
fsmc
fpga
...
目录1.
FSMC
基本原理1)
FSMC
是什么? 2)
FSMC
框架2.
FSMC
实现1)硬件连接2)软件code1. FS...
赞
踩
article
STM32
+
FPGA
FSMC
实验_
stm32
fpga fsmc...
本质是把FPG去操作A当做一个SRAM1、首先通过cube配置
stm32
原理图地址总线如下原理图数据总线如下:原理图其余...
赞
踩
article
STM32
FMSC
类
总线
概念详解
(
转载
)
_
fsmc
总线
...
第一个角度理解
STM32
有FSMC
(
其实其他芯片基本都有类似的
总线
功能
)
,FSMC的好处就是你一旦设置好之后,WR(写)...
赞
踩
article
STM32
IAP
远程
程序
升级(基于
HTTP
)_
stm32
http
...
基于HAL库的
STM32
F407IGT6的
IAP
远程
程序
升级方法_
stm32
http
stm32
http
...
赞
踩
article
STM32
——
SYN6288
语音
合成模块_
syn6288
语音
模块...
SYN6288
语音
合成模块是一款基于DSP技术的
语音
合成模块,可以将文本信息转换为自然 流畅的
语音
输出。该模块具有以下特...
赞
踩
article
STM32
UART
详细解读(
代码
的
编写)_
stm32
串口
接受
数据
代码
...
本篇文章来给大家讲解USART
的
代码
详细讲解和使用步骤。本篇文章深入
的
讲解了
UART
发送和接收查询方式和中断方式
的
具体函...
赞
踩
相关标签
stm32
学习
单片机
嵌入式硬件
pytorch
lstm
linux
运维
服务器
语音识别
语音模块