STM32F103系列TIM1~TIM8库函数初始化代码批量发布干货

STM32F103系列TIM1~TIM8库函数初始化代码批量发布⼲货
前⾔:⼤家学⽣平时使⽤STM32F103系列的单⽚机⽐较多,我发布了⼀个串⼝2和串⼝3的帖⼦深受⼤家欢迎。
为了⽅便⼤家使⽤,本帖⼦贴出来了⾼级定时器TIM1和TIM8,普通定时器TIM2~TIM5,低级定时器TIM6和TIM7共8个定时器的库函数初始化代码,⽅便⼤家使⽤,还请⼤家继续⽀持我。
⾼级定时器
TIM1初始化.h头⽂件
1#ifndef __TIMER1_H
2#define __TIMER1_H
3#include "stm32f10x.h"
4
5void TIM1_Init(unsigned int arr,unsigned int psc);
6
7#endif
TIM1初始化.c源⽂件
5//psc:时钟预分频数
6void TIM1_Init(unsigned int arr,unsigned int psc)
7{
8
9 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
10 NVIC_InitTypeDef NVIC_InitStructure;
11
12 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定时器1时钟
13
14  //初始化TIM1
15 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下⼀个更新事件装⼊活动的⾃动重装载寄存器周期的值
16 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置⽤来作为TIMx时钟频率除数的预分频值
17 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
18 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
19 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位20
21 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //参数初始化
22  TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清中断标志位
23 TIM_ITConfig(TIM1, TIM_IT_Update|TIM_IT_Trigger,ENABLE ); //使能指定的TIM1中断,允许更
新中断允许触发中断源
24
25 //中断优先级NVIC设置
26 NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1中断
27 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
28 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
29 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
30 NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
31
32 TIM_Cmd(TIM1, ENABLE);  //使能TIM1
33
34}
35
36//定时器1中断服务程序
37void TIM1_UP_IRQHandler(void)  //TIM8中断
38{
39 if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)//检查指定的TIM中断发⽣与否:TIM 中断源
40 {
41  //应⽤代码编写区
42
43  TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
44 }
45}
TIM8初始化.h头⽂件
1#ifndef __TIMER8_H
2#define __TIMER8_H
3#include "stm32f10x.h"
4
5void TIM8_Init(unsigned int  arr,unsigned int psc);
6
7#endif
TIM8初始化.c源⽂件
5//psc:时钟预分频数
引道结构图
散堆填料6void TIM8_Init(unsigned int  arr,unsigned int psc)
7{
8 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
9 NVIC_InitTypeDef NVIC_InitStructure;
10
11 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //使能定时器1时钟
12
13  //初始化TIM8
14 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下⼀个更新事件装⼊活动的⾃动重装载寄存器周期的值
15 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置⽤来作为TIMx时钟频率除数的预分频值
智能家居系统
16 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
17 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
18 TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位19
20 TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //参数初始化
21  TIM_ClearFlag(TIM8, TIM_FLAG_Update);//清中断标志位
22 TIM_ITConfig(TIM8, TIM_IT_Update|TIM_IT_Trigger,ENABLE ); //使能指定的TIM8中断,允许更新中断允许触发中断源
23
24 //中断优先级NVIC设置
25 NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_IRQn;  //TIM8中断
26 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
27 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
28 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
29 NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
30
31 TIM_Cmd(TIM8, ENABLE);  //使能TIM8
32
33}
34
35//定时器8中断服务程序
36void TIM8_UP_IRQHandler(void)  //TIM8中断
37{
38 if(TIM_GetITStatus(TIM8, TIM_IT_Update) != RESET)//检查指定的TIM中断发⽣与否:TIM 中断源
39 {
40  //代码应⽤区
41
42  TIM_ClearITPendingBit(TIM8, TIM_IT_Update);//清除TIMx的中断待处理位:TIM 中断源
43 }
44}
普通定时器
TIM2初始化.h头⽂件
1#ifndef __TIMER2_H
2#define __TIMER2_H
3#include "stm32f10x.h"
4
5void TIM2_Init(unsigned int  arr,unsigned int psc);
6
7#endif
TIM2初始化.c源⽂件
1#include "sys.h"
2#include "timer2.h"
3
4//arr:⾃动重装值
5//psc:时钟预分频数
6void TIM2_Init(unsigned int arr, unsigned int psc)
7{
8              TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
9 NVIC_InitTypeDef NVIC_InitStructure;
10
11 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
12                TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位
13
14 TIM_TimeBaseStructure.TIM_Period = arr; //⾃动重装载周期值
15 TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频值
16 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
17 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
18 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx
19
20 TIM_ITConfig(  TIM2,TIM_IT_Update  |  TIM_IT_Trigger,  ENABLE  );//使能更新触发TIM中断21
22 //中断分组设置
23 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM2中断
24 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级0级
25 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
26 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
触摸调光ic
27 NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器28
29 TIM_Cmd(TIM2, ENABLE);  //使能TIMx外设
30
31}
32
33//定时器2中断服务程序
34void TIM2_IRQHandler(void)
35{
36    //判断TIM2更新中断是否发⽣
37    if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)
38    {
39        //代码应⽤区
40
41      TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
42    }
43}
TIM3初始化.h头⽂件
1#ifndef __TIMER3_H
2#define __TIMER3_H
3#include "stm32f10x.h"
4
5void TIM3_Init(unsigned int  arr,unsigned int psc);
6
7#endif
TIM3初始化.c源⽂件
1#include "sys.h"
2#include "timer3.h"
3
4//arr:⾃动重装值
5//psc:时钟预分频数
6void TIM3_Init(unsigned int arr, unsigned int psc)
7{
8              TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
57cao9 NVIC_InitTypeDef NVIC_InitStructure;
10
11 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
12
13 TIM_TimeBaseStructure.TIM_Period = arr; //⾃动重装载周期值
14 TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频值
15 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
16 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
17 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx
18
19 TIM_ITConfig(  TIM3,TIM_IT_Update  |  TIM_IT_Trigger,  ENABLE  );//使能更新触发TIM中断
20
21 //中断分组设置
22 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
23 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级0级
24 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
宿主化25 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
26 NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
27
28 TIM_Cmd(TIM3, ENABLE);  //使能TIMx外设
29}
30
31//中断服务程序
32void TIM3_IRQHandler(void)
33{
34              if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发⽣与否:TIM 中断源
35              {
36                //代码应⽤区
37
38 TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
39              }
40}
TIM4初始化.h头⽂件
1#ifndef __TIMER4_H
2#define __TIMER4_H
3#include "stm32f10x.h"
4
5void TIM4_Init(unsigned int  arr,unsigned int psc);
6
7#endif
TIM4初始化.c源⽂件

本文发布于:2024-09-21 22:38:11,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/197418.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:中断   时钟   指定   使能   代码   设置   参数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议