您的位置 首页 国产IC

【Alientek STM32 试验2】–按键输入

上一节介绍了STM32的IO口输出,这一节,我们将向大家介绍如何使用STM32的IO口作为输入用。通过本节的学习,你将了解到STM32的IO口作为输入

上一节介绍了STM32的IO口输出,这一节,咱们将向咱们介绍怎么运用STM32的IO口作为输入用。经过本节的学习,你将了解到STM32的IO口作为输入运用的办法。本节分为如下几个末节:

3.2.1 STM32 IO口简介

3.2.2硬件规划

3.2.3软件规划

3.2.1 STM32 IO口简介

STM32的IO口在上一节现已有了详细的介绍,这儿咱们不再多说。STM32的IO口做输入运用的时分,是经过读取IDR的内容来读取IO口的状况的。了解了这点,就可以开端咱们的代码编写了。

这一节,咱们将经过MiniSTM32板上载有的3个按钮,来操控板上的2个LED,其间KEY0操控DS0,按一次亮,再按一次,就灭。KEY1操控DS1,作用同KEY0。KEY_2(KEY_UP),一起操控DS0和DS1,按一次,他们的状况就翻转一次。

3.2.2硬件规划

该实验所需求的硬件电路在MiniSTM32开发板上都现已衔接好了,不需求经过任何设置,直接编写代码就可。LED的衔接在上一节现已介绍过了,在MiniSTM32开发板上的按键KEY0是接在PA13上,KEY1是接在PA15上的,WK_UP(KEY2)接在PA0上。如下图所示:

按钮新建一个文件,然后保存在HARDWARE->KEY文件夹下面,保存为key.c。在该文件中输入如下代码:

#include

#include “key.h”

#include “delay.h”

//Mini STM32开发板

//按键输入驱动代码

//正点原子@ALIENTEK

//2010/5/27

//按键初始化函数

//PA0.13.15设置成输入

void KEY_Init(void)

{

RCC->APB2ENR|=1<<2;//使能PORTA时钟

RCC->APB2ENR|=1<<0;//敞开辅佐时钟

AFIO->MAPR&=0XF8FFFFFF; //铲除MAPR的[26:24]

AFIO->MAPR|=0X04000000; //封闭JTAG

GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入

GPIOA->CRL|=0X00000008;

GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入

GPIOA->CRH|=0X80800000;

GPIOA->ODR|=1<<13;//PA13上拉,PA0默许下拉

GPIOA->ODR|=1<<15;//PA15上拉

}

//按键处理函数

//回来按键值

//0,没有任何按键按下

//1,KEY0按下

//2,KEY1按下

//3,KEY2按下

//留意此函数有呼应优先级,KEY0>KEY1>KEY2!!

u8 KEY_Scan(void)

{

static u8 key_up=1;//按键按松开标志

if(key_up&&(KEY0==0||KEY1==0||KEY2==1))

{

delay_ms(10);//去颤动

key_up=0;

if(KEY0==0)return 1;

else if(KEY1==0)return 2;

else if(KEY2==1)return 3;

}else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;

return 0;//无按键按下

}

在段代码包含了2个函数,void KEY_Init(void)和u8 KEY_Scan(void),KEY_Init是用来初始化按键输入的IO口的。完成PA0、PA13、PA15的输入设置,这儿和上一节的输出装备不同,还有一个JTAG的禁用设置。

JTAG的禁用,是经过AFIO的MAPR寄存器来装备的。要对复用IO口装备,必须先启用AFIO时钟,AFIO的时钟使能在APB2ENR寄存器里边设置。如下句,便是使能AFIO的时钟:

RCC->APB2ENR|=1<<0;//敞开辅佐时钟

在使能了AFIO时钟之后,咱们就可以对AFIO的相关寄存器进行设置了。这儿咱们要封闭JTAG,与JTAG设置相关的寄存器是AFIO->MAPR寄存器。该寄存器的各位描绘如下:

图3.2.3.2AFIO->MAPR寄存器各位描绘

其间SWJ_CFG[2:0](AFIO->MAPR[26:24])是与JTAG相关的装备寄存器位,这几位的详细设置以及其对应的描绘如下:

图3.2.3.2SWJ_CFG位段设置联系

在这儿咱们把JTAG和SW口悉数禁用了,设置AFIO->MAPR [26:24]为100,如下:

AFIO->MAPR&=0XF8FFFFFF; //铲除MAPR的[26:24]

AFIO->MAPR|=0X04000000; //封闭JTAG

以上在设置MAPR的[26:24]位的时分,咱们先把这几位清空,然后在置位这几个位。这样,才不会影响之前对AFIO->MAPR的设置。这一点在今后的寄存器装备的时分,咱们必定要留意,不然,或许引起之前的装备失效!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/258876.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部