stm32打怪升級之瞥眼定時器
定時器TIM------->DMA
(不用看功能直接忽略介紹)
外部中斷得開啟復用功能
定時器TIM)
時鐘源:stm32時鐘系統框圖(需要下載)
外部中斷得開啟復用功能
實驗目的:定時1s讓燈亮
庫:定時用到了stm3210x_tim.h庫
模版:工程模版+TIM3_IRQHandler模版
流程
1.復制工程模版
2.打開工程模版在app中新建文件定時器
3.新建time.h和time.c文件添加至app定時器中
4.在time.h文件中寫入聲明voidtime_init
(void),且修改#define _TIME_H
5.在time.c文件中#include “time.h”,
6.在app中添加time.c中文件
7.在option中的c/c++中包含定時器路徑
8.由於使用定時器使用了stm32f10x_tim.h庫,所以在存放所用庫fwilb中添加stm32f10x_tim.h,並且在公共函數庫public中添加#include "stm3210x_tim.h"
9.開始在time.h中編寫time_init()函數(查閱固件庫中文手冊)
10.編寫完畢後,在stmf10x_it.h文件中編寫定時器中斷函數void TIM3_IRQHandler(),沒有聲明需要在.h中進行聲明
11.編寫主函數
註意:
1.我們用到了定時器,必須在此工程使用的頭文件fwilb中添加此頭文件
而且得把這個頭文件添加到公共頭文件裏面,不然會報錯
.\output\工程模板.axf: Error: L6218E: Undefined symbol TIM_TimeBaseInit (referred from time.o).
2.每次編寫中斷函數的時候,必須先進行擦除操作,即 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
以下是time_init()模版代碼
1 void time_init(void) 2 { 3 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定時結構體 4 5 NVIC_InitTypeDef NVIC_InitStructure; //中斷結構體 6 7 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //系統時鐘,註意APB1和TIM3的關系 8 9 TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除之前的中斷數據,必須用,包括寫中斷函數的時候10 TIM_TimeBaseInitStructure.TIM_Period = 2000; 11 TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;
#計算定時時間=TIM_Period\72M\TIM_Prescaler+1
12 TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; //是否時鐘分割
13 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數模式
14 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
15 TIM_Cmd(TIM3,ENABLE); //使能
16
17 TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE ); //設置中斷參數TIM3
18
19
20 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //設置NVIC參數,註意groop_1
21 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //全局中斷設置
22 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; 配對groop_1
23 NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
24 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
25 NVIC_Init(&NVIC_InitStructure);
26 }
打下劃線的是根據自己需求而改的
思路:定時1s的流水燈,需要使用定時器,所以使用tim.h庫,通過配置time_init(計算定時時間=TIM_Period\72M\TIM_Prescaler+1)定時1s,編寫中斷函數void TIM3_IRQHandler()對燈進行控制
可能對TIM3和APBx有疑問,在stm32時鐘分配圖中有介紹
TIM1/8---->APB2 TIM2-7-------->APB1
這也可以在庫中可以找到
stm32f10x.h ,
類似於結構體可以搜索InitStructure找到相關結構體寫法,然後使用go to definition直接找到結構體裏面的參數
stm32打怪升級之瞥眼定時器