#STM32# 学习日志之调试

    昨晚在编AD转换(DMA)的时候,遇到了一个问题:AD转换串口输出为0。多次调试而且对照例程都没找到问题所在,最后认真对照例程才找到了问题:ADC的DMA命令没有使能。虽然解决了问题,但也花费了大量时间。简单的问题尚且如此,那就有必要对调试做一下总结了。

    1,将程序按模块或者功能分块,画出整个程序的流程图。按照模块或者功能为单位去寻找问题。

    2,查看各个模块的相应输入输出接口状态(寄存器),找到有问题的模块。

    3,网络搜素或者查看例程,找到问题模块的使用流程,对照程序看是否有疏漏。一般模块的使用流程都是开启时钟->模式配置->使能,但是在被另外一个模块调用的时候,要在另外一个模块中使能。我们通常都会记得将两个模块各自使能,调用的使能(这次是ADC调用DMA,也就是ADC_DMACmd)却比较容易漏掉。

    4,检查问题模块的控制寄存器是否正确配置。这里直接通过调试看寄存器的状态,找到问题再回去看相应的库函数调用是否出错。

    注意:在Keil里面调试的时候,不要一上来就逐步走程序,这个细节查错应该放在最后,要按照上面说的流程去从大到小找出问题所在,节省大量调试时间。


除了调试,学习方法也需要反思。在学习一个模块的时候,没有认真去搞懂这个模块的使用方法,一上来就按照自己想象的样子迫不及待得去编程,这也是本末倒置的做法。后面还是要先画一下使用流程,再根据流程去填入相应的代码。每个模块的使用流程和注意点都要记录下来,后续开发调用的时候就可以快速入手。

你可能感兴趣的:(单片机)