【 ST NUCLEO-G071RB测评】_07_触摸按键实验
<div class='showpostmsg'>本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32G0/family/81/sub_family/261/layout/product【实验目的】· 掌握使用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引脚。触摸按键模块的原理比较简单,通过电容感应,当没有感应到电容变化时,信号线会一直保持低电平,当触摸感应区域时,信号线会变成高电平。因此,可以直接使用外部中断功能进行按键状态的判断,使用上升沿触发中断。 【实验代码】#include "stm32g0xx.h" // Device header
void GPIOSetDir(GPIO_TypeDef *GPIO, int pin, int dir)
{
if (dir == 0){
GPIO->MODER &= ~(0x3UL<<(pin * 2));
GPIO->OTYPER &= ~(1<<pin);
}else{
GPIO->MODER &= ~(0x3UL<<(pin * 2));
GPIO->MODER |= (0x1UL<<(pin * 2));
GPIO->OSPEEDR |= 0x3UL<<(pin * 2);
GPIO->OTYPER &= ~(1<<pin);
}
}
void GPIOSetValue(GPIO_TypeDef *GPIO, int pin, int value)
{
if (value == 0){
GPIO->ODR &= ~(1<<pin);
}else{
GPIO->ODR |= (1<<pin);
}
}
void GPIOSetToggle(GPIO_TypeDef *GPIO, int pin)
{
GPIO->ODR ^= (1<<pin);
}
int GPIOGetValue(GPIO_TypeDef *GPIO, int pin)
{
return GPIO->IDR & (1<<pin);
}
void EXTI4_15_IRQHandler(void)
{
GPIOSetToggle(GPIOA, 5);
EXTI->RPR1 |= (1<<10); //清理EXTI10中断状态
}
int main(void)
{
//使能GPIOA的时钟
RCC->IOPENR |= RCC_IOPENR_GPIOAEN;
//设置PA5为输出模式
GPIOSetDir(GPIOA, 5, 1);
RCC->IOPENR |= RCC_IOPENR_GPIOCEN; //使能GPIOC
GPIOSetDir(GPIOC, 10, 0); //设置PC10为输入模式
EXTI->RTSR1 |= (1<<10); //EXTI10 上升沿触发
EXTI->EXTICR &= ~(0xFF<<16);
EXTI->EXTICR |= 0x2<<16; //选择PC10为外中断源
EXTI->IMR1 |= (1<<10); //使能EXTI10中断
NVIC_EnableIRQ(EXTI4_15_IRQn); //使能中断
while(1){}
}
【实验现象】
· 开发板上电当没有触摸按键时,LD4灯是熄灭的· 每次接触触摸按键模块的感应区域时,LD4的状态会发生反转,在亮灭之间切换
此内容由EEWORLD论坛网友lvxinn2006原创,如需转载或用于商业用途需征得作者同意并注明出处
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 通用I型F006运放组成的三角波转换成方波线路.图示线路主要是将运算放大器作为微分器的应用形式,输入一个三角波信号,输出就可得到一个方波信号. 这个应该好玩吧
页:
[1]