【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

00. 目录

文章目录

    • 00. 目录
    • 01. 定时器中断相关API
      • 1.1 TIM_InternalClockConfig
      • 1.2 TIM_TimeBaseInit
      • 1.3 TIM_TimeBaseInitTypeDef
      • 1.4 TIM_ClearFlag
      • 1.5 TIM_ITConfig
      • 1.6 TIM_Cmd
      • 1.7 中断服务函数
      • 1.8 TIM_ETRClockMode2Config
    • 02. 定时器定时中断接线图
    • 03. 定时器定时中断示例
    • 04. 定时器外部时钟接线图
    • 05. 定时器外部时钟示例
    • 06. 程序下载
    • 07. 附录

01. 定时器中断相关API

1.1 TIM_InternalClockConfig

/*** @brief  Configures the TIMx internal Clock* @param  TIMx: where x can be  1, 2, 3, 4, 5, 8, 9, 12 or 15*         to select the TIM peripheral.* @retval None*/
void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
功能:设置 TIMx 内部时钟
参数:TIMx:x 可以是 23 或者 4,来选择 TIM 外设    
返回值:

1.2 TIM_TimeBaseInit

/*** @brief  Initializes the TIMx Time Base Unit peripheral according to *         the specified parameters in the TIM_TimeBaseInitStruct.* @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.* @param  TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef*         structure that contains the configuration information for the *         specified TIM peripheral.* @retval None*/
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
功能:根据 TIM_TimeBaseInitStruct 中指定的参数初始化 TIMx 的时间基数单位
参数:TIMx:x 可以是 23 或者 4,来选择 TIM 外设TIMTimeBase_InitStruct:指向结构 TIM_TimeBaseInitTypeDef 的指针,包含了TIMx 时间基数单位的配置信息    
返回值:

1.3 TIM_TimeBaseInitTypeDef

/** * @brief  TIM Time Base Init structure definition* @note   This structure is used with all TIMx except for TIM6 and TIM7.    */typedef struct
{uint16_t TIM_Prescaler;         uint16_t TIM_CounterMode;       uint16_t TIM_Period;            uint16_t TIM_ClockDivision;    uint8_t TIM_RepetitionCounter;  
} TIM_TimeBaseInitTypeDef; TIM_PeriodTIM_Period 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x00000xFFFF之间。
TIM_PrescalerTIM_Prescaler 设置了用来作为 TIMx 时钟频率除数的预分频值。它的取值必须在0x00000xFFFF之间。/** @defgroup TIM_Counter_Mode * @{*/
#define TIM_CounterMode_Up                 ((uint16_t)0x0000)
#define TIM_CounterMode_Down               ((uint16_t)0x0010)
#define TIM_CounterMode_CenterAligned1     ((uint16_t)0x0020)
#define TIM_CounterMode_CenterAligned2     ((uint16_t)0x0040)
#define TIM_CounterMode_CenterAligned3     ((uint16_t)0x0060)/** @defgroup TIM_Clock_Division_CKD * @{*/
#define TIM_CKD_DIV1                       ((uint16_t)0x0000)
#define TIM_CKD_DIV2                       ((uint16_t)0x0100)
#define TIM_CKD_DIV4                       ((uint16_t)0x0200)TIM_RepetitionCounter 只用在高级定时器中    

1.4 TIM_ClearFlag

/*** @brief  Clears the TIMx's pending flags.* @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.* @param  TIM_FLAG: specifies the flag bit to clear.*   This parameter can be any combination of the following values:*     @arg TIM_FLAG_Update: TIM update Flag*     @arg TIM_FLAG_CC1: TIM Capture Compare 1 Flag*     @arg TIM_FLAG_CC2: TIM Capture Compare 2 Flag*     @arg TIM_FLAG_CC3: TIM Capture Compare 3 Flag*     @arg TIM_FLAG_CC4: TIM Capture Compare 4 Flag*     @arg TIM_FLAG_COM: TIM Commutation Flag*     @arg TIM_FLAG_Trigger: TIM Trigger Flag*     @arg TIM_FLAG_Break: TIM Break Flag*     @arg TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag*     @arg TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag*     @arg TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag*     @arg TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag* @note*   - TIM6 and TIM7 can have only one update flag. *   - TIM9, TIM12 and TIM15 can have only TIM_FLAG_Update, TIM_FLAG_CC1,*      TIM_FLAG_CC2 or TIM_FLAG_Trigger. *   - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_FLAG_Update or TIM_FLAG_CC1.   *   - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15. *   - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.   * @retval None*/
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
功能:清除 TIMx 的待处理标志位
参数:TIMx:x 可以是 23 或者 4,来选择 TIM 外设TIM_FLAG:待清除的 TIM 标志位   
返回值:

