日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年07月23日(星期三)

2021年07月23日 | 【STM32Cube_05】使用EXIT中斷檢測按鍵

發(fā)布者:靜心悠然 來源: eefocus關(guān)鍵字:STM32Cube  EXIT  NVIC配置  HAL庫  中斷處理機(jī)制 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

1. 準(zhǔn)備工作

硬件準(zhǔn)備

首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是STM32L4的開發(fā)板(BearPi):
mark

軟件準(zhǔn)備

需要安裝好Keil - MDK及芯片對應(yīng)的包,以便編譯和下載生成的代碼。

Keil MDK和串口助手Serial Port Utility 的安裝包都可以在文末關(guān)注公眾號獲取,回復(fù)關(guān)鍵字獲取相應(yīng)的安裝包:

2.生成MDK工程

選擇芯片型號

打開STM32CubeMX,打開MCU選擇器:

搜索并選中芯片STM32L431RCT6:

配置時鐘源

  • 如果選擇使用外部高速時鐘(HSE),則需要在System Core中配置RCC;

  • 如果使用默認(rèn)內(nèi)部時鐘(HSI),這一步可以略過;

這里我都使用外部時鐘:

配置LED的GPIO引腳

查看小熊派開發(fā)板的原理圖,如下:

mark

所以接下來我們選擇配置PC13引腳:

mark

設(shè)置用戶標(biāo)簽為LED:

mark

配置GPIO引腳為外部中斷引腳

在原理圖上如下:
=
所以接下來我們選擇配置PB2引腳和PB3引腳為外部中斷觸發(fā)引腳:

因為沒有設(shè)置硬件上拉,所以我們配置開啟上拉電阻,并設(shè)置用戶標(biāo)簽為KEY1和KEY2,接下來是最重要的一步:

  • 開啟下降沿觸發(fā)中斷:即在按下按鍵時電平由高變?yōu)榈蜁r觸發(fā)

  • 開啟上升沿觸發(fā)中斷:即在按下按鍵后松開時電平由低變?yōu)楦邥r觸發(fā)

  • 開啟下降沿上升沿都觸發(fā)中斷:即在按下時觸發(fā),松開時再次觸發(fā)

這里我選擇開啟下降沿觸發(fā)中斷:

配置NVIC設(shè)置中斷優(yōu)先級

知識小卡片 —— NVIC

NVIC全稱Nested vectored interrupt controller,即嵌套向量中斷控制器,用來決定中斷的優(yōu)先級。

NVIC在 ARM Conrtex-M 內(nèi)核中,用一個 8 位的寄存器來配置,總共可以配置 2 8 = 256 2^8=256 28=256級中斷,但是 ST 公司在生產(chǎn) STM32 的時候,發(fā)現(xiàn)一個小小的單片機(jī)根本用不了這么多,純屬浪費(fèi),所以將該寄存器的低 4 位全部置0,只使用高 4 位來配置,這樣一來 STM32 就只有 2 4 = 16 2^4=16 24=16級中斷啦。

簡化為16級中斷后,ST發(fā)現(xiàn) STM32 內(nèi)部這么豐富的外設(shè),還是不方便配置,干脆人工給這4位來個分組,劃分出了5個分組:

優(yōu)先級分組搶占優(yōu)先級占的位數(shù)子優(yōu)先級占的位數(shù)
NVIC_PriorityGroup_00 bit4 bit
NVIC_PriorityGroup_11 bit3 bit
NVIC_PriorityGroup_22 bit2 bit
NVIC_PriorityGroup_33 bit1 bit
NVIC_PriorityGroup_44 bit0 bit

再次強(qiáng)調(diào)一下,這5種中斷分組規(guī)則是人為的,用哪種規(guī)則,之后設(shè)置具體的優(yōu)先級時對應(yīng)就行,STM32默認(rèn)使用的規(guī)則是 NVIC_PriorityGroup_0 。

STM32 的CPU判斷優(yōu)先級的方法如下:

  • 先判斷搶占優(yōu)先級,數(shù)字越小,優(yōu)先級越高;

  • 若搶占優(yōu)先級相同,判斷子優(yōu)先級,同樣,數(shù)字越小,優(yōu)先級越高;

知識小卡片結(jié)束啦~ 對NVIC有沒有了解呢?

接下來在STM32CubeMX中配置中斷優(yōu)先級:

配置優(yōu)先級分組

這里我配置使用中斷優(yōu)先級分組規(guī)則 NVIC_PriorityGroup_2:

mark

配置具體的優(yōu)先級大小

根據(jù)中斷優(yōu)先級分組規(guī)則 NVIC_PriorityGroup_2來設(shè)置具體的優(yōu)先級大小:

mark

配置時鐘樹

STM32L4的最高主頻到80M,所以配置PLL,最后使HCLK = 80Mhz即可:

生成工程設(shè)置

代碼生成設(shè)置

最后設(shè)置生成獨(dú)立的初始化文件:

生成代碼

點擊GENERATE CODE即可生成MDK-V5工程:

