2266|2

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【 ST NUCLEO-G071RB测评】_07_触摸按键实验 [复制链接]

本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!

【实验目的】
· 掌握使用GPIO中断的使用

【实验环境】
· NUCLEO-G071RB开发板
· Keil MDK-ARM(Keil uVision 5.25.2.0)
· Keil.STM32G0xx_DFP.1.0.0.pack

【实验资料】
· NUCLEO-G071RB开发板原理图
· STM32G071x8/xB Data Sheet
· STM32G071芯片用户参考手册
【实验分析
原理图:



连接如图所示,灰色线连接到电源的负极,黑色线连接到3.3V正极,白色是信号线,连接到了PC10引脚。
触摸按键模块的原理比较简单,通过电容感应,当没有感应到电容变化时,信号线会一直保持低电平,当触摸感应区域时,信号线会变成高电平。
因此,可以直接使用外部中断功能进行按键状态的判断,使用上升沿触发中断。
实验代码
  1. #include "stm32g0xx.h"                  // Device header

  2. void GPIOSetDir(GPIO_TypeDef *GPIO, int pin, int dir)
  3. {
  4.         if (dir == 0){
  5.                 GPIO->MODER        &= ~(0x3UL<<(pin * 2));
  6.                 GPIO->OTYPER &= ~(1<<pin);
  7.         }else{
  8.                 GPIO->MODER        &= ~(0x3UL<<(pin * 2));
  9.                 GPIO->MODER        |= (0x1UL<<(pin * 2));
  10.                 GPIO->OSPEEDR |= 0x3UL<<(pin * 2);
  11.                 GPIO->OTYPER &= ~(1<<pin);
  12.         }
  13. }

  14. void GPIOSetValue(GPIO_TypeDef *GPIO, int pin, int value)
  15. {
  16.         if (value == 0){
  17.                 GPIO->ODR &= ~(1<<pin);
  18.         }else{
  19.                 GPIO->ODR |= (1<<pin);
  20.         }
  21. }

  22. void GPIOSetToggle(GPIO_TypeDef *GPIO, int pin)
  23. {
  24.         GPIO->ODR ^= (1<<pin);
  25. }

  26. int GPIOGetValue(GPIO_TypeDef *GPIO, int pin)
  27. {
  28.         return GPIO->IDR & (1<<pin);
  29. }

  30. void EXTI4_15_IRQHandler(void)
  31. {
  32.         GPIOSetToggle(GPIOA, 5);
  33.         EXTI->RPR1 |= (1<<10);        //清理EXTI10中断状态
  34. }

  35. int main(void)
  36. {
  37.         //使能GPIOA的时钟
  38.         RCC->IOPENR |= RCC_IOPENR_GPIOAEN;       
  39.         //设置PA5为输出模式
  40.         GPIOSetDir(GPIOA, 5, 1);
  41.        
  42.         RCC->IOPENR |= RCC_IOPENR_GPIOCEN;        //使能GPIOC
  43.         GPIOSetDir(GPIOC, 10, 0);        //设置PC10为输入模式
  44.        
  45.         EXTI->RTSR1 |= (1<<10);        //EXTI10 上升沿触发
  46.         EXTI->EXTICR[2] &= ~(0xFF<<16);
  47.         EXTI->EXTICR[2] |= 0x2<<16;        //选择PC10为外中断源
  48.         EXTI->IMR1 |= (1<<10);        //使能EXTI10中断
  49.         NVIC_EnableIRQ(EXTI4_15_IRQn);        //使能中断
  50.        
  51.         while(1){}
  52. }

复制代码



【实验现象】

· 开发板上电当没有触摸按键时,LD4灯是熄灭的
· 每次接触触摸按键模块的感应区域时,LD4的状态会发生反转,在亮灭之间切换
  



此内容由EEWORLD论坛网友lvxinn2006原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自stm32/stm8论坛

最新回复

这个应该好玩吧  详情 回复 发表于 2019-1-19 10:37
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
通用I型F006运放组成的三角波转换成方波线路.图示线路主要是将运算放大器作为微分器的应用形式,输入一个三角波信号,输出就可得到一个方波信号.
此帖出自stm32/stm8论坛
 
 

回复

5791

帖子

44

TA的资源

版主

板凳
 
这个应该好玩吧
此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表