用dma来实现串口数据接收,利用dma满中断和半满中断+串口空闲中断读取dma缓存数据,调试中问题如下
1.dma无法进中断:反复和官方固件库对比之后还是发现无法进入满中断,更正:dma没有起作用,空闲中断进入后dma接收的长度是0。对着寄存器再次检查了一遍配置信息,根据寄存器来看,并未看出问题。改变排查问题的方向:用stm32试一下dma功能,stm32 dma串口收发都正常,再次回到gd芯片。
方法:1.为了排除工程本身问题,用固件库自带工程进行测试(内存到串口),正常,可以进dma中断,2.修改工程,改为串口到内存,不正常,dma仍然不启动传输,排除dma中断和时钟配置,锁定dma本身配置,无意中排查串口配置发现dma串口配置的问题,修改之后正常。
总结:dma内存到外设整个bug查找用了两天半,总感觉没问题,但是就是不工作,配置反复看,反复比对,仍然没发现问题,bug还是无意中发现的,中间不断修改工程,没有直接用官方的例程来测试,走了弯路1,期间也参考了csdn别人的配置,但是很小的细节还是被遗漏了,造成bug始终没被发现,没有使用文件对比工具进行可靠排查,走了弯路2,弯路2是主要因素。
需要看不同格式的代码,中间就是因为不熟悉官方库的结构,不想用官方库试。
阅读(192) | 评论(0) | 转发(0) |