历史上的今天
今天是:2025年01月04日(星期六)
2019年01月04日 | STM32F4 UART DMA初始化
2019-01-04 来源:eefocus
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);
史海拾趣
|
什么是移动通信网络优化(扫盲篇) 西安巨人培训中心 党军虎 注:转载请注明出处“西安巨人培训中心”,不得修改原文,否则追究相关责任! 前言 当前咨询或参加我们培训的学员多次要求:希望能够给大家介绍什么是移动 ...… 查看全部问答> |
|
M0开发板IAP疑问,,,,,, if (*GpulFlagPoint == HIGH) { userProgram = (void (*)()) (HIGH+1); } else { if (*GpulFlagPo ...… 查看全部问答> |
|
就是我想用一个按钮控制51单片机的一个中断(低电平触法),中断执行完后就根据中断程序去执行其他的程序。但是在这里遇到一个问题:就是我的中断程序很短(几微秒就执行完),我按下按钮的时候瞬间就执行完了。但是由于此时我的按钮还是处于按下状 ...… 查看全部问答> |
|
本人还在上学,要写毕业论文。很想搞一个和航空有关的项目。因为学校有一台真机,供研究用的。导师提议我可以用软件模拟巡航速度的控制,其实汽车也有这个系统。 看了一点资料,发现很多都和自适应控制有关。 我以前只学过C++,学了点JAVA,编过 ...… 查看全部问答> |
|
我用STM32F103VB做了个板子,现在已经接好了电源、复位、BOOT0和BOOT1、还有JTAG口,晶振部分没有接,用内部的8M晶振跑了个小程序一切正常。 但现在准备做HSE的时候却发现OSC_IN和OSC_OUT两个管脚上都出现了0.2V左右的电压,请问怎么解决这个 ...… 查看全部问答> |
|
请问版主主 STM32F103VBT6 L版本与Y版本的最大区别是什么?我最近买了一些L版本的,程序烧上去后不稳定,以前的Y版 ...… 查看全部问答> |
|
从提出方案到设计本子,调试花了许多业余时间。问了许多从事电子的工程师,包括博士和工作几年的老师都不清楚锁相放大器。总是和锁相环弄混。再次在说明一下锁相放大器和锁相环是两个东西。锁相环(PLL)一般是所频率的,锁相放大器一般用在提取微 ...… 查看全部问答> |




