回答:
新しいボードで内部発振器または外部水晶のどちらを使用しているかを最初に確認することは、クロック周波数が正しく設定されていることです。UART、SPI、I2C、タイマーなどのペリフェラルの多くがそれに依存しているため、これは重要です。
私がそれを確認する方法は、サイクルを手動でカウントできるアセンブリ言語で、または分解リストを取得して同じことを実行できる限りCの短いループでプログラムを書くことです-そしてLEDをオンにしますとオフ。1秒に1回実行されるようにループを設定しました。コードを実行し、LEDが1分間に60回点滅することを確認します。
周辺機器に関する限り、それらをチェックする最良の方法は、オシロスコープがある場合はそれを使用し、UARTのRXライン、SPIのCLK、MOSI、チップ選択ライン、およびSDAとSCLラインを確認することです。 I2C、そしてラインがトグルしていてタイミングが正しいように見えることを確認します。
オシロスコープがない場合は、これらのラインにLEDを配置してから、周辺機器を有効または無効にすることができます。無効にすると、ほとんどのラインがロー(LEDオフ)になりますが、RXリードのように一部はハイになりますUART(LEDオン)の。周辺機器を有効にすると、ラインがトグルするため、ほとんどのLEDが暗くなるはずです。ループ(無効/有効)で実行することで、onまたはdimの違いを簡単に確認できます。
UARTの場合は、TXラインをRXラインにループアラウンドとして接続できます。また、UART-USBケーブルに接続し、PCの実際の端末にRealTermのようなプログラムを接続することもできます。インターフェースのテストに加えて、これは後で他のデバッグに役立つでしょう。
他のコードについては、必要に応じて複数のLEDを使用して、コード内のさまざまなパスが実行されていることを示しています。UARTが機能していて、PCに接続している場合は、サブルーチンを呼び出してコードを散布し、プログラムが到達したポイントを示すメッセージを出力できます(または、標準のCライブラリがある場合は、printfを使用します)。しかし、Vladimir Craveroが以下のコメントで指摘しているように、これはコードをいくらか遅くする可能性があります(1文字の時間は10 µs未満であるため、115,200ボーで、それほど多くありません)。しかし、ISRやその他のタイムクリティカルなコードでは、LEDを使用してください。
以下のコメントでAl Bundyが指摘しているように、特に複数のブレークポイントを設定できる場合はインサーキットデバッガーも役立ち、変更されているメモリ位置にブレークポイントを設定できる場合はさらに便利です。すべてのデバッガにその機能があるわけではありません。
ただし、たとえばペリフェラルレジスタのビットを確認する必要がない限り、デバッガはあまり使用しません。または、検査で見つけられないバグを追跡すること。または初歩的なコードカバレッジ分析。しかし、一般に、プログラムを「通常の」速度で実行するのが好きです。多くの問題が通常表示されるため、プログラムがシングルステップの場合はそうでない場合があるためです。私のプログラムのほとんどは割り込みを頻繁に使用するため、デバッガーの使用が妨げられます。