你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助,stm32f407 IAP工作异常问题,请问是否为DMA配置错误?

[复制链接]
mayzhangxia 提问时间:2016-12-2 11:35 /
本帖最后由 mayzhangxia 于 2016-12-2 11:45 编辑

这问题已经折腾数日,我是按照正点原子的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配置有误?像这样无法在线查看的情况,我应该使用什么样的调试方法?
多谢名位。





error report

error report
收藏 1 评论13 发布时间:2016-12-2 11:35

举报

13个回答
mayzhangxia 回答时间:2016-12-12 10:45:32
已经解决,原来问题在以前的开发者在一个底层的函数里又将中断向量表的地址给重新初始化了一遍,哎,挖个坑给后人跳啊,想不到

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

5265325 回答时间:2016-12-2 11:38:00
mayzhangxia 回答时间:2016-12-2 11:38:46
wudianjun2001 回答时间:2016-12-2 11:48:18
不会,帮顶
peter001 回答时间:2016-12-2 12:41:53
只能帮顶了
mayzhangxia 回答时间:2016-12-2 13:32:25
有没有高手提点一下啊?
creep 回答时间:2016-12-2 14:15:20
楼主可以详细描述下iap的异常。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

废鱼 回答时间:2016-12-2 16:55:35
楼主的用户程序中是否只有DMA是中断?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

mayzhangxia 回答时间:2016-12-5 09:46:22
creep 发表于 2016-12-2 14:15
楼主可以详细描述下iap的异常。

谢谢回复,IAP异常现象主要表现在指示灯不闪烁。我在程序中用两个LED灯监控程序运行情况,LED0在while(1)主循环中闪烁,另一个在DMA中断里闪烁,用STLINK烧写时程序正常运行,两指示灯闪;转为.BIN文件写入FLASH后,两灯亮,不闪;再将程序中的DMA配置屏蔽,LED0闪
mayzhangxia 回答时间:2016-12-5 09:46:52
creep 发表于 2016-12-2 14:15
楼主可以详细描述下iap的异常。

谢谢回复,IAP异常现象主要表现在指示灯不闪烁。我在程序中用两个LED灯监控程序运行情况,LED0在while(1)主循环中闪烁,另一个在DMA中断里闪烁,用STLINK烧写时程序正常运行,两指示灯闪;转为.BIN文件写入FLASH后,两灯亮,不闪;再将程序中的DMA配置屏蔽,LED0闪
mayzhangxia 回答时间:2016-12-5 13:58:09
安 发表于 2016-12-2 16:55
楼主的用户程序中是否只有DMA是中断?

谢谢版主,我的用户程序中有较多中断,不过已经排除其它中断影响,但是只要配置上DMA程序就死,但正常烧与就没有问题,很疑惑
废鱼 回答时间:2016-12-8 09:42:11
楼主是否重新指定了向量地址?
zbber 回答时间:2016-12-12 11:14:25
楼主可以详细描述下iap的异常

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版