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);
}