本帖最后由 ymy1989 于 2016-5-31 14:23 编辑
想用PF8这个引脚设为外部中断记录脉冲个数,我配置的是下降沿触发中断,然后在中断里脉冲个数加1,然后主函数循环把脉冲个数显示在液晶上。但为什么记录的脉冲数总是真实个数的2倍呢?
附代码:
extern long s;
//外部中断初始化程序
//初始化PF8为中断输入.
void EXTIX_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//上拉
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIOF8
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOF, EXTI_PinSource8);//PF8 连接到中断线8
/* 配置EXTI_Line8 */
EXTI_InitStructure.EXTI_Line = EXTI_Line8;//LINE8
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//使能LINE8
EXTI_Init(&EXTI_InitStructure);//配置
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn ;//外部中断8
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;//子优先级1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);//配置
}
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line8) != RESET) //判断中断发生线
{
EXTI_ClearITPendingBit(EXTI_Line8); //清除LINE8上的中断标志位
s++; //脉冲计数+1
}
}
主函数
long s; 定义脉冲总个数
int main(void)
{
u8 tbuf[40];//设置一个显示到液晶的字符数组,放的是转换成字符串的s(脉冲总个数)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
EXTIX_Init(); //初始化LED
LCD_Init(); //初始化LCD FSMC接口
while(1)
{
LCD_Clear(RED);
POINT_COLOR=WHITE;
sprintf((char*)tbuf,"%ld",s); //把脉冲总个数转换为字符串
LCD_ShowString(30,40,210,24,24,tbuf); //把脉冲总个数显示到液晶上
delay_ms(1000);
}
}
为什么每次S的值永远都是真实脉冲个数的两倍呢?哪里配置错了呢?
已验证脉冲发生器(图1)是没问题的,用了十几年的东西,但为什么外部中断的计数总是脉冲数的2倍呢?(图2)
还有我设置成上升下降沿触发,记录的脉冲数依然是2倍,这个倒是对的,但为什么设置上升沿或者下降沿,也是2倍呢?
补充内容 (2016-6-18 11:07):
已解决!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>