Всем привет!
Итак, имею стандартную плату с данным контроллером на борту, двумя перемычками, светодиодом на PC13 и кнопкой ресета.
Пытаюсь поморгать светодиодом, используя ChibiOs.
С чем бьюсь второй день - что-то не так со временем. Попробовал несколько разных версий чиби, изначально юзал демку RT-STM32F103-MAPLEMINI, перебив порт в треде мигалки, затем на форуме ChibiOs скачал демку под плату BluePill, но подозреваю, что это не столь важно, так как результат один:
сейчас в main.c следующий код:
#include "hal.h"
#include "ch.h"
int main(void) {
halInit();
chSysInit();
uint8_t time = 100;
while(1) {
palSetPad(GPIOC, GPIOC_LED);
chThdSleepMilliseconds(time);
palClearPad(GPIOC, GPIOC_LED);
chThdSleepMilliseconds(time);
}
return 0;
}
Он отлично выполняется, частота мигания верна ( смотрю осциллографом на выходе)
Начинаю занижать частоту мигания, теперь у меня
uint8_t time = 300;
А на осциллографе наоборот уменьшается. Длительность паузы получается 45мсек.
Дальше - еще интереснее. если
uint8_t time = 500;
то импульсы есть, но частота опять не верна. а если
while(1) {
palSetPad(GPIOC, GPIOC_LED);
chThdSleepMilliseconds(500);
palClearPad(GPIOC, GPIOC_LED);
chThdSleepMilliseconds(500);
}
то импульсов уже нет, на порту постоянная единица, изредка проскакивают плохо различимые "иголки"- просадка до нуля и сразу же единица.
Где я что упускаю, подскажите?