void CLK_HSI_Init(void)
{
CLK_CKDIVR = 0x00;
}
/*====================================================
*功能说明:初始化16位定时器2、定时周期1ms
*传入参数:无
*返回参数:无
======================================================*/
void Time2_Init(void)
{
CLK_PCKENR1 |= 0x01; //打开时钟
TIM2_IER = 0x00; // 禁止中断,停止定时器
TIM2_PSCR = 0x01; //计数器时钟=主时钟/1=16MHZ/1
TIM2_CNTRH = 0; //计数器的初值
TIM2_CNTRL = 0;
TIM2_ARRH = 0x1F; //注意必须保证先写入高8位
TIM2_ARRL = 0x60; //再写入低8 (计算值3936 = 0x1F60)
TIM2_EGR = 0x01; //允许产生更新事件
TIM2_CR1 = 0x01; //b0 = 1,允许计数器工作,b1 = 0,允许
TIM2_SR1 = 0x00; //清除TIM2溢出中断标志位
TIM2_IER = 0x01; //允许更新中断,启动定时器
}
/*====================================================
*功能说明:时钟、定时器设置
*传入参数:无
*返回参数:无
======================================================*/
void Init_UserTime(void)
{
CLK_HSI_Init();
Time2_Init();
asm("rim"); //打开所有中断
}
/*====================================================
*功能说明:定时器2中断函数
*传入参数:无
*返回参数:无
======================================================*/
#pragma vector=TIM2_OVR_UIF_vector //0x0D
__interrupt void TIM2_OVR_UIF_IRQHandler(void)
{
TIM2_SR1 = 0x00; // 清除TIM2溢出中断标志位
return;
}
int main(void)
{
Init_UserTime();
while(1);
}
使用的是STM8L052C6这款芯片,但是进不了定时中断,是为什么啊 |