定时器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 ); //设置中断参数TIM318 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直接找到结构体里面的参数