1.5 TIM_ITConfig

/*** @brief  Enables or disables the specified TIM interrupts.* @param  TIMx: where x can be 1 to 17 to select the TIMx peripheral.* @param  TIM_IT: specifies the TIM interrupts sources to be enabled or disabled.*   This parameter can be any combination of the following values:*     @arg TIM_IT_Update: TIM update Interrupt source*     @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source*     @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source*     @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source*     @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source*     @arg TIM_IT_COM: TIM Commutation Interrupt source*     @arg TIM_IT_Trigger: TIM Trigger Interrupt source*     @arg TIM_IT_Break: TIM Break Interrupt source* @note *   - TIM6 and TIM7 can only generate an update interrupt.*   - TIM9, TIM12 and TIM15 can have only TIM_IT_Update, TIM_IT_CC1,*      TIM_IT_CC2 or TIM_IT_Trigger. *   - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1.   *   - TIM_IT_Break is used only with TIM1, TIM8 and TIM15. *   - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.    * @param  NewState: new state of the TIM interrupts.*   This parameter can be: ENABLE or DISABLE.* @retval None*/
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
功能:使能或者失能指定的 TIM 中断
参数:TIMx:x 可以是 23 或者 4,来选择 TIM 外设TIM_IT:待使能或者失能的 TIM 中断源NewState:TIMx 中断的新状态    
返回值:

1.6 TIM_Cmd

/*** @brief  Enables or disables the specified TIM peripheral.* @param  TIMx: where x can be 1 to 17 to select the TIMx peripheral.* @param  NewState: new state of the TIMx peripheral.*   This parameter can be: ENABLE or DISABLE.* @retval None*/
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
功能:使能或者失能 TIMx 外设
参数:TIMx:x 可以是 23 或者 4,来选择 TIM 外设NewState: 外设 TIMx 的新状态   
返回值:

1.7 中断服务函数

参考程序

void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){Num ++;TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}

1.8 TIM_ETRClockMode2Config

/*** @brief  Configures the External clock Mode2* @param  TIMx: where x can be  1, 2, 3, 4, 5 or 8 to select the TIM peripheral.* @param  TIM_ExtTRGPrescaler: The external Trigger Prescaler.*   This parameter can be one of the following values:*     @arg TIM_ExtTRGPSC_OFF: ETRP Prescaler OFF.*     @arg TIM_ExtTRGPSC_DIV2: ETRP frequency divided by 2.*     @arg TIM_ExtTRGPSC_DIV4: ETRP frequency divided by 4.*     @arg TIM_ExtTRGPSC_DIV8: ETRP frequency divided by 8.* @param  TIM_ExtTRGPolarity: The external Trigger Polarity.*   This parameter can be one of the following values:*     @arg TIM_ExtTRGPolarity_Inverted: active low or falling edge active.*     @arg TIM_ExtTRGPolarity_NonInverted: active high or rising edge active.* @param  ExtTRGFilter: External Trigger Filter.*   This parameter must be a value between 0x00 and 0x0F* @retval None*/
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)
功能:配置TIMx外部时钟模式2 
参数:TIMx:x可以是23或者4,来选择TIM外设TIM_ExtTRGPrescaler:外部触发预分频TIM_ExtTRGPolarity:外部时钟极性    ExtTRGFilter:外部触发滤波器。该参数取值在0x00xF之间。        
返回值:

02. 定时器定时中断接线图

在这里插入图片描述

03. 定时器定时中断示例

timer.h

#ifndef __TIMER_H__
#define __TIMER_H__#include "stm32f10x.h"                  // Device headervoid timer_init(void);#endif

timer.c

#include "timer.h"void timer_init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStruct;//1. 开启时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//2. 开启定时器2内部时钟TIM_InternalClockConfig(TIM2);//3. 初始化定时器TIM_TimeBaseInitStruct.TIM_Period = 10000 - 1;TIM_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //高级定时器使用TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//4. 清除中断标志TIM_ClearFlag(TIM2, TIM_FLAG_Update);//5. 使能中断TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//6. 设置NVICNVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStruct);//7. 使能定时器TIM_Cmd(TIM2, ENABLE);
}

main.c

#include "stm32f10x.h"#include "delay.h"
#include "oled.h"
#include "timer.h"int16_t num;int main(void){		 //初始化OLED_Init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);timer_init();OLED_ShowString(1, 1, "num:");while (1){OLED_ShowNum(1, 5, num, 5);}return 0;}void TIM2_IRQHandler(void){if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){num ++;TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}}

