当前位置: 首页 > news >正文

基本定时器

1.简介

1. 基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器

2. 可以专门用于驱动数模转换器 (DAC), 用于触发 DAC 的同步电路
3. 16 位自动重载递增计数器

4. 16 位可编程预分频器

5. 计数器溢出时, 会触发中断/DMA请求

从上往下看

1.开始RCC供给定时器的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE); 

2.设置预分频值PSC,重装载值,计数方向

TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV4; 

TIM_TimeBaseInit(BASE_TIMER,&TIM_TimeBaseInitStructure);//初始化TIM6

 注意,对于基本定时器TIM6, TIM 7, TIM_TimeBaseInitStructure.TIM_ClockDivision是无效的, 供给的时钟到预分频器的前面没有分频.在通用定时器和高级定时器中TIMx_CR1的位 9:8 CKD:时钟分频 (Clock division)对输入时钟进行首次分频

3.开启更新中断,使能定时器

  TIM_ITConfig(BASE_TIMER,TIM_IT_Update,ENABLE); //允许定时器3更新中断
  TIM_Cmd(BASE_TIMER,ENABLE); //使能定时器3   

4.设置中断优先级

    NVIC_InitStructure.NVIC_IRQChannel=TIM6_DAC_IRQn; //定时器6中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);

5.例程

#include "./BaseTime/basetime.h"
#include "./LED/led.h"#define BASE_TIMER              TIM6
#define BASE_TIMER_CLK          RCC_APB1Periph_TIM6
#define BASE_TIME_IRQ           TIM6_DAC_IRQn
#define BASE_TIME_IRQHandler    TIM6_DAC_IRQHandlervoid bsTime_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(BASE_TIMER_CLK,ENABLE);  ///使能TIM6时钟TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值TIM_TimeBaseInitStructure.TIM_Prescaler=psc;  //定时器分频TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV4; TIM_TimeBaseInit(BASE_TIMER,&TIM_TimeBaseInitStructure);//初始化TIM6TIM_ITConfig(BASE_TIMER,TIM_IT_Update,ENABLE); //允许定时器3更新中断TIM_Cmd(BASE_TIMER,ENABLE); //使能定时器3NVIC_InitStructure.NVIC_IRQChannel=BASE_TIME_IRQ; //定时器6中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);
}void BASE_TIME_IRQHandler(void)
{if(TIM_GetITStatus(BASE_TIMER,TIM_IT_Update)==SET) //溢出中断{static char i = 0;if(i == 0){LED0(1);i = 1;}else{i = 0;LED0(0);}TIM_ClearITPendingBit(BASE_TIMER,TIM_IT_Update);  //清除中断标志位}}

 注意:这个TIM6非常特殊, 中断号和中断函数都其他的有点不一样.

http://www.lryc.cn/news/134890.html

相关文章:

  • MySQL 中文全文检索
  • Redis——list类型详解
  • npm 安装 git 仓库包
  • 问题来了!你知道你穿的防砸劳保鞋的保护包头都是什么材料
  • 计算机网络-物理层(三)编码与调制
  • Linux面试笔试题(6)
  • qt中窗口的布局
  • 玄子Share - HTML Emmet 语法详细介绍
  • Linux上安装和使用git到gitoschina和github上_亲测
  • 合宙Air724UG LuatOS-Air LVGL API--简介
  • 「Vue|网页开发|前端开发」01 快速入门:用vue-cli快速写一个Vue的HelloWorld项目
  • 7.5.tensorRT高级(2)-RAII接口模式下的生产者消费者多batch实现
  • 华为OD-最大括号深度
  • 【Leetcode】108. 将有序数组转换为二叉搜索树
  • 【树莓派打怪升级】:玩转个人Web世界!
  • mysql5.7在centos环境下的常见故障
  • hive中get_json_object函数不支持解析json中文key
  • Azure VM上意外禁用NIC如何还原恢复
  • 神经网络简单理解:机场登机
  • Sping源码(七)— 后置处理器
  • docker导出、导入镜像、提交
  • shell的变量
  • CentOS系统环境搭建(十三)——CentOS7安装nvm
  • uniapp评论列表插件获取
  • 3.redis数据结构之List
  • 安装使用MySQL8遇到的问题记录
  • Mysql、Oracle 中锁表问题解决办法
  • AUTOSAR规范与ECU软件开发(实践篇)5.1 ETAS ISOLAR-A工具简介
  • shell脚本——expect脚本免交互
  • ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况