国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年07月21日(星期一)

2018年07月21日 | STM32學習之路-按鍵中斷測試(外部中斷)

發(fā)布者:JoyfulExplorer 來源: eefocus關(guān)鍵字:STM32  按鍵中斷測試  外部中斷 手機看文章 掃描二維碼
隨時隨地手機看文章

終于有時間再來學習STM32了~ 這幾天都在忙著該死的考試.直接進入正題

開發(fā)板:奮斗V5


這個按鍵中斷測試的要求是:按鍵2(K2)按下,LED2(V7)亮, 再一次按下就滅,循環(huán)..

好,先看看按鍵和LED的原理圖

 

好吧~ 雖然圖截得不是很好看,但是能看到K2接的是PC2, LED2接的是PD6

ok,剩下的就是配置工作了.. 先來理一理思路:

(1)初始化系統(tǒng)時鐘

(2)初始化外部時鐘(你所用到的東西)

(3)配置LED

(4)配置中斷優(yōu)先級

(5)配置外部中斷線

(6)中斷處理函數(shù)

恩,差不多就是這樣了..

然后再來一條一條的看:(1)和(2)都屬于RCC配置,可以放在一個功能模塊里面:


void RCC_Config(void)

{

SystemInit(); //系統(tǒng)時鐘初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB

| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD 

| RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF

| RCC_APB2Periph_GPIOG, ENABLE);

}

當然, 我們可以不用加SystemInit();這個函數(shù)也沒事.原因是startup_stm32f10x_hd.s這個文件已經(jīng)在幫我們干了這些事情了.. 它具體是怎么弄的,還有一些其它東西,目前還沒

去研究過,下次再研究看看.


(3)LED配置


void LED_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

 

/*led config*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);

 

}

LED的配置前面應(yīng)該已經(jīng)記錄了,所以這里就不弄了

(4)配置中斷優(yōu)先級和(5)配置外部中斷線,這兩個我選擇放在一個模塊,因為都是和中斷有關(guān)系的嘛


void EXTI_PC2_Config(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

 

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

 

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

 

/* key for exti */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOC, &GPIO_InitStructure);

 

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource2);

 

EXTI_InitStructure.EXTI_Line = EXTI_Line2;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

 

}

這也沒什么好解釋的了,前面的文章已經(jīng)解釋了

(6)中斷處理函數(shù)


這家伙推薦在stm32f10x_it.c里面寫,因為那里有命名的模版,跟著官方走,錯不了


void EXTI2_IRQHandler(void)

{

if (EXTI_GetITStatus(EXTI_Line2) != RESET) //判斷按鍵是否按下

{

//LED取反

GPIO_WriteBit(GPIOD, GPIO_Pin_6,

(BitAction)((1-GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_6))));

 

EXTI_ClearITPendingBit(EXTI_Line2); //清除中斷標志位

}

}

這里要注意的就是前面EXTIx這里的數(shù)字問題了,1-4沒什么問題,5-9就要稍微注意下.如果是應(yīng)該是這樣,它應(yīng)該是EXTI9_5_IRQHandler

這兒我有個問題,為什么沒看到外部中斷6呢,也就是EXTI6或7,8這些單獨的呢.. 原因可能是5-9他們都使用了同一個中斷向量表,這個話我印象中好像在哪兒看過


好,到這里基本功能就完成了.. 現(xiàn)象是可以出了.但是會有個問題就是有時候按一些按鍵,LED等會沒反應(yīng)或者亮滅幾下.. 這就是按鍵抖動的問題了;


好,接下來說說怎么削抖:


這里說軟件消抖,硬件就不說了.. 傳說中的抖動出現(xiàn)的原因就是你的手速不夠快,使中斷觸發(fā)了一次以上.. 我想如果你以20年到30年的專業(yè)單身手速(右手哦)來按的話


肯定沒這個問題..哈哈..好,直接上代碼..借鑒人家的:


用下面這個方法,就要調(diào)整前面的代碼了.


void KEY_DEL(void)

{

num = 0;

if (_keyon == 1) //按鍵是否按下,在中斷處理函數(shù)中

{

if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0)

{

Delay(0x3ffff);//延遲,為的是讓你的手速能跟上

if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0) //按鍵是否抖動

{

while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == 0); //是否松開

num = 1;

goto n_exit;

}

}

}

n_exit:;

_keyon = 0;

}

void EXTI2_IRQHandler(void)

{

if (EXTI_GetITStatus(EXTI_Line2) != RESET)

{

_keyon = 1;//按鍵按下標志

 

EXTI_ClearITPendingBit(EXTI_Line2);

}

}

#include "misc.h"

#include "stm32f10x_gpio.h"

#include "stm32f10x_exti.h"

#include "stm32f10x_rcc.h"

#include "system_stm32f10x.h"

 

#define LED_ON GPIO_SetBits(GPIOD, GPIO_Pin_6);

 

void LED_Config(void);

void EXTI_PC2_Config(void);

void RCC_Config(void);

void KEY_DEL(void);

void Delay(u32 times);

 

unsigned char _keyon = 0, num = 0;

 

int main(void)

{

unsigned char a = 0;

RCC_Config();

LED_Config();

EXTI_PC2_Config();

 

LED_ON;

 

while(1)

{

KEY_DEL();

if (num == 1 && a == 0)

{

GPIO_ResetBits(GPIOD, GPIO_Pin_6);

a = 1;

}

else if(num == 1 && a == 1)

{

GPIO_SetBits(GPIOD, GPIO_Pin_6);

a = 0;

}

}

 

}


