完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
移植正点原子阿波罗H743的例程源码,按照手册修改了引脚,其它都没有改动,DMA无法访问DTCM,也更改了,勾选了IRAM2,但是使用该函数HAL_DCMI_Start_DMA(&g_atk_mc5640_dcmi_sta.dcmi,
DCMI_MODE_SNAPSHOT, dts_addr, len);启动DMA传输后,能发送数据,但是很快就停止发送,监测对应数组发现只有部分数据传输
并且DCMI的DR寄存器的值也固定在0x06060608停止更新,读取MIS寄存器的FRAME_MIS位为零,无法捕获到完整的数据,求解。
附上代码*附件:H743+OV5640.zip
困扰许久,感谢各位大佬帮忙解答
该类别下有 182 个回答。
该类别下有 57 个回答。
该类别下有 32 个回答,其中被选为最佳答案 1 次。
该类别下有 31 个回答。
该类别下有 27 个回答。
该类别下有 25 个回答。
该类别下有 22 个回答。
该类别下有 22 个回答,其中被选为最佳答案 1 次。
该类别下有 19 个回答。
该类别下有 18 个回答。
该类别下有 15 个回答。
该类别下有 14 个回答。
针对DCMI-DMA传输停止的问题,以下是逐步解决方案:
确认DMA缓冲区位置
0x24000000
0x30000000
uint8_t dma_buffer[BUFFER_SIZE] __attribute__((section(".RxBufferSection"))); /* 并在链接脚本中定义RxBufferSection到0x24000000区域 */
检查DCMI同步信号极性
hdcmi.Init.VSPolarity = DCMI_VSPOLARITY_HIGH; hdcmi.Init.HSPolarity = DCMI_HSPOLARITY_HIGH; hdcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;
验证DMA传输长度和分辨率设置
320*240*2=153600
len
检查DCMI时钟配置
排查溢出错误
DCMI->SR
OVR_RIS
调试中断处理
HAL_DCMI_IRQHandler(&hdcmi);
硬件检查
调整DMA配置
hdma_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; hdma_dcmi.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
示例代码修正: 在DCMI初始化后添加极性配置和内存地址检查:
// 确认DMA缓冲地址位于AXI SRAM if ((uint32_t)dts_addr < 0x24000000 || (uint32_t)dts_addr >= 0x24080000) { // 处理地址错误 } // 在DCMI初始化结构体中明确同步信号极性 g_atk_mc5640_dcmi_sta.dcmi.Init.VSPolarity = DCMI_VSPOLARITY_HIGH; g_atk_mc5640_dcmi_sta.dcmi.Init.HSPolarity = DCMI_HSPOLARITY_HIGH; g_atk_mc5640_dcmi_sta.dcmi.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING; HAL_DCMI_Init(&g_atk_mc5640_dcmi_sta.dcmi);
通过以上步骤逐一排查,应能定位并解决DCMI-DMA传输异常停止的问题。
举报
贾伟刚
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
发布答案
求助!PWM控制LED没反应,救救孩子吧[大哭]
1532 浏览 1 评论
ADS8699芯片参考电压引脚输出电压不正常
1528 浏览 1 评论
求助大佬我使用STM32F030F4P6 的PA3引脚输出PWM波形
1392 浏览 0 评论
stm32h750vbt6 v版本芯片,ADC采样速度太低
1581 浏览 1 评论
STM32H750VB sys为什么无法选择debug模式?
1746 浏览 1 评论
电子发烧友网
电子发烧友开云(中国)官方
查看 »
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-9 20:06 , Processed in 0.448404 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 www.ringvoyeur.com