04. 定时器外部时钟接线图

在这里插入图片描述

05. 定时器外部时钟示例

timer.h

#ifndef __TIMER_H__
#define __TIMER_H__#include "stm32f10x.h"                  // Device headervoid timer_init(void);#endif

timer.c

#include "timer.h"void timer_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStruct;//1. 开启时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);//2. 配置TIMx外部时钟模式2 TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0xf);//3. 初始化定时器TIM_TimeBaseInitStruct.TIM_Period = 10 - 1;TIM_TimeBaseInitStruct.TIM_Prescaler = 1 - 1;TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //高级定时器使用TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//4. 清除中断标志TIM_ClearFlag(TIM2, TIM_FLAG_Update);//5. 使能中断TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//6. 设置NVICNVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE ;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStruct);//7. 使能定时器TIM_Cmd(TIM2, ENABLE);
}

main.c

#include "stm32f10x.h"#include "delay.h"
#include "oled.h"
#include "timer.h"int16_t num;int main(void){		 //初始化OLED_Init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);timer_init();OLED_ShowString(1, 1, "num:");while (1){OLED_ShowNum(1, 5, num, 5);OLED_ShowNum(2, 5, TIM_GetCounter(TIM2), 5);}return 0;}void TIM2_IRQHandler(void){if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){num ++;TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}}

06. 程序下载

09-定时器定时中断.rar

10-定时器外部时钟.rar

07. 附录

参考: 【STM32】江科大STM32学习笔记汇总

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

命令行模式的rancher如何安装?

在学习kubectl操作的时候,发现rancher也有命令行模式,学习整理记录此文。 说明 rancher 命令是 Rancher 平台提供的命令行工具,用于管理 Rancher 平台及其服务。 前提 已经参照前文安装过了rancher环境了,拥有了自己的k8s集群…

html5中各标签的语法格式总结以及属性值说明

有关闭标签的元素 a元素 <a href"" target"" title""></a>表格相关元素 table元素&#xff1a;表格标签caption元素&#xff1a;表头thead元素tbody元素&#xff1a;表格主体元素tfoot元素th元素tr元素&#xff1a;行标签td元素&…

VMware17 下载安装教程

VMware17 下载安装ubuntu22.04虚拟机安装 一、VM安装 1.打开官方下载地址&#xff1a;https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 跳转页面后&#xff0c;点击左边的Download oad now&#xff0c;下载的就是最新版的 Workstation 17 …

[元带你学: eMMC协议 31] CRC 错误检测保证可靠性

依公知及经验整理,原创保护,禁止转载。 专栏 《元带你学: eMMC 协议》 <<<< 返回总目录 <<<< 前言 图片来源: www.elprocus.com 对于 eMMC 存储设备,CRC 校验在数据传输过程中起到了重要的作用。它能够检测出数据在存储和传输过程中的错误,确保…

知识付费平台搭建?找明理信息科技,专业且高效

明理信息科技知识付费saas租户平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和…

其他排序(基数排序,希尔排序和桶排序)(数据结构课设篇3,python版)(排序综合)

本篇博客主要详细讲解一下其他排序&#xff08;基数排序&#xff0c;希尔排序和桶排序&#xff09;也是排序综合系列里最后一篇博客。第一篇博客讲解的是LowB三人组&#xff08;冒泡排序&#xff0c;插入排序&#xff0c;选择排序&#xff09;&#xff08;数据结构课设篇1&…

【大数据进阶第三阶段之Hive学习笔记】Hive常用命令和属性配置

目录 1、Hive安装 2、HiveJDBC访问 2.1、启动hiveserver2服务 2.2、连接hiveserver2服务 2.3、注意 3、Hive常用交互命令 3.1、“-e”不进入hive的交互窗口执行sql语句 3.2、“-f”执行脚本中sql语句 4、Hive其他命令操作 4.1、退出hive窗口 4.2、在hive cli命令窗口…

OpenSSL——升级

OpenSSL&#xff08;Open Secure Sockets Layer&#xff09;是一个开源的软件库&#xff0c;提供了SSL和TLS协议的实现&#xff0c;用于加密通信。它广泛用于安全连接&#xff0c;例如在网站上通过HTTPS协议进行安全的数据传输. 但是从openssl申请道德证书是不安全的。对于网站…

第10课 实现多对多音视频会议功能

在前两节课&#xff0c;我们将推流端与播放端合并为一对一音视频聊天功能并解决了关键的回声问题&#xff0c;在此基础上&#xff0c;我们可以进一步改进实现多对多的视频会议功能。 1.备份demo9并修改demo9为demo10。 2.打开工程文件&#xff0c;修改mfc为四分屏画面。 界面…

