STM32F4 UART DMA初始化
来源:互联网 发布:大数据金融行业应用 编辑:程序博客网 时间:2024/05/22 07:53
F4的片子内部DMA初始化和F103的有很大区别,在这里引入了数据流(Stream),2个DMA共16的数据流(每个控制器8个),每个数据流则可已处理多达8个通道的数据,每个通道都有一个仲裁器处理DMA请求的优先级。下面贴出DMA请求映射事例
在DMA2中可以看出UART1的发送是数据流7的第4通道,接收是数据流5的第4通道。所以在配置DMA时要注意选择对应的数据流然后配置对应的通道,最后初始化对应数据流和对应的通道。
下面贴出代码
//****************************配置UART1 DMA发送DMA_DeInit(DMA2_Stream7);while (DMA_GetCmdStatus(DMA2_Stream7) != DISABLE);//等待DMA可配置 /* 配置 DMA Stream */DMA_InitStructure.DMA_Channel = DMA_Channel_4; //通道选择DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;//DMA外设地址DMA_InitStructure.DMA_Memory0BaseAddr = (u32)SendBuff;//DMA 存储器0地址DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;//存储器到外设模式DMA_InitStructure.DMA_BufferSize = SEND_BUF_SIZE;//数据传输量 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_Normal;// 使用普通模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//中等优先级DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//存储器突发单次传输DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发单次传输DMA_Init(DMA2_Stream7, &DMA_InitStructure);//初始化DMA Stream//DMA NVIC NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream7_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); DMA_ITConfig(DMA2_Stream7,DMA_IT_TC,ENABLE);//****************************配置UART1 DMA接收DMA_DeInit(DMA2_Stream5);while (DMA_GetCmdStatus(DMA2_Stream5) != DISABLE);//等待DMA可配置 /* 配置 DMA Stream */DMA_InitStructure.DMA_Channel = DMA_Channel_4; //通道选择DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;//DMA外设地址DMA_InitStructure.DMA_Memory0BaseAddr = (u32)ReceiveBuff;//DMA 存储器0地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory ;//外设到存储器模式DMA_InitStructure.DMA_BufferSize = RECEIVE_BUF_SIZE;//数据传输量 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_Normal;// 使用普通模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//中等优先级DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;//存储器突发单次传输DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发单次传输DMA_Init(DMA2_Stream5, &DMA_InitStructure);//初始化DMA Stream//DMA NVIC NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); DMA_Cmd(DMA2_Stream5, ENABLE); //开启DMA传输 DMA_ITConfig(DMA2_Stream5,DMA_IT_TC,ENABLE);
0 0
- STM32F4 UART DMA初始化
- STM32F4 UART DMA初始化
- STM32F4 DMA
- stm32f4-discovery DMA
- STM32F4 ADC DMA 问题
- STM32F4串口DMA配置
- STM32F4(USART+DMA+动态内存)
- STM32F4(USART+DMA+静态内存)
- STM32F4 HAL库DMA学习
- STM32F4使用DMA收发数据
- HAL库-STM32F4 UART-IT
- STM32F4学习笔记4——STM32的AD用DMA方式时的请注意初始化顺序
- uart dma实现方式分析
- f4 uart have dma trouble
- uart dma实现方式分析
- stm32f4 DAC DMA 频率发生器+FreeRTOS
- stm32f4中通过dma采集adc
- stm32f4 ADC DMA 模式 中断进不去解决
- 独立编址,统一编址,IO端口,IO内存,冯·诺伊曼,哈佛结构
- vlc-android源码的编译
- (转载)[Unity3D]关于Android真机调测Profiler
- 图片uri与path的相互转换
- Idea SpringMVC+Spring+MyBatis+Maven+Tomcat调整
- STM32F4 UART DMA初始化
- 高并发量网站解决方案
- Win10GodMode上帝模式
- MATLAB求最大值max函数
- 异步系统的性能调优记录(redis做消息队列)
- minigui安装及问题总结
- Axis1.4 创建webservice服务 ----嵌套在SpringMvc框架中
- 比较LANG和NLS_LANG在Linux中的作用
- Ubuntu安装mysql