STM32定时器

种类

有高级定时器TIM1和TIM8,通用定时器TIM2~5,基本定时器TIM6、7
对于F1系列,都是16位。高级和通用有4个捕获通道,基本定时器没有捕获通道。高级定时器可以互补输出

通用定时器

位于APB1总线上

通用定时器使用方法

定时器时钟使能

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//定时器时钟使能

定时器初始化

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_Period=arr;//16位的预装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//16位的预分频系数
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up//向上计数模式;
//TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割,可以不用
TIM_TimeBaseInit(TIM3,&Tim_TimeBaseInitStructure);

使能中断

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//哪个定时器,哪种中断(定时器3,更新中断)

关于中断类型参考

中断优先级设置,记得要在执行下面这些代码前先设置主优先级分组NVIC_PriorityGroupConfig()

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

使能定时器

TIM_Cmd(TIM3,ENABLE);

通用定时器中断服务函数

    void TIM3_IRQHandler(void){
        if (TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET){//判断是不是定时器3更新中断来了
        LED=!LED;//操作
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//手动清除定时器3的更新中断标志位
        }
    }

溢出时间Tout=(ARR+1)(PSC+1)/Tclk 其中ARR和PSC都是16位的

Tout:TIM3 溢出时间(单位为 us)

Tclk:TIM3 的输入时钟频率(单位为 Mhz)

Tclk/(psc+1):计数器的时钟频率

posted @   灰太狼的喜羊羊  阅读(368)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· Tinyfox 简易教程-1:Hello World!
点击右上角即可分享
微信分享提示

目录

目录

X