STM32F407ZG开发板学习(6)

  • 通用定时器简介
    • TIM2~TIM5
    • TIM9~TIM14
  • 原理
    • TIMx控制寄存器1(TIMx_CR1)
    • DMA/中断使能寄存器(TIMx_DIER)
    • 预分频寄存器(TIMx_PSC)
    • 计数器(TIMx_CNT)
    • 自动重载寄存器(TIMx_ARR)
    • 状态寄存器(TIMx_SR)
  • 实验
    • 配置步骤
    • 代码

通用定时器简介

STM32F4的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5、 TIM9~TIM14 等通用定时器,还有 TIME6 和 TIME7 等基本定时器 ,总共达 14 个定时器之多 。

通用定时器包含一个 16 位或 32 位自动重载计数器,该计数器由可编程预分频器驱动。
它们可用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和 PWM)。
使用定时器预分频器和 RCC 时钟控制器预分频器,可将脉冲宽度和波形周期从几微秒调制到几毫秒。
这些定时器彼此完全独立,不共享任何资源。

注:
32 位外设寄存器必须按字(32 位)写入数据。所有其它外设寄存器则必须按半字(16 位) 或字(32 位)写入数据。而读访问可支持字节(8 位)、半字(16 位)或字(32 位)。

TIM2~TIM5

具体功能使用时查看官方手册。

TIM9~TIM14


原理

这里只贴出了一些常用的和此次实验需要用到的位。

TIMx控制寄存器1(TIMx_CR1)

计数器使能。

DMA/中断使能寄存器(TIMx_DIER)

更新中断使能。

预分频寄存器(TIMx_PSC)

存放预分频值,16位。

计数器(TIMx_CNT)

存放计数器值。

自动重载寄存器(TIMx_ARR)

自动重装载值。当计数器值达到设定情况时,将会重装载的值。
该寄存器在物理上实际对应着2个寄存器。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存器在《中文参考手册》里面被叫做影子寄存器。事实上真正起作用的是影子寄存器。根据TIMx_CR1TIMx_CR1寄存器中APRE位的设置:APRE=0时,预装载寄存器的内容可以随时传送到影子寄存器,此时2者是连通的;而APRE=1时,在每一次更新事件(UEV)时,才把预装载寄存器(ARR)的内容传送到影子寄存器。

状态寄存器(TIMx_SR)

硬件置1,软件清0!(实际上很多中断的处理都是硬件产生中断置1,在中断函数中由软件来清0)

实验

配置TIM3,主循环中使LED0闪烁,定时器中断函数中更改LED1的引脚值,则定时器每计数到指定值产生中断,LED1就会闪烁,而LED0的闪烁用于判断主循环工作状况。

配置步骤

  1. 时钟使能。
  2. TIM初始化,用结构体TIM_TimeBaseInitTypeDef。
  3. 设置DIER使能中断void TIM_ITConfig(TIMx, TIM_IT, ENABLE/DISABLE);。
  4. 设置中断NVIC_Init。
  5. 使能TIM3,void TIM_Cmd(TIMx, ENABLE/DISABLE);。
  6. 实例中断服务函数。

代码

配置函数:

void tim3_init(uint16_t arr, uint16_t psc)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitSructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3时钟//定时器溢出时间计算方法 :Tout =((arr+1)*(psc+1))/Ft,Ft为定时器工作频率TIM_TimeBaseInitSructure.TIM_ClockDivision = TIM_CKD_DIV1; //分频因子TIM_TimeBaseInitSructure.TIM_CounterMode = TIM_CounterMode_Up; //计数模式 向上计数模式TIM_TimeBaseInitSructure.TIM_Period = arr; //周期,即自动重装值TIM_TimeBaseInitSructure.TIM_Prescaler = psc; //时钟分频数//TIM_TimeBaseInitSructure.TIM_RepetitionCounter = ; //高级定时器用TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitSructure);TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //使能中断,即设置DIER寄存器,此处为 更新(溢出)中断源TIM_Cmd(TIM3, ENABLE); //使能TIM3NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断函数NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;NVIC_Init(&NVIC_InitStructure);}

中断函数:

void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) //判断发生中断{if(get_LED1()){LED1_ON();}else {LED1_OFF();}}TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除更新中断标志位
}

main函数:

int main()
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置系统中断优先级分组2LED_init();delay_init(168);tim3_init(2500 - 1, 8400 - 1); //定时器时钟84M,分频系数8400,所以84M/8400=10Khz//的计数频率,计数5000次为500mswhile(1){if(get_LED0()){LED0_ON();}else {LED0_OFF();}delay_ms(200);}
}

