完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在STM32F031芯片的项目时同时开发了串口发送和SPI的DMA,因为两个功能我独立,开发完成准备移植到一起,结果代码运行问题,检查后发现是串口发送和SPI的接收DMA消耗了DMA1_Channel2,于是赶紧翻看手册,嘿嘿,看到了好消息。在STM32F1系列与STM32F0系列移植手册的表9.STM32F1系列与STM32F0系列之间的DMA请求中发现了这个大宝贝:
USART1除了使用通道2和3还可以使用通道4和5。 于是马上修改代码,编译后再调试。。。。。。。。。。不行啊!!!!! 检查配置,没错啊,不过是换通道而已,那到底怎么回事,总不能手册从写错了吧,于是开始搜索之路,就在地铁上突然看到有人遇到同样的问题,最后说的是需要重映像,于是就去找库函数,别说,还真有。 void SYSCFG_DMAChannelRemapConfig(uint32_t SYSCFG_DMARemap, FunctionalState NewState)函数。函数原型如下: /** * @brief Configure the DMA channels remapping. * @param SYSCFG_DMARemap: selects the DMA channels remap. * This parameter can be one of the following values: * @arg SYSCFG_DMARemap_TIM17: Remap TIM17 DMA requests from channel1 to channel2 * @arg SYSCFG_DMARemap_TIM16: Remap TIM16 DMA requests from channel3 to channel4 * @arg SYSCFG_DMARemap_USART1Rx: Remap USART1 Rx DMA requests from channel3 to channel5 * @arg SYSCFG_DMARemap_USART1Tx: Remap USART1 Tx DMA requests from channel2 to channel4 * @arg SYSCFG_DMARemap_ADC1: Remap ADC1 DMA requests from channel1 to channel2 * @param NewState: new state of the DMA channel remapping. * This parameter can be: ENABLE or DISABLE. * @note When enabled, DMA channel of the selected peripheral is remapped * @note When disabled, Default DMA channel is mapped to the selected peripheral * @note By default TIM17 DMA requests is mapped to channel 1, * use SYSCFG_DMAChannelRemapConfig(SYSCFG_DMARemap_TIM17, Enable) to remap * TIM17 DMA requests to channel 2 and use * SYSCFG_DMAChannelRemapConfig(SYSCFG_DMARemap_TIM17, Disable) to map * TIM17 DMA requests to channel 1 (default mapping) * @note This function is only used for STM32F030, STM32F031, STM32F042, STM32F072 and STM32F051 devices. * @retval None */ void SYSCFG_DMAChannelRemapConfig(uint32_t SYSCFG_DMARemap, FunctionalState NewState) { /* Check the parameters */ assert_param(IS_SYSCFG_DMA_REMAP(SYSCFG_DMARemap)); assert_param(IS_FUNCTIONAL_STATE(NewState)); if (NewState != DISABLE) { /* Remap the DMA channel */ SYSCFG->CFGR1 |= (uint32_t)SYSCFG_DMARemap; } else { /* use the default DMA channel mapping */ SYSCFG->CFGR1 &= (uint32_t)(~SYSCFG_DMARemap); } } @arg SYSCFG_DMARemap_USART1Tx: Remap USART1 Tx DMA requests from channel2 to channel4 将串口1的DMA发送从通道2重映射到通道4。雾操,我这英语4级没过的都看懂了,简直欣喜若狂,感觉用起来。 已经水了这么多了,结贴吧,结果确实没问题,不过还要打开SYSCFG的时钟,这是重点。不然又是一个坑。***出来: //DMA的通道二被SPI占用,此处使用SYSCFG_DMAChannelRemapConfig将DMA通道重定向 void MYDMA_485_Config(void) { DMA_InitTypeDef DMA_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能SYSCFG时钟,必须的 SYSCFG_DMAChannelRemapConfig(SYSCFG_DMARemap_USART1Tx, ENABLE);//将DMA串口发送从通道2重映射到通道4 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输 SPI_DMA1_MEM_LEN = 11; DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_BASE+0x28; //DMA外设基地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RS485_TX_BUF; //DMA内存基地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //数据传输方向,从内存读取发送到外设 DMA_InitStructure.DMA_BufferSize = SPI_DMA1_MEM_LEN; //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_Normal; //工作在正常缓存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输 DMA_Init(DMA1_Channel4, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器 DMA_Cmd(DMA1_Channel4, ENABLE); //使能USART1 TX DMA1 所指示的通道 } 拜拜啦,有问题可以直接留言。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:03 , Processed in 0.680175 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号