|
刚开始玩STM32,遇到一个问题,定时器做外部计数器用的时候没起作用。。。
while(1)
{
delay_ms(100);
CTR_Write_Config(Test_Address,CTR_Cap_Ceramic); //打开通道
CTR_Write_Config(COM_Address, CTR_Cap_TIM&CTR_L_GND); //打开振荡频率计数器,电感端接地
CTR_Write_Config(Power_Address,CTR_Lo_GND); //测试电容另一端接地
delay_us(100);
TIM2_Count_Init(5000,2);//TIM2初始化
TIM2_ON();//打开TIM2
while(1);
}
void TIM2_Count_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
GPIO_InitTypeDef GPIO_InitStructuer;
TIM_DeInit(TIM2); //初始化TIM2
RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //①时钟 TIM2 使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//定时器 TIM2 初始化
GPIO_InitStructuer.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructuer.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructuer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructuer);
TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //②初始化 TIM2
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0);//不使用采样滤波 外部时钟模式2
}
void TIM2_ON(void)
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位,避免第一次自动进入中断一次
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //③允许更新中断
TIM_SetCounter(TIM2,0);//设置计数初值
//中断优先级 NVIC 设置
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM8 中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 1 级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器
TIM_Cmd(TIM2, ENABLE); //⑤使能 TIM8
}
void TIM2_IRQHandler(void) //TIM2计数器中断
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查TIM2更新中断发生与否
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIMx更新中断标志
Register_over_count ++; //脉冲溢出计数
LED1 = ~LED1;
}
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除TIMx更新中断标志
}
计数器程序参考的网上的,结果计数器完全没进过中断,PA0口的示波器信号量了没有问题。
|
|