stm32f10x 中斷程式設計框架

2021-10-08 20:08:40 字數 3056 閱讀 5224

1,初始化nvic,用於處理中斷

2,初始化要連線到exti的gpio

3,初始化exti用於產生中斷/事件

4,編寫中斷服務函式

5,main函式

1)設定優先順序分組

misc.h中void nvic_prioritygroupconfig(uint32_t nvic_prioritygroup);

2)配置nvic初始化結構體,中斷源,主優先順序,子優先順序,使能。

void nvic_init(nvic_inittypedef* nvic_initstruct);

1)設定時鐘

2)gpio初始化結構體,輸入/輸出模式(速度),引腳

3)void gpio_init(gpio_typedef* gpiox, gpio_inittypedef* gpio_initstruct);

1)時鐘apb2匯流排上的afio時鐘

2)配置輸入線是哪個gpio的哪個引腳

void gpio_extilineconfig(uint8_t gpio_portsource, uint8_t gpio_pinsource)

3)初始化exti結構體,輸入線,模式,觸發方式,使能

void exti_init(exti_inittypedef* exti_initstruct);

中斷服務函式名稱:要與啟動檔案startup_stm32f10x_hd.s中斷向量表函式名稱相對應,檔案中已經有了對應的弱定義中斷函式,即如果有相同名稱的,執行你自己的函式,如果沒有或者名稱寫錯了,執行系統寫好的函式,一般是無限迴圈 ( b . ),注意,名稱寫錯並不會報錯!!

中斷服務函式寫在哪:我們說到,系統已經編寫好了中斷服務函式的名稱了,同時,系統也寫好了核心部分的中斷服務函式,寫在了stm32f10x_it.**件中,我們可以接在核心部分後面寫我們需要的中斷服務函式。

#include

"bsp_exti.h"

void

exti_nvic_config

(void

)void

exti_key_config

(void

)

#ifndef __bsp_exti_h

#define __bsp_exti_h

#include

"stm32f10x.h"

#define key1_int_gpio_pin gpio_pin_0

#define key1_int_gpio_port gpioa

#define key1_int_gpio_clk rcc_apb2periph_gpioa

#define key1_preemptionpriority 1

#define key1_subpriority 1

#define key1_int_exti0_clk rcc_apb2periph_afio

#define key1_gpio_portsourcegpiox gpio_portsourcegpioa

#define key1_gpio_pinsourcex gpio_pinsource0

#define key1_int_exti0_line exti_line0;

#define key1_int_exti0_mode exti_mode_interrupt;

#define key1_int_exti0_trigger exti_trigger_rising;

void

exti_nvic_config

(void);

void

exti_key_config

(void);

#endif

/* __bsp_exti_h */

```c

void

exti0_irqhandler

(void)}

exti_clearitpendingbit

(exti_line0)

;//清除中斷標誌位

}

// bsp  :board support package  板級支援包

#include

"bsp_led.h"

void

led_gpio_config

(void

)

#ifndef __bsp_led_h

#define __bsp_led_h

#include

"stm32f10x.h"

#define led_g_gpio_pin gpio_pin_0

#define led_g_gpio_port gpiob

#define led_g_gpio_clk rcc_apb2periph_gpiob

#define on 1

#define off 0

#define led_g(a) if(a) gpio_resetbits(led_g_gpio_port, led_g_gpio_pin); else gpio_setbits(led_g_gpio_port, led_g_gpio_pin);

#define led_g_toggle

void

led_gpio_config

(void);

#endif

/* __bsp_led_h */

#include

"stm32f10x.h"

#include

"bsp_led.h"

#include

"bsp_exti.h"

/*void delay(uint32_t count)

*/int

main

(void

)}

STM32F10x系列 中斷

概念問題 中斷與事件有什麼聯絡與區別?stm32之中斷與事件 中斷與事件的區別 簡單概括下。中斷 cpu單執行緒情況下只能處理單一任務,在有零時任務需要處理時,可以暫時放下當前任務,優先處理零時任務,再回過來處理之前的任務。多個中斷可以進行巢狀,比如產生了多個零時任務,那麼就可以按照優先順序處理這多...

STM32F10x系列UART中斷異常除錯經歷

硬體環境 stm32f105rct6 軟體環境 freertosv8 問題描述 採用中斷方式接收資料,然後將收到的一幀資料放入訊息佇列,然後有專門的乙個任務用來從訊息佇列中取資料並處理。jlink除錯以及燒錄執行都是可以的,但是當隨著通訊頻率的增加以及執行時間的加長,系統會出現 宕機 即,不停的進入...

STM32F10X入門 流水燈

2019 3 16 2019 3 19 core cm32.c stdin.h中定義了字元型 stm32f10x.h stm32f10x conf.h中定義了引用的外設標頭檔案 庫檔案之間的依賴呼叫關係 pngstm32f10x.h檢視位址對映 比如define gpioa base apb2per...