|
FM33G048是上海复旦微电子推出的一款基于Coretex-M0内核的低功耗单片机,广泛应用于水表、电表、燃气表等产品中。FM33G048单片机的最大主频为40MHz,其Flash容量为256KB,可满足大多数的产品需求。该单片机最多可以产生 24 个外部引脚中断。
触摸芯片采用台湾合泰公司的BS812-A芯片。该芯片支持2路触摸按键输入,采用SOT23-6封装。芯片的输出引脚带有内部上拉电阻,当没有检测到触摸按键输入时,该芯片输出高电平。触摸按键的输出引脚连接至FM33G048的PD7引脚(74)。
代码介绍 首先对PD7引脚进行配置,打开使能IO控制时钟寄存器: - RCC_PERCLK_SetableEx(PDCCLK, ENABLE);
复制代码设置 PD7 为浮空输入(悬浮输入): - InputtIO( KEY0_GPIO, KEY0_PIN, IN_NORMAL);
复制代码
接下来进行中断配置在技术手册26.8 外部引脚中断中,PD7引脚对应的外部引脚中断编号为EXTI1[7],NVIC 中断向量是#46,因此我们需要使能外部中断1。
首先在代码中使能 EXTI1 外部引脚中断采样时钟寄存器: - RCC_PERCLK_SetableEx(EXTI1CLK, ENABLE);
复制代码配置PD7触发方式是上升沿和下降沿两者触发。 - GPIO_EXTI_Init( KEY0_GPIO, KEY0_PIN, EXTI_BOTH);
复制代码
在4.3.1中断向量表中,可以看到外部引脚中断的向量是46,
该中断向量在代码中定义为:GPIO_IRQHandler,因此我们需要在该函数中处理GPIO中断。
在中断处理函数GPIO_IRQHandler中进行按键判断,用手触摸按键,如果按下,则 LDE 灯点亮,如果弹起,则 LED 熄灭。 - void GPIO_IRQHandler(void)
- {
- if(SET == GPIO_EXTI_EXTIxIF_ChkEx(KEY0_GPIO, KEY0_PIN))
- {
- GPIO_EXTI_EXTIxIF_ClrEx(KEY0_GPIO, KEY0_PIN);
- if(KEY0_N)
- {
- // TicksDelayMs( 5, NULL );
- if(KEY0_N)
- {
- LED0_ON;
- }
- }
-
- if(KEY0_P)
- {
- // TicksDelayMs( 5, NULL );
- if(KEY0_P)
- {
- LED0_OFF;
- }
- }
- }
- }
-
复制代码
|