实验工具:MDK5,STM32F103ZET6开发板
使用固件库编程

上一次学习的是利用定时器4,CH2通道产生PWM波来控制LED灯的闪烁,具体可以参考鱼撞烟花,在最后有代码连接。

这次学习定时器的中断,还是利用定时器4,CH2通道。因为都是利用定时器,所以和PWM的程序有很多相似之处,因此在PWM的程序中进行修改即可。

首先需要先了解一下32的定时器;

STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器。

STM3 的通用 TIMx (TIM2、 TIM3、 TIM4 和 TIM5)定时器功能包括:
1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。

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

3) 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
A.输入捕获
B.输出比较
C. PWM 生成(边缘或中间对齐模式)
D.单脉冲模式输出

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

5)如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
E.支持针对定位的增量(正交)编码器和霍尔传感器电路
F.触发输入作为外部时钟或者按周期的电流管理

今天我们用的就是第五种中的更新(溢出)中断,
首先是中断相关的设置
Timer.c

#include "Timer.h"
#include "led.h"
#include "sys.h"void Tim4_Init(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;  // 初始化结构体NVIC_InitTypeDef NVIC_InitStructure; //中断RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能时钟//相关配置TIM_TimeBaseInitStruct.TIM_Prescaler    = psc;     //a number between 0x0000 and 0xFFFF TIM_TimeBaseInitStruct.TIM_Period      = arr;      //a number between 0x0000 and 0xFFFF TIM_TimeBaseInitStruct.TIM_CounterMode    = TIM_CounterMode_Up; //向上计数TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //分频因子TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStruct);    //使能指定的TIM中断TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器//打开定时器TIM_Cmd(TIM4,ENABLE);   }void TIM4_IRQHandler(void)   //TIM4中断
{if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 {TIM_ClearITPendingBit(TIM4, TIM_IT_Update  );  //清除TIMx的中断标志位:TIM 中断源 LED1=!LED1;}
}

新增加的是中断的相关配置,具体可以查看 NVIC_InitTypeDef,

而 ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t)函数则是用来读取中断的类型(比如我们设置的溢出中断),并判断是否发生中断。

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
该函数的作用是,清除定时器 TIMx 的中断 TIM_IT 标志位。

通过上面简单的几步我们就配置好了定时器的中断,

然后我们去设置一下LED相关的配置

#include "led.h"void LED_Init(void)
{GPIO_InitTypeDef GPIO_Initstruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//定时器时钟使能GPIO_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_Initstruct.GPIO_Pin=GPIO_Pin_13;    //设置引脚GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;//设置速度GPIO_Init(GPIOD,&GPIO_Initstruct);}

main.c

如果你调试时一直显示
…\USER\main.c(13): warning: #223-D: function “xxxx” declared implicitly
尽管你已经添加了相关的xxx.h头文件,不妨试试添加 extern声明一下函数 ,说不定会有惊喜。

只做参考使用,如有不当之处敬请指出。

程序链接:
https://pan.baidu.com/s/1A45DBfZvxv53J7SnG8XinQ
提取码:0lgd

STM32 定时器中断相关知识及配置相关推荐

  1. stm32定时器中断的配置步骤

    stm32定时器中断的配置步骤 1>TIM3 时钟使能 位于低速的APB1总线上(注意:高级定时器是在高速的APB2总线上): RCC_APB1PeriphClockCmd(RCC_APB1Pe ...

  2. 【CubeMX配置stm32定时器中断】

    CubeMX配置stm32定时器中断 一.使用CubeMX对STM32进行基础的配置 1.选择需要使用的定时器 选择TIM2和TIM3示例, 注意: TIM2和其它定时器选择时钟的方法不同,TIM3等 ...

  3. stm32定时器中断配置及使用

    stm32定时器中断配置及使用 定时器中断就是:可以周期性的执行某些功能,而不受main函数的影响. 我们以通用定时器time3为例说明 1.首先配置时钟源为内部时钟,分频和充装载值根据自己需要填入, ...

  4. 7. STM32——定时器中断(1秒闪烁灯)

    STM32--定时器中断(1秒闪烁灯) 基本框架 1. 配置定时器时钟 在 stm32f10x_rcc.h 头文件中查找相关函数函数 2. 配置定时器结构体 在 stm32f10x_tim.h 头文件 ...

  5. STM32定时器中断显示时间

    前言 利用STM32的定时器中断,实现时间的显示.我们知道利用定时器中断只能进行tick的计算,然而用来显示时间我们应该怎么办呢?经过项目的实际运用,我发现利用定时器中断配合串口通讯也能实现时间显示. ...

  6. STM32定时器中断

    目录 一.关于STM32定时器中断 1.定时器分类 2.通用定时器的功能特点 3.定时器中断的触发 4.定时时钟计算方法 二.CubeMX初始化配置 1.芯片选型(我们这里运用的STM32F103C8 ...

  7. STM32定时器中断配置

    1.使能时钟 定时器时钟 2.配置定时器结构体.使能 3.开启定时器中断,配置中断结构体 配置例子 #include "tim.h" #include "stm32f10 ...

  8. stm32定时器中断_stm32F4之定时器的基本使用

    概述 上一篇说了stm32F4GPIO的使用,这篇说说定时器的使用 一. stm32F407的定时器资源介绍: ​ STM32F407有14个定时器,其中有12个16位的定时器,2个32位的定时器 这 ...

  9. STM32定时器中断实验-学习笔记

    目录 目录 目录 通用定时器简介 寄存器 控制寄存器 (TIMx_CR1) DMA/中断使能寄存器(TIMx_DIER) 预分频寄存器(TIMx_PSC) TIMx_CNT 寄存器 自动重装载寄存器( ...

最新文章

  1. DIY机器人?硬件创新也是潮流
  2. 解决 Virtual PC 在 XP PAE模式下无法运行的问题
  3. excel vba 不可查看
  4. ESP32的FLASH、NVS、SPIFFS、OTA等存储分布以及启动过程
  5. 独家下载!Java工程师成神必备宝典
  6. xml学习4-dtd
  7. WORD页眉如何引用章节名?
  8. 《天天数学》连载44:二月十三日
  9. tar:归档中找不到 tar: 由于前次错误,将以上次的错误状态退出
  10. java web 的map_javaweb开发过程中小工具系列之将Map转换成对象
  11. 《FPGA 应用开发入门与典型实例》(修订版)
  12. 谭浩强《C语言程序设计第五版》第一章学习笔记
  13. linux添加雅黑字体,linux安装微软雅黑等字体
  14. PKU四日游(信息科学夏令营)
  15. 微带线等效电感仿真与设计
  16. 北京化工大学计算机复试面试题,北京化工大学综合素质测试面试题历年总结
  17. 好的网站标志设计之意象运用手法
  18. 实验十五 Java Swing 图形用户界面程序设计应用
  19. 明年英特尔将推出最新Skylake Xeon芯片
  20. 没有一只蟹能活着爬出上海

热门文章

  1. 三种编程规则:驼峰命名法、帕斯卡命名法、匈牙利名
  2. 如何解决Tomcat下中文乱码问题?
  3. C语言:习题2-5 求平方根序列前N项和.2021-08-02
  4. 毕业设计管理系统 数据库设计
  5. GoLand奔溃之后,文件目录变灰色,如何解决?
  6. Import Netscaler VPX10.5 to Hyper-V 2012R2
  7. 聚类算法——kmeans和meanshift
  8. nsfw什么颜色_“ NSFW”是什么意思,以及如何使用它?
  9. WD_考研计算机C语言基础002【统考中的C语言】
  10. MySQL week()函数及参数mode详解