STM8中没有系统嘀嗒计时器,所以用timer实现系统嘀嗒计时器的功能,每1ms产生一个中断。本次使用的是高速内部时钟,时钟频率是2Mhz
1. timer.c
#include "timer.h"
void systic_init(void) // TIMER2_CH1 -> PB0
{
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE); // 使能时钟
TIM2_DeInit(); // 恢复寄存器到默认值
TIM2_TimeBaseInit(TIM2_Prescaler_2, TIM2_CounterMode_Up, 1000); // 2Mhz/2*1000
TIM2_ITConfig(TIM2_IT_Update, ENABLE); // 中断处理函数要清除中断,并jiffers自加1
TIM2_ARRPreloadConfig(ENABLE); // 自动加载
//TIM2_SetCounter();
TIM2_Cmd(ENABLE); // 使能TIM2
enableInterrupts(); // 使能全局中断
}
2. timer.h
#ifndef _TIMER_H_
#define _TIMER_H_
void systic_init(void);
#endif /* timer.h */
3. 中断处理函数
在中断处理函数中将定义的变量自加1
extern volatile long long int my_TickCounter;
INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_USART2_TX_IRQHandler,19)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
my_TickCounter++;
TIM2_ClearITPendingBit(TIM2_IT_Update); // 清中断
}