资源简介
STM32 F4的DMA可以方便陈述数据
代码片段和文件信息
/*********************************************
标题:操作DMA的练习
软件平台:IAR for ARM6.21
硬件平台:stm32f4-discovery
主频:168M
描述:从其他设备接收数据,再把数据发送出去
USART3接收中断,发射用DMA
author:小船
data:2012-02-03
**********************************************/
#include
u8 USART_DMA_Completed;
u8 Rx_Completed;
u8 Rx_data_counter;
u8 usart3_buffer[100];
void USART3_DMA_config(void);
void USART3_config(void);
void main ()
{
SCB->AIRCR = 0x05AF0000 | 0x400; //中断优先级分组 抢占:响应=3:1
RCC->AHB1ENR |= ( (1<<3) | (1<<21) ); //使能GPIOD时钟使能DMA1时钟
RCC->APB1ENR |= (1<<18); //使能usart3时钟
USART3_DMA_config();
USART3_config();
USART_DMA_Completed = 1;
while(1)
{
if(USART_DMA_Completed & Rx_Completed) //之前数据已经发送完成,接收到新的数据
{
DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
while(DMA1_Stream3->CR & 0x00000001);//确保DMA可以被设置
DMA1->LIFCR |= 0x0f800000;//传送前清空DMA1_Stream3所有中断标志
DMA1_Stream3->NDTR = Rx_data_counter; //设置dma传输数据的数量
if((USART3->SR & (1<<7))) //发送数据寄存器空
{
USART3->CR3 &= ~(1<<7);//除能usartdma发送
USART_DMA_Completed = 0;
DMA1_Stream3->NDTR = Rx_data_counter; //设置dma传输数据的数量
DMA1_Stream3->CR |= 1;//使能dma
USART3->CR3 |= (1<<7);//使能usartdma发送
Rx_Completed = 0;
Rx_data_counter = 0;
}
}
}
}
/****************************************
函数名:USART3_DMA_config
参数:无
返回值:无
功能:DMA1数据流3与usart3关联的相关配置
****************************************/
void USART3_DMA_config(void)
{
DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3
while(DMA1_Stream3->CR & 0x00000001);//确保DMA可以被设置
DMA1->LIFCR |= 0x0f800000;//传送前清空DMA1_Stream3所有中断标志
DMA1_Stream3->PAR = (uint32_t)&USART3->DR;//设置外设地址USART3->DR地址0x40004804
DMA1_Stream3->M0AR = (uint32_t)usart3_buffer; //设置内存地址
DMA1_Stream3->NDTR = Rx_data_counter; //设置dma传输数据的数量
//DMA1_Stream3->FCR |= 0x00000007;//设置fifo
/*
设置dma通道4,即usart3tx
优先级Medium
传输方向内存到外设
内存递增模式
传输完成中断使能
*/
DMA1_Stream3->CR |= ( 0x08000000 |0x00010000 | (1<<6)
| (1<<10) | (1<<4) );
USART3->CR3 &= ~(1<<7);//usart3 dma发送模式除能
NVIC->IP[14] = 0xA0;
NVIC->ISER[0] |= (1<<14);
}
/**************************
函数名:USART3_config
参数:无
返回值:无
功能:配置usart3
************************/
void USART3_config(void)
{
USART3->BRR = 0x0000016C; //波特率115200
/*
使能usart3
usart3发送使能
usart3接收使能
接收缓冲区非空中断使能
8bit
一位停止位
无校验
*/
USART3->CR1 |= (( 1<<13 ) | ( 1<<3 ) | ( 1<<2 ) | ( 1<<5 ));
GPIOD->AFR[1] |= 0x00000077;//选择PD89复用功能
GPIOD->MODER &= 0xFFF0FFFF; //设置PD89复用模式
GPIOD->MODER |= 0x000A0000;
// GPIOD->OTYPER &= 0xFFFFDFFF; //设置PD9推挽输出
GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m
GPIOD->OSPEEDR |= 0x00020000;
GPIOD->PUPDR &= 0xFFFCFFFF; //PD8
GPIOD->PUPDR |= 0x0001
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 61080 2012-02-02 10:53 USART_DMA\Debug\Exe\usart.out
文件 59240 2012-02-09 18:16 USART_DMA\Debug\Exe\USART_DMA.out
文件 23245 2012-02-02 10:53 USART_DMA\Debug\List\usart.map
文件 22374 2012-02-09 18:16 USART_DMA\Debug\List\USART_DMA.map
文件 14796 2012-02-09 18:16 USART_DMA\Debug\Obj\main.o
文件 58708 2012-02-04 10:41 USART_DMA\Debug\Obj\startup_stm32f4xx.o
文件 11580 2012-02-04 10:41 USART_DMA\Debug\Obj\system_stm32f4xx.o
文件 212 2012-02-03 20:12 USART_DMA\Debug\Obj\usart.pbd
文件 212 2012-04-23 19:01 USART_DMA\Debug\Obj\USART_DMA.pbd
文件 79281 2011-10-28 10:31 USART_DMA\inc\core_cm4.h
文件 23979 2011-10-28 10:31 USART_DMA\inc\core_cm4_simd.h
文件 15691 2011-10-28 10:31 USART_DMA\inc\core_cmFunc.h
文件 16108 2011-10-28 10:31 USART_DMA\inc\core_cmInstr.h
文件 530693 2011-10-28 10:31 USART_DMA\inc\stm32f4xx.h
文件 2096 2011-10-28 10:31 USART_DMA\inc\system_stm32f4xx.h
文件 983 2012-02-03 20:12 USART_DMA\settings\usart.cspy.bat
文件 5693 2012-02-03 20:12 USART_DMA\settings\usart.dbgdt
文件 1420 2012-02-03 20:12 USART_DMA\settings\usart.dni
文件 3720 2012-02-02 15:40 USART_DMA\settings\usart.wsdt
文件 983 2012-04-23 19:01 USART_DMA\settings\USART_DMA.cspy.bat
文件 5376 2012-04-23 19:01 USART_DMA\settings\USART_DMA.dbgdt
文件 1421 2012-04-23 19:01 USART_DMA\settings\USART_DMA.dni
文件 3105 2012-03-26 08:39 USART_DMA\settings\usart_dma.wsdt
文件 24546 2011-10-28 10:31 USART_DMA\startup\startup_stm32f4xx.s
文件 1592 2011-10-03 19:51 USART_DMA\stm32f4xx_flash.icf
文件 1615 2011-10-03 19:51 USART_DMA\stm32f4xx_flash_extsram.icf
文件 1594 2011-10-03 19:51 USART_DMA\stm32f4xx_sram.icf
文件 4227 2012-04-23 21:33 USART_DMA\USART_DMA.dep
文件 48487 2012-02-03 20:35 USART_DMA\USART_DMA.ewd
文件 49250 2012-02-03 20:35 USART_DMA\USART_DMA.ewp
............此处省略15个文件信息
- 上一篇:STM32控制电子罗盘彩屏显示角度
- 下一篇:LPD6803的灰度演示程序
相关资源
- STM32F407VET6原理图
- 官方Keil.STM32F4xx_DFP.2.9.0.pack固件库
- stm32f407使用MQ7检测一氧化碳浓度程序
- stm32f407使用继电器程序
- STM32HAL库驱动SPILCD代码
- Keil.STM32F4xx_DFP.2.5.0.pack
- STM32F429 USART使用DMA方式收发数据.rar
- STM32F407VGT6芯片管脚功能定义
- MAX44009驱动STM32F4源码
- STM32F407单片机OV7670无FIFO Ycrcb颜色空间
- zw_STMicroelectronicsSTM32F4.zip
- stm32f407使用温湿度,光照,烟雾传感
- stm32f4_6通道串口收发
- 基于STM32F4xx,MS5611气压传感器使用S
- STM32F407贪吃蛇游戏程序
- 基于stm32f4的非接触式红外温度传感器
- stm32f407_uart dma idle空闲中断不定长度收
- 四旋翼STM32F411CCU6的最小系统板设计
- STM32F407原理图包含PCB
- STM32F407Z系列的OrCAD原理图库
- ADS1292R寄存器配置参考(STM32F405)
- MPU6050 移植STM32F4程序
- stm32f4xxADS1256驱动
- stm32F4图像使用迭代阈值法分割图像
- STM32F407的MPU6050三轴DMP度角度源码
- stm32f4探索者开发板原理图
- STM32F407 6288语音模块程序
- STM32F4 GPS NEO-M8N完整项目
- STM32F411标准库模板例程,基于正点原
- STM32F407双串口
评论
共有 条评论