【GD32L233C-START评测】12、按键——外部中断
[复制链接]
本帖最后由 freeelectron 于 2022-2-7 13:02 编辑
相关文章:
【GD32L233C-START评测】1、优点与缺点都很明显的GD32L233C-START(开箱)
【GD32L233C-START评测】2、非阻塞方式点灯,blink,blink,blink……
【GD32L233C-START评测】3、pwm实现呼吸灯
【GD32L233C-START评测】4、串口不定长数据接收
【GD32L233C-START评测】5、Flash读写——使用内部Flash存储数据
【GD32L233C-START评测】6、硬件I2C驱动0.96吋OLED
【GD32L233C-START评测】7、硬件SPI1驱动RC522
【GD32L233C-START评测】8、获取MCU96位唯一ID、SRAM、FLASH大小
【GD32L233C-START评测】9、IAP程序升级——基于YMODEM协议
【GD32L233C-START评测】10、使用内部参考电压校准adc,adc采样更准确
【GD32L233C-START评测】11、GD32 ISP软件还不支持GD32L233
1、硬件连接
可以看出,PA0通过R29下拉到GND,按键按下时, PA0的电压为3.3V,没有按下时,PA0的电压为0V,因此可以通过判断上升沿,判断按键是否按下。
2、中断优先级
可以看出只有2位,4个优先等级,而且不分先占、次占优先级,这与cortex m3还是区别比较大的。
3、中断线
可以看出PA0 / PB0 / PC0 / PD0 / PF0对应一个中断线,即就是这几个如果要用到外部中断,同一时刻只能有一个。
4、中断函数
查看startup_gd32l23x.s文件,发现外部IO中断只有7个中断函数,分别是:
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI5_9_IRQHandler
EXTI10_15_IRQHandler
从这里也可以看出,PX5-PX9,对应一个中断函数,PX10-PX15,对应一个中断函数,需要在中断函数中判断,具体是哪个中断源。
5、代码实现
static uint8_t KeyState=0;
void KeyInit(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
/* enable the SYSCFG clock */
rcu_periph_clock_enable(RCU_SYSCFG);
/* enable and set key EXTI interrupt to the specified priority */
nvic_irq_enable(EXTI0_IRQn, 2U);
/* connect key EXTI line to key GPIO pin */
syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);
/* configure key EXTI line */
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_interrupt_flag_clear(EXTI_0);
}
void KeyPolling(void)
{
if(KeyState)
{
KeyState=0;
printf("key press\r\n");
}
}
void EXTI0_IRQHandler(void)
{
if(RESET != exti_interrupt_flag_get(EXTI_0)) {
exti_interrupt_flag_clear(EXTI_0);
KeyState=1;
}
}
6、现象
|