[mw_shl_code=c,true]#include "tim4.h"
#include "led.h"
void TIM4_IT_UPDATE_Init(void)
{
CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, ENABLE);
TIM4_DeInit();//复位定时4
////128分频,自动重装载值125,16Mhz/(128*125)=1Khz
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0x7D);
TIM4_SetCounter(0x7D);
TIM4_ARRPreloadConfig(ENABLE); //自动重装
TIM4_UpdateDisableConfig(DISABLE); //运行计数器溢出更新
TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR);
TIM4_ClearFlag(TIM4_FLAG_UPDATE); //清楚更新标志位
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);//更新中断使能
enableInterrupts();
TIM4_Cmd(ENABLE);//使能定时器4
}
//#pragma vector=0x19
__interrupt void TIM4_OVR_UIF_IRQHandler(void)//对应IAP的中断地址:0x8060
{
int count=0;//每1ms进入一次中断
count++;
// GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
if(count==1000)//1s中转换一次
{
GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
}
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}[/mw_shl_code]
一直进不了中断,在线调试发现,TIM4->SR中的中断标志位UIF=1后,就一直没有被清楚,说明一直没有进中断。。。麻烦各位大侠帮忙解答一下,STM8S的资料实在是太少了。。。手册都写的很模糊。。。
---------------------------------
IAR下
//8位基本定时器初始化
void init_TIM4(void)
{
TIM4_PSCR=0x07; //f=fck/2^(PSCR)
TIM4_ARR=0x7D; //1/(8M/128)*125=2ms
TIM4_IER=0x01; //允许更新中断
TIM4_CR1=0x01; //计数器使能,开始计数
}
//TIM4 8位定时器溢出中断
#pragma vector=TIM4_OVR_UIF_vector //0x19
__interrupt void TIM4_OVR_UIF(void)
{
TIM4_SR=0;
}
一周热门 更多>