STM32F407ZG TIM通用定时器相关推荐

  1. STM32F429通用定时器(TIM)

    目录 一.通用定时器是什么? 1.计数模式 2.工作过程​编辑 3.内部时钟选择 二.通用定时器HAL库函数流程 三.小实验程序要求 四.代码实现 1.TIM.h 2.TIM.c 3.main.c 一 ...

  2. STM32F4 定时器TIM(1)定时器控制输出【使用库函数】

    高级时钟控制定时器TIM1&TIM8简介: STM32F4的高级控制定时器包含一个自动重装载计数器,计数器的输入是一个被预分频的系统时钟. 这个定时器有多种用途,包括车辆输入信号长度(输入捕获 ...

  3. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...

  4. STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值

    参考:stm32定时器与定时器中断 作者:打酱油的 发布时间: 2021-04-11 01:04:09 网址:https://blog.csdn.net/weixin_46098612/article ...

  5. STM32通用定时器输出PWM

    1 .TIMx简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成. 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM). 使用定时器预分 ...

  6. tsm2812通用定时器中断_通用定时器中断(TIM2)

    //-------------------TIM2.c------------------------// #include "timer.h" #include "le ...

  7. DSP之时钟与定时器之二通用定时器

    C55x DSP片内有两个2通用定时器,利用定时器可向CPU产生周期性中断或向DSP片外的器件提供周期信号.其中TMS320VC5503/5507/5509/5510 DSP提供的是2个20位通用定时 ...

  8. 通用定时器产生PWM

    一.STM32F103 PWM介绍 STM32F1除了基本定时器TIM6和TIM7,其他定时器都可以产生PWM输出:其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出,而 ...

  9. STM32CubeMX学习笔记(24)——通用定时器接口使用(电容按键检测)

    一.电容按键简介 电容器(简称为电容)就是可以容纳电荷的器件,两个金属块中间隔一层绝缘体就可以构成一个最简单的电容.如图 32-1(俯视图),有两个金属片,之间有一个绝缘介质,这样就构成了一个电容.这 ...

最新文章

  1. 【408预推免复习】操作系统之存储器管理
  2. Mac下布置appium环境
  3. [ckeditor系列]ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  4. 软件工程课设-----日程管理系统
  5. (14) ZYNQ AXI4-Lite总线简介(学无止境)
  6. html5仿qq空间,JS实现的仿QQ空间图片弹出效果代码
  7. mysql索引 实验_“索引”实验小例
  8. 电商设计师必备素材|快速组合自己想要的场景和落版文字
  9. 基于python的会议室预约管理系统的设计与实现
  10. 启动kafka报错ERROR Fatal error during KafkaServer startup. Prepare to shutdown ,找到原因就要可以解决
  11. Ionic4—UI组件之ion-backdrop组件
  12. SVN revert 命令使用手册
  13. ansible自动化部署nginx艾艾贴
  14. 社会经济效益参考模板
  15. 1688以图搜货接口,1688图片搜索接口,拍立淘接口,以图搜商品接口,图片上传搜索商品接口,按图搜索接口代码对接参数说明
  16. 可能会有特殊的客人光顾
  17. 流计算 Oceanus | Flink JVM 内存超限的分析方法总结
  18. dnf如何查询服务器角色信息,怎么查看网易账号下所有游戏角色
  19. python爬虫图片实例-Python爬虫爬取煎蛋网图片代码实例
  20. 上海有哪些不错的互联网公司?

热门文章

  1. Csipsimple Or Imsdroid :invite message too long for 3g - it gets fragmented
  2. 在Mac上使用或不使用Acrobat的3种向PDF添加页码的方法
  3. 1个卷积核二分类0,1的神经网络的特征频率曲线
  4. Android用opencv识别红绿灯,Opencv 图像识别Android实战(识别扑克牌 8.处理筛选区)
  5. win10+ubuntu系统最稳妥的安装方式(登录黑屏、死机、自动关机、屏幕跟摔碎了一样,没有无线驱动请点进来。)
  6. 车商通SCRM 10.0全新上线
  7. MySQL逻辑运算符-逻辑非运算NOT与!的相似区别
  8. Navicat安装mysql或是sqlserver驱动,报错2502和2503
  9. 第九天学习之如何找寻适合自己的工作
  10. LayaAir 绘制微信小游戏开放数据域画面