lvxinn2006 发表于 2019-1-18 10:28

【 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>

bjf225 发表于 2019-1-18 11:39

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

btty038 发表于 2019-1-19 10:37

这个应该好玩吧
页: [1]
查看完整版本: 【 ST NUCLEO-G071RB测评】_07_触摸按键实验