STM32F030CT86 IO中断配置及验证
一、程序初始化 并定义一个全局变量uint8_t cross_zero_flg = 0;
static void cross_zero_init(void)
{
/*PB3 cross zero gpio*/
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable GPIOC clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);//使能时钟
/* Enable SYSCFG clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Configure PB3 pins as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉输入,根据硬件设计匹配
GPIO_Init(GPIOB, &GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource3);
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上升沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable and set EXTI2_3_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_3_IRQn;//中断入口函数
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
NVIC_EnableIRQ(EXTI2_3_IRQn);//使能相应中断函数
debug_top("\r\n-----cross_zero_init-----\r\n");
}
二、中断函数处理
void EXTI2_3_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line3) != RESET) {
cross_zero_flg = 1;
EXTI_ClearITPendingBit(EXTI_Line3);// Clear the EXTI line pending bit
}
}
三、while(1)里面通过打印输出
void mmi_relate_test_real_time(void)
{
if (IS_TIMER_EVT(TIME_EVT_1024)) {
debug_top("\r\n---------teting----------\r\n");
if (cross_zero_flg){
cross_zero_flg = 0;
debug_top("\r\n000000000000000000000000000\r\n");
}
}
}
四、通过另外一个PB4 IO初始化为高电平,分别引出PB3,PB4线,PB4轻轻一碰PB3,发生中断,可在串口中查看到日志内容。