历史上的今天
今天是:2024年09月22日(星期日)
2018年09月22日 | stm32标准库dma初始化详解
2018-09-22 来源:eefocus
STM32的DMA有三种类型的传输
1.M-M(内存到内存)
2.M-P(内存到外设)
3.P-M(外设到内存)
STM32的标准库函数提供了一个STM32的初始化结构体如下;
typedef struct
{
uint32_t DMA_PeripheralBaseAddr;//外设地址
uint32_t DMA_MemoryBaseAddr; //内存地址
uint32_t DMA_DIR; //传输方向
uint32_t DMA_BufferSize; //传输的数据多少
uint32_t DMA_PeripheralInc; //外设地址是否递增
uint32_t DMA_MemoryInc; //内存地址是否递增
uint32_t DMA_PeripheralDataSize; //外设数据宽度
uint32_t DMA_MemoryDataSize; //内存数据宽度
uint32_t DMA_Mode; //模式
uint32_t DMA_Priority; //优先级
uint32_t DMA_M2M; //是否是内存到内存的方式
}DMA_InitTypeDef;
上述结构体是STM32的初始化结构体,从上面的结构体变量定义,我们初始化DMA的时候可以分三步走:
第一步:从哪里来到那里去:这句话说明的是上述的第1-3条
uint32_t DMA_PeripheralBaseAddr;//外设地址
uint32_t DMA_MemoryBaseAddr; //内存地址
uint32_t DMA_DIR; //传输方向
第二步:数据要传输多少,传的单位是多少:这句话说明的是上述的第4-8条
uint32_t DMA_BufferSize; //传输的数据多少
uint32_t DMA_PeripheralInc; //外设地址是否递增
uint32_t DMA_MemoryInc; //内存地址是否递增
uint32_t DMA_PeripheralDataSize; //外设数据宽度
uint32_t DMA_MemoryDataSize; //内存数据宽度
第三步:啥时候传输结束; 这句话说明的是传输的模式
uint32_t DMA_Mode; //模式
DMA的初始化步骤
1、打开DMA时钟
2、写入DMA初始化结构体数据
3,调用DMA_Init函数将结构体数据写入寄存器
4,清空DMA发送/接收完成标志位
5,调用DMA_Cmd函数开启DMA通道
如果是M-P则需要通过使能DMA请求例如:
USART_DMACmd(使能DMA串口请求)
如果是M-M则不需要使能DMA请求。
当打开DMA通道时直接就开始数据传输了。
上一篇:STM32 ADC单次转换实例
史海拾趣
|
现在的USB生产厂商很多很多,几乎所有的硬件厂商都有USB的产品。我了解的公司有Intel, 国半, Cypress, AnchorChips这几家,Intel作为USB标准的制订者之一,又加上Intel的龙头老大的地位,现在的计算机主板上的HOST基本上采用的都是INTEL的芯片。而 ...… 查看全部问答> |
|
请问大家用fpga设计之后,小弟用xpower对其进行功耗估计,但不知道怎么来衡量,比如,我的小实验最终估计是Total estimated power consumption:56mW,这是高还是低呢?请大家指点下… 查看全部问答> |
|
系统环境为:一台FTP SERVER 上有两块网卡,其中一块连接公网交换机,一块连接政务网交换机,要实现同时上公网与政务网的功能。其中IP地址设置分别如下: 公网网卡: IP:192.168.122.3 NE ...… 查看全部问答> |
|
请教! STM32管脚复位后为高阻抗输入状态, 然后我配置该管脚为推挽输出。 但是并不赋值0或1。 请问这时候是输出的0,还是1,还是继续保持高阻抗输入状态,直到第一次赋值?、 请教大家!… 查看全部问答> |
|
各位高手: 我现在在做一个USB的读卡器,因读卡器上有三个插糟,想三个插糟对应在主机上显示出三个设备,请问该如何配置,现在只能显示一个设备, { 0x12, /* bLength */   ...… 查看全部问答> |
|
我买的 STM32F103RB 开发板,硬件好使,干别的都可以的。 主时钟 8M,USB D- 用跳线通过1.5k 电阻连 3.3V。 下载 STM 的 U转串 DEMO。 主程序部分: Set_System(); Set_USBClock(); USB_Interrupts_Conf ...… 查看全部问答> |




