初中生
最后登录1970-1-1
在线时间 小时
注册时间2019-4-3
|
求助 使用定时器计数时 为啥我初始化定时器 使能了溢出中断后,板子复位后会立即进入溢出中断函数[mw_shl_code=c,true]static void TIM_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// 开启TIMx_CLK,x[1,8]
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CLK, ENABLE);
//初始化高级定时器寄存器的值
TIM_DeInit(ADVANCE_TIM);
/* 累计 TIM_Period个后产生一个更新或者中断*/
//当定时器从0计数到1023,即为1024次,为一个定时周期
TIM_TimeBaseStructure.TIM_Period = 50000-1;
// 高级控制定时器时钟源TIMxCLK = HCLK=180MHz
// 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=100000Hz //计数一次用1/100000 S
TIM_TimeBaseStructure.TIM_Prescaler = 18000-1;
// 采样时钟分频
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
// 计数方式
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
// 重复计数器
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定时器TIMx, x[1,8]
TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);
TIM_SelectSlaveMode(ADVANCE_TIM, TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(ADVANCE_TIM,TIM_MasterSlaveMode_Enable);
//使能定时器溢出中断请求
TIM_ITConfig(ADVANCE_TIM, TIM_IT_Update, ENABLE);
TIM_ClearITPendingBit( ADVANCE_TIM, TIM_IT_Update);
}
static void TIMx_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
// 设置中断组为0
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
// 设置中断来源
NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
// 设置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// 设置子优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// 使能定时器
TIM_Cmd(ADVANCE_TIM, ENABLE);
}
void TIM8_UP_TIM13_IRQHandler(void)
{
printf( " 计数值:%d \n", ADVANCE_TIM->CNT );
LED2_OFF;
Delay(0xfffff);
TIM_ClearITPendingBit( ADVANCE_TIM, TIM_IT_Update);
}[/mw_shl_code]
当我初始化定时器的时候改变定时器计数值为1 烧程序进去后 串口会打印计数值为1 说明一复位就会进入溢出中断 这是为什么呢?不是计数到49999才会溢出吗?
|
|