优秀文章

https://blog.csdn.net/qq_38351824/article/details/82619734

一、STM32通用定时器(TIM2、TIM3、TIM4和TIM5共四个通用定时器,它们之间完全独立,不共享任何资源)

  STM32F1系列的通用定时器是一个通过可编程预分频器(PSC)驱动的16位自动重装载计数器(CNT)构成。

  STM32的通用计时器可用于:

    测量输入信号的脉冲长度(输入捕获)

    产生输出波形(输出比较和PWM)

  使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。

  通用定时器TIMx功能:

    1、16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。

    2、16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟的分频系数为1~65535之间的任意值(2^16=65535)。

    3、每个通用定时器有4个独立通道(TIMx_CH1~4),可以用作

      A、输入捕获

      B、输出比较

      C、PWM生成(边缘或中间对齐模式)

      D、单脉冲模式输出

    4、可使用外部信号(TIMx_ETR)控制定时器和定时器互连(用一个定时器控制另外一个定时器)的同步电路。

    5、产生中断/DMA的触发来源:

      A、更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者外部/内部触发)

      B、触发事件(计数器启动、停止、初始化或者由内部/外部触发)

      C、输入捕获

      D、输出比较

      E、支持针对定位的增量(正交)编码器和霍尔传感器电路

      F、触发输入作为外部时钟或者按周期的电流管理

二、定时器的计数模式

  1、向上计数模式:计数器从0计数到自动重装载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。

  2、向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

  3、中央对齐模式(向上/向下计数):计数器从0开始计数到重装载值-1,产生一个计数器溢出事件,然后向下计数到1并产生一个计数器溢出事件,然后再从0开始重新计数。

三、定时器溢出时间

  Tout(溢出时间)= (ARR+1)(PSC+1)/Tclk

  ARR:自动重装值

  PSC:预分频系数

  Tclk:APB1倍频得到的(APB1的分频系数为1,Tclk等于APB1,不等于1时,则Tclk等于APB1的两倍)

四、软件设计

  使用定时器中断3控制LED1和LED2闪烁

  子函数

  1. #include "timer.h"
  2. #include "led.h"
  3.  
  4. void TIM3_Int_Init(u16 arr, u16 psc) //定时器3初始化,
  5. {
  6. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //
  7. NVIC_InitTypeDef NVIC_Init_Structure; //
  8.  
  9. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
  10.  
  11. TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值
  12. TIM_TimeBaseInitStructure.TIM_Prescaler = psc; //预分频系数
  13. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
  14. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //
  15. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); //
  16.  
  17. TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //开启定时器中断,更新中断
  18.  
  19. //中断优先级
  20. NVIC_Init_Structure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
  21. NVIC_Init_Structure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
  22. NVIC_Init_Structure.NVIC_IRQChannelPreemptionPriority = ; //先占优先级0级
  23. NVIC_Init_Structure.NVIC_IRQChannelSubPriority = ; //从优先级3级
  24. NVIC_Init(&NVIC_Init_Structure); //初始化NVIC寄存器NVIC
  25.  
  26. TIM_Cmd(TIM3, ENABLE); //使能定时器
  27. }
  28.  
  29. void TIM3_IRQHandler(void)
  30. {
  31. if(TIM_GetITStatus(TIM3, TIM_IT_Update)!=RESET) //状态标志位获取
  32. {
  33. LED1 = !LED1;
  34. TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //状态标志位清除
  35. }
  36. }

  主函数

  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "delay.h"
  4. #include "wdg.h"
  5. #include "key.h"
  6. #include "beep.h"
  7. #include "timer.h"
  8.  
  9. int main(void)
  10. {
  11. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组,载misc文件中
  12. delay_init(); //延时初始化
  13. LED_Init(); //LED初始化
  14.  
  15. TIM3_Int_Init(, ); //定时器中断初始化
  16.  
  17. while()
  18. {
  19. LED2 = !LED2;
  20. delay_ms();
  21. }
  22.  
  23. }

