Первое, что я проверяю на новой плате, использует ли она внутренний генератор или внешний кристалл, это то, что у меня правильно настроена тактовая частота. Это важно, потому что от него зависят многие периферийные устройства, такие как UART, SPI, I2C и таймеры.
Я проверяю это, чтобы написать программу с коротким циклом, либо на языке ассемблера, где я могу подсчитать циклы вручную, либо на C, если вы можете получить список разборок и сделать то же самое - и включить светодиод и выкл. Я настроил цикл так, чтобы он выполнялся раз в секунду. Я запускаю код и проверяю, что светодиод мигает 60 раз в минуту.
Что касается периферийных устройств, лучший способ проверить их - это использовать осциллограф, если он у вас есть, и посмотреть на линию RX для UART, CLK, MOSI и линии выбора микросхем для SPI, а также линии SDA и SCL для I2C, и проверьте, что линии переключаются, и время выглядит правильным.
Если у вас нет осциллографа, вы можете поставить светодиоды на эти линии, а затем включить или отключить периферийные устройства. Когда отключено, большинство линий будет низким (светодиод выключен), но некоторые будут высокими, как провод RX UART (светодиод включен). Когда периферийное устройство включено, большинство светодиодов должно тускнеть, так как линии будут переключаться. Работая в цикле (отключено / включено), легче увидеть разницу между on или dim.
Для UART вы можете подключить линию TX к линии RX в виде петли. Затем вы также можете подключить кабель UART к USB , а на ПК - настоящий терминал с программой, подобной RealTerm . Помимо тестирования интерфейса, это пригодится позже для другой отладки.
Для других частей кода я использую несколько светодиодов по мере необходимости, чтобы показать, что выполняются различные пути в коде. Если у вас есть UART, работающий и подключенный к ПК, вы можете посыпать свой код вызовами подпрограммы, чтобы вывести сообщение, показывающее, чего достигла программа (или использовать printf, если у вас есть стандартные библиотеки C). Но, как отмечает Владимир Краверо в комментарии ниже, это может немного замедлить ваш код (со скоростью 115 200 бод, не слишком много, поскольку время одного символа <10 мкс). Но в ISR и другом критичном по времени коде просто используйте светодиоды.
Как отмечает Аль Банди в комментарии ниже, внутрисхемные отладчики также могут быть полезны, особенно если можно установить несколько точек останова, и даже более полезны, если вы можете изменить точку останова в изменяемой области памяти. Не все отладчики имеют эту функцию.
Однако я не часто использую отладчики, если мне не нужно, например, для просмотра битов в периферийном регистре; или отследить ошибку, которую я не могу найти в результате проверки; или к элементарному анализу покрытия кода. Но в целом я люблю запускать программы с «нормальной» скоростью, поскольку обычно появляется много проблем, которых может не быть, когда программа выполняется в один шаг. Большинство моих программ часто используют прерывания, что мешает использованию отладчика.