初级会员

- 积分
- 172
- 金钱
- 172
- 注册时间
- 2016-2-21
- 在线时间
- 41 小时
|
1金钱
想要测10kHz方波的周期,利用的方法是,定义一个全局变量b,在外部中断(下降沿触发)中执行b++,同时,定时器定时100ms,100ms之后,打印出b的值,再将b清零,那么照理说,方波的周期应该是T=100/(b-1),我的程序就是打印b的值,可打印出的结果都是b=0,没有进外部中断,是怎么回事。有没有好一点的计算方波频率的方法。
外部中断的程序如下:
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟
KEY_Init();//初始化PA14
//GPIOA.14 中断线以及中断初始化配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource14);
EXTI_InitStructure.EXTI_Line=EXTI_Line14;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //使能按键所在的外部中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2,
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
NVIC_Init(&NVIC_InitStructure);
}
u16 b=0;
void EXTI15_10_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line14)!=RESET){
LED0=!LED0;
//delay_us(5); //消抖
b++;
EXTI_ClearITPendingBit(EXTI_Line14); //清除LINE14线路挂起位}
}
}
|
|