嵌入式02 STM32 实验10 定时器中断的更多相关文章

  1. 嵌入式02 STM32 实验08 外部中断

    一.中断 由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理事件的一个程序.该程序执行完成后,CPU接着执行被暂停的程序.这个过程称为中断.(我正在捉泥鳅,但是我妈喊我回家吃饭,我必须回家 ...

  2. 嵌入式02 STM32 实验11 NVIC和中断总结

    一.基础知识 1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 2.STM32只有84个中断,包括16个内核中断和68个可屏蔽中断 3.STM32F103上只有60个 ...

  3. 嵌入式02 STM32 实验07 串口通信

    STM32串口通信(F1系列包含3个USART和2个UART) 一.单片机与PC机串行通信研究目的和意义: 单片机自诞生以来以其性能稳定,价格低廉.功能强大.在智能仪器.工业装备以及日用电子消费产品中 ...

  4. 嵌入式02 STM32 实验01 端口复用和重映射

    内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  ...

  5. 嵌入式02 STM32 实验04跑马灯

    开学STM32 跑马灯的实验主要就是了解GPIO口的配置及使用,我这里是使用库函数进行编程,主要需要设置以下两方面: 1.使能需要使用的IO口的时钟,一共有A.B.C.D.E.F.G七组IO口 2.初 ...

  6. 嵌入式02 STM32 实验06 按键

    按键实验和前面的跑马灯.蜂鸣器主要的区别就是这个是读取外部的输入信号,之前的实验都是对外部输出信号. 一.硬件设计 本实验的硬件为三个按键.两个lED(LED0.LED1).一个蜂鸣器(BEEP). ...

  7. 嵌入式02 STM32 实验05 蜂鸣器

    蜂鸣器:是一种一体化结构的电子讯响器.主要分为分压式蜂鸣器和电磁式蜂鸣器两种类型. 一.有源/无源蜂鸣器(不是指是否带电源,而是有没有自带震荡电路) 1.有源蜂鸣器:有源蜂鸣器自带震荡电路,一通电就会 ...

  8. 嵌入式02 STM32 实验03 时钟系统

    时钟系统是处理器的核心,所以认真学习时钟系统是必要的,有助于深入理解STM32. 由于STM32的外设很多,有的外设不需要太高的时钟频率,同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也越弱,所以对 ...

  9. 嵌入式02 STM32 实验02 端口输入输出各4种模式

    GPIO(General-purpose input/output 通用目的输入/输出端口) 电压(A模拟量)与电平(D数字量) GPIO 8种工作模式(输入四种.输出四种) 1.GPIO_Mode_ ...

随机推荐

  1. (尚028)Vue_案例_交互删除

    删除一条;1.鼠标移入移除这一条时颜色有变化 2.删除当前的todo ================================================================= ...

  2. MySQL 练习题目 二刷 - 2019-11-4 5:55 am

    建表的过程 create table student( sid int not null primary key, sname ) not null, sborn date, ssex ) not n ...

  3. 8.学习springmvc的拦截器

    一.springmvc拦截器介绍和环境搭建 1.介绍: 过滤器:servlet中的一部分,可以拦截所有想要访问的资源. 拦截器:SpringMVC框架中的,只能在SpringMVC中使用并且只能过滤控 ...

  4. shell习题训练

    shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2 ...

  5. qwq。。胡诌qwq

    1,十里寒塘,红楼灯火阑珊,晓风残月,思念醒了一半. 晨钟催落月,淑气催黄鸟,而花千树而你还未还,三月烟花,只剩远影孤帆,珠箔飘灯,大雁独自来返,柳絮铺地,桃花落了菀晚, 琴声弹起,雨落长安,长夜漫漫 ...

  6. request登录案例

    一.案例需求 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表 3.使 ...

  7. 为什么学习JavaScript设计模式,因为它是核心

    那么什么是设计模式呢?当我们在玩游戏的时候,我们会去追求如何最快地通过,去追求获得已什么高效率的操作获得最好的奖品:下班回家,我们打开手机app查询最便捷的路线去坐车:叫外卖时候,也会找附近最近又实惠 ...

  8. Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系

    Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...

  9. 下载 python

    https://www.python.org/ftp/python/ https://www.cnblogs.com/linxue/p/10097785.html https://blog.csdn. ...

  10. python 脚本接受参数

    import os import sys print(sys.argv) bogon:Desktop macname$ python3 test2.py deesws.json dede.json s ...