<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

3.2.1 STM32 IO口簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/201611/321132.htm

3.2.2硬件設計

3.2.3軟件設計

3.2.1 STM32 IO口簡(jiǎn)介

STM32的IO口在上一節已經(jīng)有了詳細的介紹,這里我們不再多說(shuō)。STM32的IO口做輸入使用的時(shí)候,是通過(guò)讀取IDR的內容來(lái)讀取IO口的狀態(tài)的。了解了這點(diǎn),就可以開(kāi)始我們的代碼編寫(xiě)了。

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

3.2.2硬件設計

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

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

#include

#include "key.h"

#include "delay.h"

//Mini STM32開(kāi)發(fā)板

//按鍵輸入驅動(dòng)代碼

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

//2010/5/27

//按鍵初始化函數

//PA0.13.15設置成輸入

void KEY_Init(void)

{

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

RCC->APB2ENR|=1<<0;//開(kāi)啟輔助時(shí)鐘

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

AFIO->MAPR|=0X04000000; //關(guān)閉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,沒(méi)有任何按鍵按下

//1,KEY0按下

//2,KEY1按下

//3,KEY2按下

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

u8 KEY_Scan(void)

{

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

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

{

delay_ms(10);//去抖動(dòng)

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;//無(wú)按鍵按下

}

在段代碼包含了2個(gè)函數,void KEY_Init(void)和u8 KEY_Scan(void),KEY_Init是用來(lái)初始化按鍵輸入的IO口的。實(shí)現PA0、PA13、PA15的輸入設置,這里和上一節的輸出配置不同,還有一個(gè)JTAG的禁用設置。

JTAG的禁用,是通過(guò)AFIO的MAPR寄存器來(lái)配置的。要對復用IO口配置,必須先啟用AFIO時(shí)鐘,AFIO的時(shí)鐘使能在A(yíng)PB2ENR寄存器里面設置。如下句,就是使能AFIO的時(shí)鐘:

RCC->APB2ENR|=1<<0;//開(kāi)啟輔助時(shí)鐘

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


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

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


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

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

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

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

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


上一頁(yè) 1 2 下一頁(yè)

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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>