關(guān)鍵字:STM32  按鍵中斷測試  外部中斷 引用地址:STM32學習之路-按鍵中斷測試(外部中斷)

上一篇:STM32(二)之GPIO操作(2)——通過按鍵控制LED燈的開關(guān)
下一篇:STM32實戰(zhàn)1:按鍵點亮LED小燈

推薦閱讀

首先是led頭文件,其中調(diào)用的一些庫是原子的我只是借鑒一下 侵刪#ifndef __LED_H#define __LED_H #include "sys.h" #define LED PCout(13) // PA8 void LED1_Init(void);//3?ê??ˉ #endifled的c文件#include "led.h" //初始化PB5和PE5為輸出口.并使能這兩個口的時鐘 //LED IO初始化void LED1_Init(void){ GPIO_Ini...
對于美的、格力、碧桂園、哇哈哈、富士康等行業(yè)龍頭而言,在其自身的存量市場難以突破的情況下,紛紛進攻機器人增量市場,以尋求快速突進。 這些行業(yè)龍頭的跨界有著異曲同工之妙,一方面為了推動自身傳統(tǒng)業(yè)務(wù)的提效增速,為行業(yè)升級而跨界;另一方面都是在開拓自身的多元化業(yè)務(wù),為搶占新的發(fā)展高地而跨界。 從應(yīng)用機器人到制造機器人 “飲料巨頭”...
工業(yè)機器人被譽為“制造業(yè)皇冠上的明珠”,是帶動產(chǎn)業(yè)轉(zhuǎn)型升級的強勁動力,同時也是提升國家實力與競爭力的關(guān)鍵所在。近年來,在人口紅利不斷消散、自動化需求日益增強的背景下,同時隨著人工智能、、工業(yè)互聯(lián)等新技術(shù)的應(yīng)用,工業(yè)機器人的應(yīng)用場景和市場規(guī)模迅速擴張,發(fā)展前景一片藍海。 一、工業(yè)機器人行業(yè)拐點已現(xiàn),疫情不改復(fù)蘇趨勢 5 月份工業(yè)...
2021年7月8日 - Cerence Inc.(NASDAQ: CRNC),AI for a world in motion,與 Visteon Corporation(NASDAQ: VC)共同宣布, 偉世通獲一家領(lǐng)先摩托車生產(chǎn)商近期選定的SmartCore?產(chǎn)品,將整合Cerence賽輪思的對話式人工智能。偉世通(Visteon)是汽車電子領(lǐng)域的科技領(lǐng)導(dǎo)者,致力于創(chuàng)造更愉快、互聯(lián)和安全的駕駛體驗。該產(chǎn)品將集成Cerence?核心技...

史海拾趣

問答坊 | AI 解惑

畢業(yè)設(shè)計題目大觀

come on! 貼上自己的題目! 寫出要求,大家也能相互比較一下,看看每年畢業(yè)設(shè)計的變化!…

查看全部問答∨

求助:地線斷開,輸出為零》

請問各位大俠,我現(xiàn)在有個問題:我有個正負12V電源供電傳感器,還有一根地線和一根信號線,要求當斷開電源線,地線其中的任何一根時要求輸出為小于等于零,怎么做呢?大家有什么方案,討論一下啦?…

查看全部問答∨

wince console 疑問

請問windows mobile 6.0或者windows CE 5.0 下有微軟自帶的console driver嗎?這部分在源代碼的哪個地方呢?謝謝…

查看全部問答∨

WINCE SOCKET 編程如何設(shè)置超時

請問一下,在WINCE下,使用SOCKET編程怎么樣設(shè)置超時, 使用: ::setsockopt(m_Socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR 則返回錯誤代碼 10038 使用 select 返回一樣的錯誤代碼。 struct timeval time ...…

查看全部問答∨

請問編CE串口攝像頭所需的硬件知識?

要編一個CE流驅(qū)動的串口的攝像頭驅(qū)動,但我對硬件這方面沒有概念,我需要了解串口的哪些硬件知識呢?還有攝像頭的硬件知識從哪能獲得呢?如何將這些硬件的設(shè)置過渡到軟件上呢? 請好心人能給點提示好嗎?非常感謝你們了~~…

查看全部問答∨

原因分析:鍵入的信息沒有顯示在超級終端上

原因:終端屏幕顯示的信息是來自遠程計算機所發(fā)送的,而不是已輸入到本地計算機上的信息。為了查看所鍵入的信息,遠程計算機必須可反饋輸入信息。這可能會在輸入信息與終端屏幕顯示信息之間存在時間滯后的問題。解決方案:請確保與遠程計算機正確連 ...…

查看全部問答∨

EEWORLD真是好地方,簡直是TI M3 - Stellaris的基地呀~

EEWORLD真是好地方,簡直是TI M3 - Stellaris的基地呀~。感謝EEWORLD的努力,讓這么多人學會了使用LM3S系列ARM,今天搜了下百度和谷歌,關(guān)于TI M3 - Stellaris的原創(chuàng)資料基本都是出自EEWORLD。TI公司對于EEWORLD的推廣應(yīng)該大力支持~~~~,大家以后有 ...…

查看全部問答∨

基于fpga的cpu設(shè)計

老師在學校申請個《基于fpga的cpu設(shè)計》的項目,我自己也沒什么頭緒,我是個剛學fpga不久的菜鳥,我用的是altera公司的clone2系列芯片的開發(fā)板,也就是我之前推薦給大家的黑金fpga,不知道各位有大俠對此項目什么好的建議或者寶貴意見,小弟希望做 ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved