stm32按键输入实验.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

137****0427 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档