3. 在MDK中編寫、編譯、下載用戶代碼

STM32 HAL庫中斷處理機(jī)制

先打開stm32l4xx_it.c文件:

mark

可以看到其中處理EXIT2和EXIT3中斷都調(diào)用了同一個函數(shù),但是EXIT2和EXIT3向該函數(shù)傳入的參數(shù)不同:

HAL_GPIO_EXTI_IRQHandler();1.

那么,HAL庫對于中斷是如何處理的呢?我們打開 stm32l4xx_hal_gpio.c 文件,看一下該函數(shù)的原型,一探究竟:


/**

  * @brief  Handle EXTI interrupt request.

  * @param  GPIO_Pin Specifies the port pin connected to corresponding EXTI line.

  * @retval None

  */

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)

{

  /* EXTI line interrupt detected */

  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)

  {

    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);

    HAL_GPIO_EXTI_Callback(GPIO_Pin);

  }

}


可以看到,在該函數(shù)中首先讀取了一下中斷寄存器,確認(rèn)該中斷是否發(fā)生,確認(rèn)之后又調(diào)用了一個函數(shù),并將接收到的參數(shù) GPIO_Pin 繼續(xù)傳給該函數(shù):

HAL_GPIO_EXTI_Callback(GPIO_Pin);1.

該函數(shù)稱為EXIT中斷的回調(diào)函數(shù),用來處理所有發(fā)生的EXIT中斷事件。

那么,這個函數(shù)又干了什么呢?接著探索哈哈哈~

同樣在stm32l4xx_hal_gpio.c文件中找到該函數(shù)的原型:


/**

  * @brief  EXTI line detection callback.

  * @param  GPIO_Pin: Specifies the port pin connected to corresponding EXTI line.

  * @retval None

  */

__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

  /* Prevent unused argument(s) compilation warning */

  UNUSED(GPIO_Pin);


  /* NOTE: This function should not be modified, when the callback is needed,

           the HAL_GPIO_EXTI_Callback could be implemented in the user file

   */

}


哈哈哈,這下是不是非常清楚了~

該回調(diào)函數(shù)使用__weak進(jìn)行了弱定義,所以用戶可以再次定義該函數(shù),并且這個note寫的非常清楚:

這個函數(shù)不應(yīng)該被改變,如果需要使用回調(diào)函數(shù),請重新在用戶文件中實現(xiàn)該函數(shù)。

自己實現(xiàn)EXIT中斷處理回調(diào)函數(shù)

這個函數(shù)放在哪都行,為了方便,我們放在gpio.c的最后。

實現(xiàn)的基本思想是:

  • 因為所有的EXIT中斷都會調(diào)用該函數(shù),所以首先判斷具體的中斷事件;

  • 對該中斷事件進(jìn)行處理

實現(xiàn)代碼如下:

/* USER CODE BEGIN 2 */

/**

 * @brief EXIT中斷回調(diào)函數(shù)

 * @param GPIO_Pin —— 觸發(fā)中斷的引腳

 * @retval none

*/

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

/* 判斷哪個引腳觸發(fā)了中斷 */

switch(GPIO_Pin)

{

case GPIO_PIN_2:

/* 處理GPIO2發(fā)生的中斷 */

//點亮LED

HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);

break;

case GPIO_PIN_3:

/* 處理GPIO3發(fā)生的中斷 */

//熄滅LED

HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);

break;

default:

break;

}

}

/* USER CODE END 2 */


然后編譯整個工程:

最后進(jìn)行下載設(shè)置:


最后點擊下載即可:

實驗現(xiàn)象如下:

至此,我們已經(jīng)學(xué)會了如何配置NVIC使用外部中斷檢測按鍵,并了解了NVIC和HAL庫中斷處理機(jī)制的一些基本知識,下一節(jié)講述如何配置USART以及實現(xiàn)printf函數(shù)。

關(guān)鍵字:STM32Cube  EXIT  NVIC配置  HAL庫  中斷處理機(jī)制 引用地址:【STM32Cube_05】使用EXIT中斷檢測按鍵

上一篇:【STM32Cube_22】使用ADC讀取電壓值
下一篇:STM32CubeMX生成F1的工程中提示找不到 __HAL_TIM_SetCompare 問題

推薦閱讀

