STM32的USART1用DMA方式发送数据

1.DMA简介

        DMA (Direct Memory Access) ,直接内存存储器,使用它在做数据传输时能够大大减轻CPU的负担。(先就这么简单了解一下

 2USART1用DMA方式发送数据

        首先应该初始化相关外设。

//配置串口1的硬件参数
USART_DeInit(USART1);                                 //将外设USART1寄存器重设为缺省值
USART_InitStructure.USART_BaudRate = 19200;           //设置串口1波特率为19200
USART_InitStructure.USART_WordLength = USART_WordLength_8b;    //设置一个帧中传输数据位 
USART_InitStructure.USART_StopBits = USART_StopBits_1;        //定义发送的停止位数目为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(USART1, &USART_InitStructure);    

USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;      //时钟低电平活动
USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; //设置SCLK引脚上时钟输出的极性为低电平
USART_ClockInitStructure.USART_CPHA = USART_CPHA_1Edge;       //时钟第一个边沿进行数据捕获
//最后一位数据的时钟脉冲不从SCLK输出
USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;  
USART_ClockInit(USART1, &USART_ClockInitStructure); 
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                   //使能USART1接收中断
USART_Cmd(USART1, ENABLE);                                       //使能USART1外设



DMA_InitTypeDef DMA_InitStructure;
	
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);                    //开启DMA时钟

//设置DMA源:串口1数据寄存器地址  
DMA_InitStructure.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( USART1->DR ) );
//DMA内存基地址(要传输的变量的指针)	
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SendBuff;       
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;	    //数据传输方向,从内存读取发送到DMA_InitStructure.DMA_BufferSize = SENDSIZE_MAX;                  //DMA通道的DMA缓存的大小  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;      //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;	              //内存地址寄存器递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据宽度为8位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;	       //内存数据宽度为8位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;	                   //工作在循环缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;                //DMA通道拥有中优先级  
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                    //禁止DMA通道内存到内存传输
DMA_Init(DMA1_Channel4, &DMA_InitStructure); 	                         //配置DMA1的4通道

DMA_Cmd (DMA1_Channel4,ENABLE);		

先写到这里,我目前理解的不够透彻,等学会了再来完善。

你可能感兴趣的:(stm32,stm32,arm,嵌入式硬件)