<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 【Alientek STM32 實(shí)驗2】--按鍵輸入

          【Alientek STM32 實(shí)驗2】--按鍵輸入

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          上一節(jié)介紹了STM32的IO口輸出,這一節(jié),我們將向大家介紹如何使用STM32的IO口作為輸入用。通過本節(jié)的學(xué)習(xí),你將了解到STM32的IO口作為輸入使用的方法。本節(jié)分為如下幾個小節(jié):

          3.2.1 STM32 IO口簡介

          本文引用地址:http://www.ex-cimer.com/article/201611/321132.htm

          3.2.2硬件設(shè)計

          3.2.3軟件設(shè)計

          3.2.1 STM32 IO口簡介

          STM32的IO口在上一節(jié)已經(jīng)有了詳細(xì)的介紹,這里我們不再多說。STM32的IO口做輸入使用的時候,是通過讀取IDR的內(nèi)容來讀取IO口的狀態(tài)的。了解了這點(diǎn),就可以開始我們的代碼編寫了。

          這一節(jié),我們將通過MiniSTM32板上載有的3個按鈕,來控制板上的2個LED,其中KEY0控制DS0,按一次亮,再按一次,就滅。KEY1控制DS1,效果同KEY0。KEY_2(KEY_UP),同時控制DS0和DS1,按一次,他們的狀態(tài)就翻轉(zhuǎn)一次。

          3.2.2硬件設(shè)計

          該實(shí)驗所需要的硬件電路在MiniSTM32開發(fā)板上都已經(jīng)連接好了,不需要經(jīng)過任何設(shè)置,直接編寫代碼就可。LED的連接在上一節(jié)已經(jīng)介紹過了,在MiniSTM32開發(fā)板上的按鍵KEY0是接在PA13上,KEY1是接在PA15上的,WK_UP(KEY2)接在PA0上。如下圖所示:

          按鈕新建一個文件,然后保存在HARDWARE->KEY文件夾下面,保存為key.c。在該文件中輸入如下代碼:

          #include

          #include "key.h"

          #include "delay.h"

          //Mini STM32開發(fā)板

          //按鍵輸入驅(qū)動代碼

          //正點(diǎn)原子@ALIENTEK

          //2010/5/27

          //按鍵初始化函數(shù)

          //PA0.13.15設(shè)置成輸入

          void KEY_Init(void)

          {

          RCC->APB2ENR|=1<<2;//使能PORTA時鐘

          RCC->APB2ENR|=1<<0;//開啟輔助時鐘

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

          AFIO->MAPR|=0X04000000; //關(guān)閉JTAG

          GPIOA->CRL&=0XFFFFFFF0;//PA0設(shè)置成輸入

          GPIOA->CRL|=0X00000008;

          GPIOA->CRH&=0X0F0FFFFF;//PA13,15設(shè)置成輸入

          GPIOA->CRH|=0X80800000;

          GPIOA->ODR|=1<<13;//PA13上拉,PA0默認(rèn)下拉

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

          }

          //按鍵處理函數(shù)

          //返回按鍵值

          //0,沒有任何按鍵按下

          //1,KEY0按下

          //2,KEY1按下

          //3,KEY2按下

          //注意此函數(shù)有響應(yīng)優(yōu)先級,KEY0>KEY1>KEY2!!

          u8 KEY_Scan(void)

          {

          static u8 key_up=1;//按鍵按松開標(biāo)志

          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個函數(shù),void KEY_Init(void)和u8 KEY_Scan(void),KEY_Init是用來初始化按鍵輸入的IO口的。實(shí)現(xiàn)PA0、PA13、PA15的輸入設(shè)置,這里和上一節(jié)的輸出配置不同,還有一個JTAG的禁用設(shè)置。

          JTAG的禁用,是通過AFIO的MAPR寄存器來配置的。要對復(fù)用IO口配置,必須先啟用AFIO時鐘,AFIO的時鐘使能在APB2ENR寄存器里面設(shè)置。如下句,就是使能AFIO的時鐘:

          RCC->APB2ENR|=1<<0;//開啟輔助時鐘

          在使能了AFIO時鐘之后,我們就可以對AFIO的相關(guān)寄存器進(jìn)行設(shè)置了。這里我們要關(guān)閉JTAG,與JTAG設(shè)置相關(guān)的寄存器是AFIO->MAPR寄存器。該寄存器的各位描述如下:


          圖3.2.3.2AFIO->MAPR寄存器各位描述

          其中SWJ_CFG[2:0](AFIO->MAPR[26:24])是與JTAG相關(guān)的配置寄存器位,這幾位的具體設(shè)置以及其對應(yīng)的描述如下:


          圖3.2.3.2SWJ_CFG位段設(shè)置關(guān)系

          在這里我們把JTAG和SW口全部禁用了,設(shè)置AFIO->MAPR [26:24]為100,如下:

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

          AFIO->MAPR|=0X04000000; //關(guān)閉JTAG

          以上在設(shè)置MAPR的[26:24]位的時候,我們先把這幾位清空,然后在置位這幾個位。這樣,才不會影響之前對AFIO->MAPR的設(shè)置。這一點(diǎn)在以后的寄存器配置的時候,大家一定要注意,否則,可能引起之前的配置失效!


          上一頁 1 2 下一頁

          關(guān)鍵詞: AlientekSTM32按鍵輸

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();