在人工智能項目國際交流研討會上,聯(lián)想控股旗下的兩大投資機(jī)構(gòu)——聯(lián)想之星和君聯(lián)資本分別分享了其在人工智能領(lǐng)域的投資策略。兩家機(jī)構(gòu)均植根于聯(lián)想30余年來的創(chuàng)業(yè)經(jīng)驗和資源積累,區(qū)別在于聯(lián)想之星是聯(lián)想控股的早期投資和孵化板塊,君聯(lián)資本則重點投資于初創(chuàng)期和擴(kuò)展期企業(yè),同時兼顧種子期的項目。聯(lián)想之星王明耀:從自發(fā)投資走向自覺投資截至2018年7月1...
工業(yè)以太網(wǎng)——實時以太網(wǎng)——在過去幾年中經(jīng)歷了巨大的增長。雖然經(jīng)典的現(xiàn)場總線仍大量存在,但它們已經(jīng)過了巔峰期。流行的實時以太網(wǎng)協(xié)議擴(kuò)展了以太網(wǎng)標(biāo)準(zhǔn),可以滿足實時功能的要求。現(xiàn)在,TSN為實時以太網(wǎng)提供了一條新的途徑。 實時與通信 在工廠自動化和驅(qū)動技術(shù)的背景下,實時意味著周期時間要安全、可靠地達(dá)到10毫秒以下,最低至微秒。為了滿足這些...
為滿足消費(fèi)者對功能更豐富和性能更高的設(shè)備需求,半導(dǎo)體制造業(yè)需在資本設(shè)備方面進(jìn)行大量投資,因而也導(dǎo)致競爭變得日趨激烈。為提高競爭力,芯片制造商正在采用工業(yè)4.0 制造技術(shù)來實現(xiàn)更高水平的卓越運(yùn)營。在本文中,我會闡述工業(yè) 4.0 的含義,提供工業(yè) 4.0 在半導(dǎo)體晶圓廠環(huán)境下的應(yīng)用示例,并說明應(yīng)用材料公司如何驅(qū)動這一發(fā)展。在深入細(xì)節(jié)之前,讓...
移植環(huán)境BootLoader:u-boot-1.1.6kernel:linux-2.6.30.4CPU:s3c2440開發(fā)板:TQ2440LCD:TFT480*272參考資料:《天嵌Linux移植手冊》移植步驟1、修改LCD時鐘計算方法內(nèi)核源碼的“drivers/video/s3c2410fb.c”文件,就是 LCD 的驅(qū)動源碼。修改“drivers/video/s3c2410fb.c”文件static void s3c2410fb_activate_var(struct fb_info *info){ struct...

史海拾趣

問答坊 | AI 解惑

C8051單片機(jī)原理及應(yīng)用

C8051單片機(jī)原理及應(yīng)用…

查看全部問答∨

運(yùn)算放大器、比較器設(shè)計指南

運(yùn)算放大器、比較器設(shè)計指南 第十四版 運(yùn)算放大器、比較器設(shè)計指南 第十六版…

查看全部問答∨

100M示波器到手了,用起來超爽

本信息來自合作QQ群:AVR單片機(jī)學(xué)習(xí)與交流群(17727270) 群管理員在壇子里的ID:銅河 100M、4通道,2G采樣,25k記錄 據(jù)說,這個雖然是100M,但實測是200M…

查看全部問答∨

求助各位大仙高手指點一下,如何在wince下實現(xiàn)放截屏的功能!非常感謝!

求助各位大仙高手指點一下,如何在wince下實現(xiàn) 防截屏 的功能!非常感謝!…

查看全部問答∨

程序在執(zhí)行掃描時老是在一個地方進(jìn)行判斷該怎么辦

大家好,我的程序(不是自己寫的)在執(zhí)行判斷掃描時老是停留在一個地方,怎么辦? 程序段如下: main: nop nop nop        mov wdt_contr,#00111110B  ;喂狗              ...…

查看全部問答∨

2440 CAMERA CODE DMA地址在CONFIG.BIB中設(shè)置的疑惑?

我的CONFIG.BIB一段如下: MEMORY ;NK         NK  8C200000  01D00000  RAMIMAGE ;RAM         RAM         8E800000  0 ...…

查看全部問答∨

請教運(yùn)算放大器的使用問題

我現(xiàn)在用一個運(yùn)算放大器調(diào)整單片機(jī)的采樣信號.放大器的型號為LF412,資料里電源連接方式是雙電源供電,如接+/-15v,由于我現(xiàn)在的輸入信號只有正的.我把負(fù)電源接地,正電源接+15v,請問這樣做行嗎?…

查看全部問答∨

大家覺得這個4*4鍵盤掃描程序怎樣,我修改了一點點。

這個程序不是原創(chuàng)的,但是我修改了一點點,理解起來輕松了很多。大家覺得怎樣,如果有較好的不妨拿出來分享討論一下吧 !                   & ...…

查看全部問答∨

穩(wěn)壓管的用法

打算通過24V直流 串個10K電阻 然后再通過個5V穩(wěn)壓管接地,最后在穩(wěn)壓管2端取得一個接近5V的穩(wěn)定電壓,可行否? 穩(wěn)壓管要如何選擇其參數(shù),請賜教…

查看全部問答∨

06.23【每周討論】我們年輕,富有正義。對于社會中的不文明現(xiàn)象該怎樣看待呢?

06.23【每周討論】年輕的我們,富有正義、滿懷激情。對于社會中的不文明現(xiàn)象該怎樣看待呢?我們年輕人,富有正義、滿懷激情,眼里容不下一粒沙。社會中那些不文明的現(xiàn)象經(jīng)常在我們的周圍發(fā)生,卻讓我們感到無可奈何。若為此感到懊惱的話,那你永遠(yuǎn) ...…

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

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(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