我這個程式的目的在於讓定時器開啟更新中斷,實現定時器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 配置外設工作模式 復位外設時鐘,進入復位 退出復位 設定工作模式...