华大HC32L136单片机按键中断控制LED灯
HC32华大半导体小华半导体国产MCU按键中断问题
·
最近在用公司的HC32L136芯片开发项目,在做中断功能的时候,死活实现不了,最终发现,中断函数名不能乱用,必须用驱动里配置好的,如果要自定义中断名,需要配置很多东西,这个东西做了一天没做出来,今天用驱动里的函数实现了,故拿出来和大家分享经验,避免踩雷。
1.我做的是KEY按键中断功能,采用GPIO读取下降沿中断。
首先需要对KEY初始化
void Key_Init(void)
{
stc_gpio_cfg_t stcGpioCfg;
/* 使能GPIO时钟 */
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
/* 输入模式配置 */
stcGpioCfg.enDir = GpioDirIn; // 输入模式
stcGpioCfg.enPu = GpioPuEnable; // 使能上拉(默认高电平)
stcGpioCfg.enPd = GpioPdDisable; // 禁用下拉
stcGpioCfg.enOD = GpioOdDisable; //开漏输出关闭
stcGpioCfg.enCtrlMode = GpioAHB;
/* 初始化所有按键GPIO */
Gpio_Init(KEY1_PORT, KEY1_PIN, &stcGpioCfg);
/* 清除中断 */
Gpio_ClearIrq(KEY1_PORT, KEY1_PIN);
/* 配置为下降沿中断 */
Gpio_EnableIrq(KEY1_PORT, KEY1_PIN, GpioIrqFalling);
/* 使能系统中断 */
EnableNvic(PORTB_IRQn, IrqLevel3, TRUE);
}
这里需要注意换成自己的IO口,还有系统中断那里,换成自己的端口,比如你的是在PA端口,你实参需要改为:PORTA_IRQn
2.中断函数代码
void PortB_IRQHandler(void)
{
if(TRUE == Gpio_GetIrqStatus(KEY1_PORT, KEY1_PIN))
{
Gpio_ClearIrq(KEY1_PORT, KEY1_PIN);
Led_On(LED2_PORT, LED2_PIN);
delay1ms(50);
Led_Off(LED2_PORT, LED2_PIN);
}
}
按键按下,LED灯亮50ms。
重中之重:这里的函数名要用interrupts_hc32l13x.c里弱定义的函数名。

然后在 interrupts_hc32l13x.h文件里,把中断开启

大家在用华大HC32开发的时候请注意这些问题
更多推荐



所有评论(0)