Перейти к содержанию

WaL60

Members
  • Постов

    5
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Смоленск

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    микроконтроллеры, ремонт
  • Оборудование
    С1-94, Lukey 852D+FAN, DT-9205A, ТЛ-4М

Достижения WaL60

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. WaL60

    STM32F103C8T6 + ChibiOs

    Сообщаю - дело оказалось в самой плате. Когда я без всяких ОСРВ залил туда простую мигалку, светодиод просто горел. Закрались смутные сомнения и как раз прислали новую платку.
  2. WaL60

    STM32F103C8T6 + ChibiOs

    На 200 длительность паузы похожа на правду При 250 пауза ~150. При 300 пауза ~100. Переходов резких нет, как я плавно паузу увеличиваю, так она на самом деле плавно и уменьшается. ______ по таймерам нашел что. в файле chconf.h /*===========================================================================*/ /** * @name System timers settings * @{ */ /*===========================================================================*/ /** * @brief System time counter resolution. * @note Allowed values are 16 or 32 bits. */ #define CH_CFG_ST_RESOLUTION 16 /** * @brief System tick frequency. * @details Frequency of the system timer that drives the system ticks. This * setting also defines the system tick time unit. */ #define CH_CFG_ST_FREQUENCY 2000 /** * @brief Time delta constant for the tick-less mode. * @note If this value is zero then the system uses the classic * periodic tick. This value represents the minimum number * of ticks that is safe to specify in a timeout directive. * The value one is not valid, timeouts are rounded up to * this value. */ #define CH_CFG_ST_TIMEDELTA 2 /** @} */ В файле mcuconf.h /* * ST driver system settings. */ #define STM32_ST_IRQ_PRIORITY 8 #define STM32_ST_USE_TIMER 2 Изменение таймера или приоритета прерывания ничего не меняют. Изменение CH_CFG_ST_FREQUENCY кое-что дает. Например, если присвоить миллион, то при паузе 400мсек пауза верна. А при паузе 1сек реальная задержка 17-18 мсек. PS Вообще, мне не принципиально использовать чиби - просто это единственное, с чем я работал. Мне принципиально только одно - среда разработки eclipse. А там хоть все с нуля пиши. Хотя последнее не хотелось бы
  3. WaL60

    STM32F103C8T6 + ChibiOs

    chThdSleepMilliseconds это макрос, вызывающий chThdSleep(MS2ST(msec)) void chThdSleep(systime_t time) { chSysLock(); chThdSleepS(time); chSysUnlock(); } ..... typedef uint32_t systime_t; А вот с таймером я найти и разобраться не могу. 111.zip
  4. WaL60

    STM32F103C8T6 + ChibiOs

    В принципе, ничего не меняется. Если 300, то все нормально. При 350 светодиод горит уже 50мсек, а не горит - 350. При time = 400 горит уже 5 мсек. На 500 миганий не видно, на осциллограмме проскакивают "иголки" Дебаггер гоняет по всем 4 строчкам цикла while, когда светодиод мигает. Когда не мигает, то прыгает между двумя первыми строками цикла. Глубже, внутрь chThdSleepMilliseconds не лез, т.к. там мало что пойму пока
  5. WaL60

    STM32F103C8T6 + ChibiOs

    Всем привет! Итак, имею стандартную плату с данным контроллером на борту, двумя перемычками, светодиодом на 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); } то импульсов уже нет, на порту постоянная единица, изредка проскакивают плохо различимые "иголки"- просадка до нуля и сразу же единица. Где я что упускаю, подскажите?
×
×
  • Создать...