一、定时器定时中断
初始化定时器
恢复缺省配置
把结构体变量赋一个默认值
写预分频值的函数
用来改变计数器的计数模式,第二个参数选择新的计数器模式
自动重装器预装功能配置
给计数器写入一个值
给自动重装寄存器写入一个值
获取当前计数器的值
获取当前的预分频器的值
用来获取标志位和清除标志位的
1.开启RCC时钟
打开时钟后,定时器的基准时钟和整个外设的工作时钟就会同时打开
2.选择时基单元的时钟源
对于定时中断就选择内部时钟源
这六个函数对应图中时基单元的时钟选择部分,可以选择RCC内部时钟、ETR外部时钟、ITRx其他定时器、TIx捕获通道这些
选择内部时钟
选择ITRx其他定时器的时钟,第一个参数选择要配置的定时器,第二个参数选择要接入哪个其他的定时器
选择TIx捕获通道的时钟,第二个参数选择TIx具体的某个引脚,第三第四个参数,输入的极性和滤波器,对于外部引脚的波形,一般都会有极性选择和滤波器
选择ETR通过外部时钟模式1输入的时钟,第一个参数,外部触发预分频器,可以对ETR的外部时钟再提前做一个分频,第二第三个参数,极性和滤波器
选择ETR通过外部时钟模式2输入的时钟,第一个参数,外部触发预分频器,可以对ETR的外部时钟再提前做一个分频,第二第三个参数,极性和滤波器
3.配置时基单元
包括预分频器、自动重装器、计数模式等等,用一个结构体就可配置好
时基单元初始化,第一个参数TIMx选择某个定时器,第二个参数是结构体,包含了配置时基单元的一些参数
4.配置输出中断控制
允许更新中断输出到NVIC
使能中断输出信号(对应图中中断输出控制),第一个参数选择定时器,第二个参数TIM_IT,选择要配置哪个中断输出,第三个参数NewState,新的状态,使能还是失能
5.配置NVIC
在NVIC中打开定时器中断的通道,并分配一个优先级
用上一节的NVIC_Init函数
6.运行控制
整个模块配置完成后,需要使能一下计数器,否则计数器不会运行,当定时器使能后,计数器开始计数,当计数器更新时,触发中断,最后再写一个定时器的中断函数,这样这个中断函数每隔一段时间就能自动执行一次了
用来使能计数器的(对应图中的运行控制),第一个参数TIMx选择某个定时器,第二个参数NewState新的状态,也就是使能还是失能。使能,计数器可以运行;失能,计数器不运行
Timer.c
#include "stm32f10x.h" // Device header
/**
* 函 数:定时中断初始化
* 参 数:无
* 返 回 值:无
*/
void Timer_Init(void)
{
/*开启时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟
/*配置时钟源*/
TIM_InternalClockConfig(TIM2); //选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟
/*时基单元初始化*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能
TIM_TimeB