- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.2 按键输入实验
上一节介绍了 STM32 的 IO 口输出,这一节,我们将向大家介绍如何使用 STM32 的 IO 口
作为输入用。通过本节的学习,你将了解到 STM32 的 IO 口作为输入使用的方法。本节分为如
下几个小节:
3.2.1 STM32 IO 口简介
3.2.2 硬件设计
3.2.3 软件设计
3.2.4 仿真与下载
94
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 上。如下图所示:
图 3.2.2.1 按键与 STM32 连接原理图
这里需要注意的是 KEY0 和 KEY1 是低电平有效的,而 WK_UP 是高电平有效的,而且要
确认 WK_UP 按钮与 DS18B20 的连接是否已经断开,要先断开,否则 DS18B20 会干扰 WK_UP
按键!并且 KEY0 和 KEY1 连接在与 JTAG 相关的 IO 口上,所以在软件编写的时候要先禁用
JTAG 功能,才能把这两个 IO 口当成普通 IO 口使用。
95
3.2.3 软件设计
这里的代码设计,我们还是在之前的基础上继续编写,打开 3.1 节的 TEST 工程,然后在
HARDWARE 文件夹下新建一个 KEY 文件夹,用来存放与 KEY 相关的代码。如下图所示:
图 3.2.3.1 在 HARDWARE 下新增 KEY 文件夹
然后我们打开 USER 文件夹下的 TEST.Uv2 工程,按 按钮新建一个文件,然后保存在
HARDWARE-KEY 文件夹下面,保存为 key.c。在该文件中输入如下代码:
#include stm32f10x_lib.h
#include key.h
#include delay.h
//Mini STM32 开发板
//按键输入 驱动代码
//正点原子@ALIENTEK
//2010/5/27
//按键初始化函数
//PA0.13.15 设置成输入
void KEY_Init(void)
{
RCC-APB2ENR|=12; //使能 PORTA 时钟
RCC-APB2ENR|=10; //开启辅助时钟
AFIO-MAPR=0XF8FFFFFF; //清除 MAPR 的[26:24]
AFIO-MAPR|=0 //关闭 JTAG
GPIOA-CRL=0XFFFFFFF0;//PA0 设置成输入
96
GPIOA-CRL|=0
GPIOA-CRH=0X0F0FFFFF;//PA13,15 设置成输入
GPIOA-CRH|=0
GPIOA-ODR|=113; //PA13 上拉,PA0 默认下拉
GPIOA-ODR|=115; //PA15 上拉
}
//按键处理函数
//返回按键值
//0,没有任何按键按下
//1,KEY0 按下
//2,KEY1 按下
//3,KEY2 按下
//注意此函数有响应优先级,KEY0KEY1KEY2!!
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
if(key_up(KEY0==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==1KEY1==1KEY2==0)key_up=1;
return 0;// 无按键按下
}
在段代码包含了 2 个函数,void KEY_Init(void)和 u8 KEY_Scan(void),KEY_Init 是用来初
始化按键输入的 IO 口的。实现 PA0、PA13、PA15 的输入设置,这里和上一节的输出配置不同,
还有一个 JTAG 的禁用设
文档评论(0)