完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这问题已经折腾数日,我是按照正点原子的STM32f4的IAP程序更改了一版自己的程序,功能就是接收串口5的代码然后写入FLASH,完成之后运行APP,测试APP已经通过,并且查看FLASH代码应该是正常写入了的,但用上自己的APP始终工作异常,具体表现如下: 1. APP直接烧写工作正常。 2. APP转成BIN文件上传后工作异常,在线看BOOTLOADER的error report如附件所示报错 3.用指示灯定位发现一旦加上DMA配置则工作异常(如果屏蔽掉DMA再上传则其它功能正常),我的DMA配置如下,用于和一片DSP的SPI通信 void SPI2_CHX_DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);//DMA1 奀笘妏夔 DMA_DeInit(DMA1_Stream3); //饜离 DMA DMA_InitStructure.DMA_BufferSize = 251;//杅擂換怀講 DMA_InitStructure.DMA_Channel = DMA_Channel_0;//籵耋 0 DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&DSPtoARM_buffer[0]; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);//俋扢華硊 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//俋扢善湔揣?耀宒 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA1_Stream3 -> NDTR = 251; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //俋扢準崝講 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA_Priority_VeryHigh; DMA_Init(DMA1_Stream3, &DMA_InitStructure); DMA_ITConfig(DMA1_Stream3, DMA_IT_TC, ENABLE); DMA_Cmd(DMA1_Stream3, ENABLE); DMA_DeInit(DMA1_Stream4); DMA_InitStructure.DMA_BufferSize = 251; DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ARMtoDSP_buffer[0]; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);//SPI1_DR_Addr; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA1_Stream4->NDTR = 251; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA_Priority_High; DMA_Init(DMA1_Stream4, &DMA_InitStructure); DMA_ITConfig(DMA1_Stream4, DMA_IT_TC, ENABLE); DMA_Cmd(DMA1_Stream4, ENABLE); delayms(1); } 强调一下,我的APP是能通过仿真器正常烧写的,而BOOTLOADER也是通过了APP测试的,但是加上了DMA配置的APP就通不过,头大!!! 请问各位高手,是不是我的DMA配置有误?像这样无法在线查看的情况,我应该使用什么样的调试方法? 多谢名位。 |
|
相关推荐
13个回答
|
|
|
|
|
|
不会,帮顶
|
|
|
|
只能帮顶了
|
|
|
|
有没有高手提点一下啊?
|
|
|
|
楼主可以详细描述下iap的异常。
|
|
|
|
楼主的用户程序中是否只有DMA是中断?
|
|
|
|
谢谢回复,IAP异常现象主要表现在指示灯不闪烁。我在程序中用两个LED灯监控程序运行情况,LED0在while(1)主循环中闪烁,另一个在DMA中断里闪烁,用STLINK烧写时程序正常运行,两指示灯闪;转为.BIN文件写入FLASH后,两灯亮,不闪;再将程序中的DMA配置屏蔽,LED0闪 |
|
|
|
谢谢回复,IAP异常现象主要表现在指示灯不闪烁。我在程序中用两个LED灯监控程序运行情况,LED0在while(1)主循环中闪烁,另一个在DMA中断里闪烁,用STLINK烧写时程序正常运行,两指示灯闪;转为.BIN文件写入FLASH后,两灯亮,不闪;再将程序中的DMA配置屏蔽,LED0闪 |
|
|
|
谢谢版主,我的用户程序中有较多中断,不过已经排除其它中断影响,但是只要配置上DMA程序就死,但正常烧与就没有问题,很疑惑 |
|
|
|
楼主是否重新指定了向量地址?
|
|
|
|
已经解决,原来问题在以前的开发者在一个底层的函数里又将中断向量表的地址给重新初始化了一遍,哎,挖个坑给后人跳啊,想不到
|
|
|
|
楼主可以详细描述下iap的异常
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 00:37 , Processed in 0.945659 second(s), Total 96, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号