Kali Linux——获取root权限

目录 一、设置root密码 【操作命令】 【操作实例】 二、临时获取root权限 【操作命令】 【操作实例】 三、提升用户到root 1、获取root权限 2、进入/etc/passwd 3、查看root账号ID 4、找到需要修改的用户 5、输入i&#xff0c;进入编辑模式 6、把用户的ID改成跟r…

CSS 实现两个圆圈重叠部分颜色不同

这是期望实现的效果&#xff0c;由图可知&#xff0c;圆圈底图透明度是0.4&#xff0c;左侧要求重叠部分透明度是0.7&#xff0c;所以不能通过简单的透明度叠加来实现最右侧的效果。 这就需要另外新建一个图层来叠加在两个圆圈重叠上方。 直接看代码 .circle_hight {width: 1…

stm32引脚输入输出设置寄存器操作汇总

下图时正点原子i2c时使用的宏定义 下面的代码是对PA0-PH15的引进行了穷举法代码&#xff0c;使用的时候只需要拷贝三行相应的引脚即可。 //IO方向设置 #define IIC_SDA PAout(0) //SDA #define SDA_IN() {GPIOA->CRL&0XFFFFFFF0;GPIOA->CRL|(u32)8<<0…

gitlab 配置 二

一 环境说明 群晖Nas DS418DELL XPS serverGitlab ce 二 需要实现的功能 外网可以访问&#xff0c;gitlab使用https的方式访问。wiki issue 等都可以上传图片和附件。 三 操作步骤 因为群晖上有证书&#xff0c;并且由群晖做转发功能。因此证书上&#xff0c;采用群晖的证书…

Linux目录结构及路径描述方式

1.Linux目录结构 Linux与Windows不同&#xff0c;Linux没有盘符这个概念, 只有一个根目录 /, 所有文件都在它下面 2.Linux路径的描述方式 在Linux系统中&#xff0c;路径之间的层级关系&#xff0c;使用&#xff1a;/ 来表示 在Windows系统中&#xff0c;路径之间的层级关系…

性能分析与调优: Linux 使用ELRepo升级CentOS内核

目录 一、实验 1.环境 2.agent 服务器使用ELRepo升级CentOS内核 二、问题 1. RHEL-7, SL-7 或者 CentOS-7系统如何安装ELRepo 2.RHEL-8或者RHEL-9系统如何安装ELRepo 一、实验 1.环境 &#xff08;1&#xff09;主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系…

企业一线员工定岗定编全解析

引言&#xff1a;在生产制造企业中&#xff0c;由于一线员工工作内容单一&#xff0c;与产量线性关系明显&#xff0c;因此针对一线员工的定编方法最简单有效的就是通过数据计算的方式。人力资源专家——华恒智信根据多年以来对生产制造企业定岗定编的关注与研究得出的经验&…

多线程高级面试题

1. 什么是 ThreadLocal&#xff1f; 参考答案 ThreadLocal 叫做本地线程变量&#xff0c;意思是说&#xff0c;ThreadLocal 中填充的的是当前线程的变量&#xff0c;该变量对其他线程而言是封闭且隔离的&#xff0c;ThreadLocal 为变量在每个线程中创建了一个副本&#xff0c;…

【airsim】两分钟,用python脚本获取虚拟数据集

现有的教程在配置基于python的airsim环境过程中&#xff0c;都要求执行完整的编译步骤。然而&#xff0c;在linux和windows上的编译过程中会遇到诸多问题&#xff0c;大概需要半天左右时间。 如果你只是想采集一些数据&#xff0c;测试一下虚拟数据的效果&#xff0c;那么解决…

一个企业可以申请多少公众号?

一般可以申请多少个公众号&#xff1f;目前公众号申请数量的规定是从2018年底开始实施的&#xff0c;至今没有变化。规定如下&#xff1a;1、个人可以申请1个个人主体的公众号&#xff1b;2、企业&#xff08;有限公司&#xff09;可以申请2个公众号&#xff1b;3、个体户可以申…

2022年多元统计分析期中试卷

多元正态均值检验 一、去年卖出的一岁牛犊的平均身高为 51 英寸&#xff0c;平均背脂厚度是 0.3 英寸&#xff0c;平均肩高是 56 英寸。已知今年卖出的 76 头一岁牛犊的 3 项平均指标为(50, 0.2, 54)‘&#xff0c;样本协差阵及其逆矩阵为 S [ 3.00 − 0.053 2.97 − 0.053 0…