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); // 清中斷
}