stm32的外設初始化步驟,以定時器為例。

2021-08-05 18:49:46 字數 1449 閱讀 2137

我這個程式的目的在於讓定時器開啟更新中斷,實現定時器1s中斷一次然後在中斷函式中led電平翻轉一次。

1.首先先開啟這個外設的時鐘:rcc_apb2periphclockcmd(rcc_apb2periph_tim1, enable);  //開啟定時器1 的時鐘apb2

2.定義這個外設的初始化結構體:tim_timebaseinittypedef tim_timebaseinitstructure;   //定時器模式初始化結構體  定義別名為tim_timebaseinitstructure

3.把這個結構體內成員引數設定:

tim_timebaseinitstructure.tim_period = 9999; //自動重裝載值   0-9999   大概為1s翻轉電平 週期為2s

tim_timebaseinitstructure.tim_prescaler=7199;  //定時器分頻  72m/7200=10000hz

tim_timebaseinitstructure.tim_countermode=tim_countermode_up; //向上計數模式

tim_timebaseinitstructure.tim_clockdivision=tim_ckd_div1;     //濾波器的分頻因子

4.呼叫這個外設的初始化函式:tim_timebaseinit(tim1,&tim_timebaseinitstructure);

5.允許定時器1中斷開啟:tim_itconfig(tim1,tim_it_update,enable ); //使能指定的tim1中斷,允許更新中斷

6.外設的使能開啟:tim_cmd(tim1, enable);  //使能tim1

7.因為這個是定時器的中斷所以還需設定中斷優先順序。搶占以及響應優先順序的設定。nvic。每個中斷都需設定乙個。

//中斷優先順序nvic設定

nvic_initstructure.nvic_irqchannel = tim1_up_irqn;  //tim1中斷

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;  //先佔優先順序0級

nvic_initstructure.nvic_irqchannelsubpriority = 3;  //從優先順序3級

nvic_initstructure.nvic_irqchannelcmd = enable; //irq通道被使能

nvic_init(&nvic_initstructure);  //初始化nvic暫存器

8.整個系統的設定中斷分組,只需設定一次:一般在main函式中呼叫一次就ok。

nvic_prioritygroupconfig(nvic_prioritygroup_2); //設定nvic中斷分組2:2位搶占優先順序,2位響應優先順序

9.編寫中斷服務函式:   void tim1_up_irqhandler(void)   //tim1中斷

留此為證。

stm32外設初始化和設定過程

1.主應用檔案中宣告ppp inittypedef結構體變數。例 gpio inittypedef gpio initstructure 2.為定義的結構體變數設定需要的值。設定變數中所有的值 ppp initstructure.member1 value1 ppp initstructure.me...

stm32埠初始化

今天上課,點亮數碼管,gpio初始化後,數碼管上有一段亂碼。要讓這亂碼消失掉,需要改變gpio初始化的順序。在gpio埠使能後,要加odr 埠暫存器 控制 gpio inittypedef gpio initstructure 定義乙個結構體 rcc apb2periphclockcmd rcc a...

stm32 外設使用的配置步驟

2018 5 10 使用外設的配置步驟 1 開啟時鐘 開啟外設時鐘 開啟相關gpio時鐘 開啟dma時鐘 若需要 2 關聯外設與gpio 復位關聯gpio時鐘,進入復位 退出復位 配置外設與gpio相關聯 3 配置gpio工作模式 4 配置外設工作模式 復位外設時鐘,進入復位 退出復位 設定工作模式...