ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
578565 Топик полностью
Vit (08.02.2015 13:46, просмотров: 130) ответил Лагунов на я (сам) пока на Си научился писать только if-else. :-) Всё остальное - правка заготовок из примеров STM32Discover. Мне бы хоть какую-то рыбу по части обслуживания прерываний по таймеру (там можно индикацию). Да еще работа с массивами (анализ
Пару советов В Cortex-M перечень (имен)функций обработчиков прерывания можно найти в startup.S. Эти функции имеют атрибут weak - "слабый", и вместо тел функций обработчиков проложены заглушки. Для задействования своего обработчика достаточно написать в любом *.c файле, включенном в проект, своей функции с тем же именем - компилятор зацепит её - она без атрибута weak. В Cortex-M завсегда есть в ядре SysTick таймер. Для его использования нужно выполнить SysTick_Config() и написать свой обработчик SysTick_Handler. Обычно делаю примерно так: unsigned long SysTickCounter; void SysTick_Handler(void){ SysTickCounter++; // здесь, например, вставляем свои таймерные прибамбахи типо индикации } unsigned long clock(void){ return SysTickCounter; } unsigned long clock_Elapsed(unsigned long start){ return clock() - start; //вычитание беззнаковых - если clock() < start, результат в эквиваленте даст clock() + ~0UL - start, т.е. start - clock() } int main(void){ SystemCoreClockUpdate();//в STM32 при работе от кварца значение SystemCoreClock пересчитывается из константы HSE_Value SysTick_Config(SystemCoreClock/1000);//1 ms; для 100 мкс SystemCoreClock/10000, для 10 мс - SystemCoreClock/100 ... unsigned long ts; do{ ts = clock(); LED_toggle();//тут придётся потрудиться:) написать мигалку while(clock_Elapsed(ts) < 100){//delay 100 ms ;//здесь тоже можно заняться чем-то полезным } }while(1); }