Answers:
无论是使用内部振荡器还是外部晶振,我都要在新板上进行验证的第一件事是我已正确设置了时钟频率。这很重要,因为许多外设(例如UART,SPI,I2C和计时器)都依赖于它。
我验证它的方式是编写一个短循环程序,可以使用汇编语言(我可以手动计算周期),也可以使用C语言,只要您可以获得反汇编清单并执行相同的操作-并打开一个LED和关闭。我设置了一个循环,使其每秒执行一次。我运行代码,并检查LED是否在一分钟内闪烁60次。
就外围设备而言,检查它们的最佳方法是使用示波器(如果有),并查看UART的RX线,SPI的CLK,MOSI和芯片选择线,以及SDA和SCL线。 I2C,并检查线路是否切换以及时序是否正确。
如果没有示波器,则可以在这些线路上放置LED,然后启用或禁用外围设备。禁用时,大多数线路将处于低电平(LED熄灭),但某些线路将处于高电平,例如RX引线UART的指示灯(LED亮)。启用外围设备后,大多数LED应当变暗,因为线路将切换。通过循环运行(禁用/启用),可以更容易地看到开或暗之间的差异。
对于UART,您可以将TX线连接到RX线作为回路。然后,您还可以连接到UART转USB电缆,并在PC 上将RealTerm之类的程序连接到终端。除了测试接口之外,这将在以后的其他调试中派上用场。
对于其他代码,我根据需要使用多个LED来显示代码中的各种路径正在执行。如果您的UART已经工作并连接到PC,则可以在代码中添加对子例程的调用,以输出一条消息以显示该程序已达到的目标(或者,如果有可用的标准C库,请使用printf)。但是正如弗拉基米尔·克拉维罗(Vladimir Cravero)在下面的注释中指出的那样,这可能会使您的代码速度变慢(115,200波特,不是太多,因为一个字符时间小于10 µs)。但是在ISR和其他对时间要求严格的代码中,只需使用LED。
正如Al Bundy在下面的评论中所指出的那样,在线调试器也很有用,特别是在可以设置多个断点的情况下,并且在可以更改存储位置的断点的情况下尤其有用。并非所有调试器都具有该功能。
但是除非没有必要,否则我不会使用调试器很多,例如,查看外设寄存器中的位。或找出我无法通过检查发现的错误;或进行基本的代码覆盖率分析。但是总的来说,我喜欢以“正常”速度运行程序,因为通常会出现很多问题,而单步执行时可能不会出现。我的大多数程序都大量使用中断,这会干扰调试器的使用。