上一节介绍了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的设置。这一点在今后的寄存器装备的时分,咱们必定要留意,不然,或许引起之前的装备失效!