STM32中斷 外部中斷和定時器中斷

2021-09-23 14:17:25 字數 2000 閱讀 5687

spi,iic的中斷和51微控制器不一樣,這些在stm32屬於外設,是外部中斷。

因為stm32的中斷非常多,因此必須設定中斷優先順序

stm32有兩個優先順序的概念:搶占式優先順序和響應式優先順序(亞優先順序,副優先順序)

搶占式優先順序:高搶占式優先順序的中斷事件會打斷當前主程式以及中斷程式執行,俗稱中斷巢狀。

響應優先順序:在搶占式優先順序相同的情況下,高響應優先順序的中斷優先被響應;

在搶占式優先順序相同的情況下,如果有低響應優先順序中斷正在執行,要等待其結束後才能得到響應,即不能巢狀。

先看搶占式優先順序,在看響應優先順序,搶占式優先順序決定是否會有中斷巢狀。

如果搶占式優先順序和響應優先順序都相同,那麼更加官方手冊給的各種中斷的預設順序執行。

接下來上外部中斷**(庫函式實現,**未測試不一定對):

#include "stm32f10x.h"

#include "misc.h"

#include "stm32f10x_exti.h"

void rcc_configuration(void);

void gpio_configuration(void);

void exti_configuration(void);

void nvic_configuration(void);

int main()

void rcc_configuration(void)

void gpio_configuration(void)

void exti_configuration(void) //外部中斷配置

void nvic_configuration(void) //配置外部中斷響應優先順序

tim1,tim8是高階定時器,tim2~5是通用定時器,tim6,tim7是基本定時器。

我的理解來解釋一下上圖前三個引數:

計數器分辨:即類似51微控制器中的初值可以裝多大,16位就是初值可以為0~ffff。

計數器型別:向上計數就是從0開始計數到設定的初值,向下計數就是從設定的初值開始減到0。

預分頻係數:即將定時器速度減慢幾倍,比如預分頻係數為2,那麼定時器計數速度減慢一倍。分頻分頻,就是把頻率分小份嘛,平率小了,耗費的時間就大了。這裡可以將預分頻係數設定為1~65536任意乙個數。

下面上**:

**功能為用定時器計數一秒,每秒pb5上的led閃爍一下

#include "stm32f10x.h"

#include "misc.h"

#include "stm32f10x_exti.h"

#include "stm32f10x_tim.h"

void rcc_configuration(void);

void gpio_configuration(void);

void tim3_configuration(void);

void nvic_configuration(void);

int main()

void rcc_configuration(void)

void gpio_configuration(void)

void tim3_configuration(void) //注tim主頻為72m,這裡的設定是設定為1秒的定時器

void nvic_configuration(void) //配置定時器中斷響應優先順序

void tim3_irqhandler(void)

else

}

STM32定時器中斷

本實驗的目的是通過定時器中斷控制led燈的亮滅。筆者所用ide為iar,採用標準庫 3.5韌體庫 通過定時器產生中斷來控制led。ifndef led h define led h include stm32f10x gpio.h include stm32f10x.h include stm32f...

stm32 定時器中斷

stm32f1的定時器非常多,由2個基本定時器 tim6 tim7 4個通用定時器 tim2 tim5 和2個高階定時器 tim1 tim8 組成。基本定時器的功能最為簡單,類似於51微控制器內定時器。通用定時器是在基本定時器的基礎上擴充套件而來,增加了輸入捕獲與輸出比較等功能。高階定時器又是在通用...

stm32 定時器中斷實驗

led.h ifndef led h define led h include sys.h void led init void define led0 pbout 5 紅燈 define led1 peout 5 綠燈 endif led.c include led.h include stm32...