woshi_ziyu
发表于: 2023-6-14 17:58:34 | 显示全部楼层

FM33G048是上海复旦微电子推出的一款基于Coretex-M0内核的低功耗单片机,广泛应用于水表、电表、燃气表等产品中。FM33G048单片机的最大主频为40MHz,其Flash容量为256KB,可满足大多数的产品需求。该单片机最多可以产生 24 个外部引脚中断。


触摸芯片采用台湾合泰公司的BS812-A芯片。该芯片支持2路触摸按键输入,采用SOT23-6封装。芯片的输出引脚带有内部上拉电阻,当没有检测到触摸按键输入时,该芯片输出高电平。触摸按键的输出引脚连接至FM33G048的PD7引脚(74)。

CIRCUIIT.jpg


代码介绍

首先对PD7引脚进行配置,打开使能IO控制时钟寄存器:

  1. RCC_PERCLK_SetableEx(PDCCLK, ENABLE);
复制代码

设置 PD7 为浮空输入(悬浮输入):

  1. InputtIO( KEY0_GPIO, KEY0_PIN, IN_NORMAL);
复制代码

接下来进行中断配置在技术手册26.8 外部引脚中断中,PD7引脚对应的外部引脚中断编号为EXTI1[7],NVIC 中断向量是#46,因此我们需要使能外部中断1。

PD7.jpg


首先在代码中使能 EXTI1 外部引脚中断采样时钟寄存器:

  1. RCC_PERCLK_SetableEx(EXTI1CLK, ENABLE);
复制代码

配置PD7触发方式是上升沿和下降沿两者触发。

  1. GPIO_EXTI_Init( KEY0_GPIO, KEY0_PIN, EXTI_BOTH);
复制代码

在4.3.1中断向量表中,可以看到外部引脚中断的向量是46,

NVIC.jpg

该中断向量在代码中定义为:GPIO_IRQHandler,因此我们需要在该函数中处理GPIO中断。


在中断处理函数GPIO_IRQHandler中进行按键判断,用手触摸按键,如果按下,则 LDE 灯点亮,如果弹起,则 LED 熄灭。

  1. void GPIO_IRQHandler(void)
  2. {
  3.         if(SET == GPIO_EXTI_EXTIxIF_ChkEx(KEY0_GPIO, KEY0_PIN))
  4.         {
  5.                 GPIO_EXTI_EXTIxIF_ClrEx(KEY0_GPIO, KEY0_PIN);
  6.                 if(KEY0_N)
  7.                 {
  8. //                      TicksDelayMs( 5, NULL );
  9.                         if(KEY0_N)
  10.                         {
  11.                                 LED0_ON;
  12.                         }
  13.                 }
  14.                
  15.                 if(KEY0_P)
  16.                 {
  17. //                      TicksDelayMs( 5, NULL );
  18.                         if(KEY0_P)
  19.                         {
  20.                                 LED0_OFF;
  21.                         }
  22.                 }
  23.         }
  24. }
  25.         
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 3 | 回复: 3



手机版|

GMT+8, 2024-4-13 17:05 , Processed in 0.134793 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表