微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 不用库函数自己动手配置STM32中的DMA

不用库函数自己动手配置STM32中的DMA

时间:11-26 来源:互联网 点击:

#define DMA_CMAR6(*((volatile unsigned long *)0x40020078))//通道6存储器地址寄存器

#define DMA_CMAR7(*((volatile unsigned long *)0x4002008C))//通道7存储器地址寄存器

配置DMA,手册上表示可以将串口UART1的发送Tx功能配置为DMA发送,在DMA通道4:

void DMA_configration(void)

{

//DMA设置:

//设置DMA源:内存地址&串口数据寄存器地址

//方向:内存-->外设

//每次传输位:8bit

//传输大小:10字节

//地址自增模式:外设地址不增,内存地址自增1

//DMA模式:循环

//优先级:高

RCC_AHBENR|=0x00000001; //位0 DMAEN DMA时钟使能

DMA_CCR4&=0xFFFF800E;//0:通道禁用

DMA_CPAR4=(unsigned long)&USART1_DR;

DMA_CMAR4=(unsigned long)Data_Buffer;

DMA_CNDTR4=10;

DMA_CCR4=0x00000000;

DMA_CCR4|=0x000030B0;

//DMA_CCR4|=0x00000001;//DMA使能

}

Main函数:

unsigned char Data_Buffer[10]={0x11,0x22,0x33,0x44,0x55};

//将Data_Buffer设为全局变量

int main()

{

SystemInit0();//系统(时钟)初始化

stm32_UsartSetup ();//串口初始化,前面的文章中有介绍

DMA_configration();// DMA配置

USART1_CR3|=0x00000080; //将USART1模块发送数据Tx设置成DMA方式工作

DMA_CCR4|=0x00000001; //使能DMA

while(1)

{

//CPU可以不受打扰的做其他事情

}

}

打开串口助手就可以看到Data_Buffer[]中的数据,其实这只是一个简单的演示实例,DMA的用处是很大的,先学会配置,以后会有它大显身手的时候。

USART1_CR3|=0x00000080; //将USART1模块发送数据Tx设置成DMA方式工作

DMA_CCR4|=0x00000001; //使能DMA

上面这两句就是触发源,你可以把这两句放到定时器TIMx中,比如定时1S触发DMA,这些都是可以任意设置的,不难吧!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top