【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.hqwc.cn/news/309842.html

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

相关文章

智能对话意图分析服务接口

机器人聊天,智能助手,内容生成,智能办公,智能辅助,智能搜索 一、接口介绍 通过接收用户提出的问题、输入的图片和文档等需求,准确识别其对话意图,并触发相应的回复。同时,整合了AP…

人员离岗识别摄像机

人员离岗识别摄像机是一种通过摄像技术来监测和识别工作场所员工离开工作岗位的设备。该摄像机能够准确识别员工的面部特征,并通过算法识别出员工是否离开了工作岗位,从而提高工作场所的管理效率。摄像机采用高清摄像头和人脸识别技术,能够精…

【办公技巧】怎么批量提取文件名到excel

Excel是大家经常用来制作表格的文件,比如输入文件名,如果有大量文件需要输入,用张贴复制或者手动输入的方式还是很费时间的,今天和大家分享如何批量提取文件名。 打开需要提取文件名的文件夹,选中所有文件&#xff0c…

解锁加密生态:用户钱包画像分析

作者:stellafootprint.network 随着加密资产的爆发式增长,对链上交易动态的分析变得至关重要。像 Footprint Analytics 这样的平台让投资者、开发者和企业可以通过用户钱包画像分析(Wallet Profile),去解锁加密生态。 用户钱包画…

HarmonyOS自己确认代码没问题 但通过不了ArkTS校验 利用 // @ts-ignore 跳过语法校验

有些时候 我们代码从外部获取的类型之类的 ArkTS校验比较严 之间就标红了 那么这种情况 我们如果确认他是没有问题的 在报错代码的前面加上// ts-ignore 就可以让他不做语法校验 但这个东西用的一定要慎重 至少要确保是没问题的

数字人私人定制

数字人是什么? 在回答这个问题之前,我们先回答另一个问题,人如何与人工智能交流?目前可以通过文字、语音、电脑屏幕、手机屏幕、平板、虚拟现实设备等和人工智能交流,为了得到更好的交流体验,人工智能必然…

关于蚁剑(AntSword)的溯源反制

中国蚁剑(AntSword) RCE漏洞 此漏洞在AntSword2.7.1版本上修复 ,所以适用于AntSword2.7.1以下版本。 下面介绍被低版本蚁剑攻击后如何进行溯源反打 以物理机为攻击机,虚拟机kali模拟受害者,之后使用kali进行溯源反制 物理机内网ip地址&…

2023年03月21日_chatgpt宕机事件的简单回顾

你能想象吗 ChatGPT挂了 昨天半夜呢 来自全球各地的用户纷纷发现 ChatGPT的网站弹出了报错警告的信息 然后立即就无法使用了 即使是有特权的plus账户也未能幸免 一时之间呢 chatgptdown的话题在Twitter刷屏 不少重度的用户表示很着急 有的用户说呢没了ChatGPT 这工作…

【基础篇】七、线程上下文类加载器打破双亲委派机制

文章目录 1、SPI机制2、JDBC案例之SPI机制3、打破双亲委派机制:线程上下文类加载器4、打破双亲委派机制:osgi模块化5、JDK9之后的类加载器6、小总结 1、SPI机制 SPI,Service Provider Interface,是JDK内置的一种服务提供发现机制…

Linux基础知识学习

开发工具:Xshell7VMware 首先要明确的是在Linux系统中“目录”文件夹 而所谓"家目录"指的是每个用户所拥有的一个目录,通常默认在 /home 目录下,其名称与用户的用户名相同。 ~代表的是就就是家目录 cd ~就可以直接进入当前用户下…

如何修复msvcp140_1.dll丢失问题,分享多种实测可靠的修复方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140_1.dll丢失”的错误。msvcp140_1.dll是Microsoft Visual C 2015 Redistributable的一个组件,它是运行某些程序所必需的动态链接库文件。动态链接库(DLL&…

点成案例 | 如何利用细胞计数仪在单细胞测序中评估细胞

一、概述 单细胞测序技术能够用来表征异常细胞群,分析稀有细胞和细胞图谱网络,发现异质性等。由于单细胞测序巨大的应用潜力,目前此技术正在经历爆炸性增长。然而,单细胞测序需要成本和时间的大量投资。为了确保时间和资源的投资…