基于ARM7的DMA传输详解文档格式.docx
- 文档编号:13866544
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:10
- 大小:41.41KB
基于ARM7的DMA传输详解文档格式.docx
《基于ARM7的DMA传输详解文档格式.docx》由会员分享,可在线阅读,更多相关《基于ARM7的DMA传输详解文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
即开辟了一个空间,空间用于存放要发送的数据。
将这个空间和串口用DMA方式绑定。
DMA传输是将数据从一个地址空间复制到另外一个地址空间。
如本实验中,我们先将要发送的数据送入开辟的SendBuff[]地址空间,初始化从这个地址空间向串口2发送数据这个动作。
初始化完成后,传输动作本身是由DMA控制器来实行和完成,不用CPU直接控制传输,我们只需要开启DMA传输即可。
接下来我们就介绍本实验的基本实现步骤:
1)对串口进行初始化。
例如:
调用函数SZ_STM32_COMInit()设置使用的是串口2,将波特率配置成115200。
2)调用函数MYDMA_Config()配置DMA。
MYDMA_Config()函数初始化串口2以DMA方式发送数据这个动作动作。
具体配置的内容有:
使能DMA传输、传入串口2使用的通道7等。
3)将待发送的数据传入我们开辟的空间SendBuff[],即定义的数组。
4)调用USART_DMACmd()函数,使能串口2的DMA发送。
下面是DMA的6个寄存器:
寄存器
描述
DMA_ISR
DMA中断状态寄存器
DMA_IFCR
DMA中断标志位清除寄存器
DMA_CCRx
DMA通道x设置寄存器
DMA_CNDTRx
DMA通道x待传输数据数目寄存器
DMA_CPARx
DMA外设地址寄存器
DMA_CMARx
DMA内存地址寄存器
DMA结构体的成员:
Typedefstruct
{
uint32_tDMA_Periphera1BaseAddr;
uint32_tDMA_MemoryBaseAddr;
uint32_tDMA_DIR
uint32_tDMA_BufferSize;
uint32_tDMA_Periphera1Inc;
uint32_tDMA_MemoryInc;
uint32_tDMA_Periphera1DataSize;
uint32_tDMA_MemoryDataSize;
uint32_tDMA_Mode;
uint32_tDMA_Priority;
uint32_tDMA_M2M;
}
DMA_InitTypeDef;
1)DMA_Periphera1BaseAddr
这个成员保存的是外设数据寄存器的基地址,这个地址作为传输的源或目标,比如要进行串口2DMA传输,那么外设基地址为串口接受发送数据存储器USART->
DR的地址,表示方法为&
USART->
DR,为什么说是“基”地址?
因为DMA具有地址自增的功能,地址自增功能时的可以方便地读取连续的数据单元,具体是不是要地址自增,可以通过相应的配置进行选择。
2)DMA_MemoryBaseAddr
保存了内存的基地址,同样,这个地址可作为传输的源或目标。
在使用时通常会给这个成员赋值为某个数组的基地址,然后利用DMA的地址自增功能把数组一个个地填满。
3)DMA_DIR
保存了DMA数据传输方向,可以选择是外设到内存还是内存到外设。
4)DMA_BufferSize
保存了DMA要传输的数据总大小,单位为后面结构体元。
本章代码对它赋值为自定义的宏Sendbuff_Size,宏展开为5200。
即本次DMA要传输5200个数据。
5)DMA_Periphera1Inc和DMA_MemoryInc
分别为外设和内存的地址是否开启自增功能。
本章向这两个成员赋值为外设地址固定,而内存地址自增,所以在DMA的传输过程中,数组的元素0~5199被一个一个地转移到同样的串口数据寄存器地址。
6)DMA_Periphera1DataSize;
和DMA_MemoryDataSize
分别为外设和内存的数据单元大小。
可以为字节,半字和字。
7)DMA_Mode
保存DMA的模式,可以使循环模式或者一般模式,循环模式是当传输的字节最后变为0时,会重新开始传输,而一般模式是只作以此DMA传输。
8)DMA_Priority
DMA通道的优先级,总线矩阵根据其DMA通道的优先级进行总线协调分配。
9)DMA_M2M
保存了是否内存到内存的DMA传输。
DMA传输可以在外设与内存,外设与外设,还可以在内存与内存之间进行传输。
另外,在初始化的时候要选择恰当的DMA通道,本次函数使用的是DMA1_Channel7即DMA1的通道7,这个通道并不是随便选择的,而是要根据DMA的请求映像来设置。
DMA请求是指外设在需要使用DMA前需要向DMA控制器发送请求信息,DMA在接收到请求后才会根据DMA配置进行数据转移。
3.硬件设计
1)本实验用到按键RESET(复位键)
2)串口2
3)DMA
DMA属于STM32内部。
按键、串口,在STM32f107VC的原理图中,这里不一一列举。
我们利用外部按键RESET来控制DMA的传送,每按一次RESET,DMA就传送一次数据到USART2,然后在电脑串口数据端显示进度的信息。
3.软件设计
本实验含3个三个.c文件,分别是主函数main.c,串口usart.c,led灯led.c。
1)main.c
#include"
led.h"
usart.h"
stm32f10x_dma.h"
externu8SendBuff[5200];
//extern声明这几个变量时外部变量,在别的文件已经定义了定义5200字节的数组SendBuff[]
constu8TEXT_TO_SEND[]={"
STM32DMA串口实验"
};
intmain(void)
u16i;
LED_Init();
//led的初始化
SZ_STM32_COMInit();
//串口2的初始化
MYDMA_Config();
//定义DMA结构体
for(i=0;
i<
5200;
i++)//填充ASCII字符集数据
{
SendBuff[i]=TEXT_TO_SEND[0];
//将要传输到串口的数据写入SendBuff
}
USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
//使能串口2的DMA发送
/等待DMA传输完成,实际应用中,传输数据期间,可以执行另外的任务/
while
(1)
if(DMA_GetFlagStatus(DMA1_FLAG_TC7)!
=RESET)//判断通道7传输完成
{
SZ_STM32_LED1Toggle();
//定义led1的状态函数
SZ_STM32_LED2Toggle();
//定义led2的状态函数
DMA_ClearFlag(DMA1_FLAG_TC7);
//清除通道7传输完成标志
}
2)usart.c
u8SendBuff[5200];
voidSZ_STM32_COMInit(void)
GPIO_InitTypeDefGPIO_InitStructure;
/*声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef确定*/
USART_InitTypeDefUSART_InitStructure;
/*使能GPIOD端口时钟、复用功能时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);
/*使能USART2时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
/*输出模式是复用推挽输出*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
/*对应原理图中PD5引针USART_TX*/
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOD,&
GPIO_InitStructure);
/*根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器*/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
/*输入模式是浮空输入*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
/*对应原理图中PD6引针USART_RX*/
/*串口2重映射*/
GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM7 DMA 传输 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)