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...