stm32单片机之外部脉冲捕获例程

2023-09-12 17:39:42

stm32单片机之外部脉冲捕获例程


定时器通道1来捕获外部脉冲,并且当脉冲到来时,通过HAL库的回调函数来处理这个事件。

#include "stm32f4xx_hal.h"  
  
// 定义一个TIM_HandleTypeDef结构体  
TIM_HandleTypeDef htim1;  
  
void SystemClock_Config(void);  
void GPIO_Init(void);  
void TIM1_Init(void);  
  
int main(void)  
{  
    HAL_Init();  // 初始化HAL库  
  
    SystemClock_Config();  // 配置系统时钟  
  
    GPIO_Init();  // 初始化GPIO(如果需要)  
  
    TIM1_Init();  // 初始化TIM1定时器  
  
    HAL_TIM_Base_Start_IT(&htim1);  // 启动定时器并开启中断  
  
    while (1)  
    {  
    }  
}  
  
// 系统时钟配置函数  
void SystemClock_Config(void)  
{  
    // 请根据具体的硬件配置进行适当的设置  
}  
  
// GPIO初始化函数  
void GPIO_Init(void)  
{  
    // 请根据具体的硬件配置进行适当的设置  
}  
  
// TIM1定时器初始化函数  
void TIM1_Init(void)  
{  
    __HAL_RCC_TIM1_CLK_ENABLE();  // 使能TIM1时钟  
  
    htim1.Instance = TIM1;  // 设置定时器实例为TIM1  
    htim1.Init.Prescaler = 8399;  // 设置预分频值为8399,得到10KHz的计数频率(如果外部脉冲是100MHz)  
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;  // 设置向上计数模式  
    htim1.Init.Period = 9999;  // 设置自动重装载寄存器的值为9999,得到10ms的计数周期(如果外部脉冲是100MHz)  
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;  // 设置时钟分频因子为1  
    HAL_TIM_Base_Init(&htim1);  // 初始化TIM1定时器基本功能  
  
    HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);  // 设置中断优先级(可根据需要调整)  
    HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);  // 使能TIM1中断  
}  
  
// TIM1中断处理函数  
void TIM1_UP_TIM10_IRQHandler(void)  
{  
    HAL_TIM_IRQHandler(&htim1);  // 处理TIM1中断事件  
}  
  
// TIM1中断回调函数  
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)  
{  
    if (htim->Instance == htim1.Instance)  // 判断是TIM1定时器中断回调  
    {  
        // 此处编写处理外部脉冲的代码,例如:  
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);  // 翻转GPIOA的第0个引脚的状态(LED)  
    }  
}

注意:以上代码仅供参考,实际开发中需要根据具体硬件和开发环境进行适配。另外,在STM32CubeMX工具中,可以自动生成初始化代码(包括GPIO、定时器等),以便简化开发流程。

更多推荐

提交本地项目到GitHub

文章目录1下载git1.1通过homebrew安装Git1.2通过Xcode安装2创建sshkey、配置git3提交本地项目到GitHub说明:该博文参考这篇文章和这段视频1下载git1.1通过homebrew安装Git1、未安装homebrew,需安装homebrew/usr/bin/ruby-e"$(curl-fs

Unity中Shader的屏幕抓取 GrabPass

文章目录前言一、抓取1、抓取指令2、在使用抓取的屏幕前,需要像使用属性一样定义一下,_GrabTexture这个名字是Unity定义好的前言Unity中Shader的屏幕抓取GrabPass一、抓取1、抓取指令屏幕的抓取需要使用一个PassGrabPass{}GrabPass{“NAME”}2、在使用抓取的屏幕前,需要

Apache Doris 快速入门

1.基本概念FE,Frontend,前端节点,接收用户查询请求,SQL解析,执行计划生成,元数据管理,节点管理等BE,Backend,后端节点,数据存储,执行查询计划。前端节点FE和后端节点BE各自独立运行,互不影响。broker:用来和外部文件系统打交道2.修改配置DORIS_HOME=/export/server/

【数据结构】&&【C++】红黑树RBTree的模拟实现(平衡搜索二叉树)

【数据结构】&&【C++】红黑树的模拟实现(平衡搜索二叉树)一.红黑树的性质二.红黑树的模拟实现1.结点的定义2.搜索树的插入3.变色+向上处理4.旋转+变色三.红黑树与AVL树的差别四.完整代码一.红黑树的性质1.什么是红黑树?红黑树是一种搜索二叉树,但又在搜索树的基础上,在每个结点上增加一个存储位表示结点的颜色,颜

国际版阿里云/腾讯云免开户:云存储服务:云存储服务能够让你随时随地拜访和同享文件

云存储服务:云存储服务能够让你随时随地拜访和同享文件云存储服务是一种基于云技术的存储渠道,能够让用户存储、管理和同享各种类型的数据文件,如文档、图片、视频、音频等。这种服务具有许多长处,以下是对其进行的详细分析:长处:​随时随地拜访:云存储服务答应用户从任何地方、任何设备拜访文件,只要有互联网衔接即可。这对于在家办公、

Apache解析漏洞复现

一、多后缀解析漏洞1.漏洞说明配置apache时,对于apache配置不熟练,配置命令不清楚,在配置PHP文件处理程序时,配置命令存在问题:位于漏洞环境目录的conf/docker-php.conf里的配置命令(AddHandlerapplication/x-httpd-php.php),该命令会将后缀中只要含有.ph

金融风控建模常用指标介绍(WOE, IV, KS, PSI)

金融风控建模常用指标介绍(WOE,IV,KS,PSI)近期在做金融风控相关项目,有必要把特征和模型的衡量指标总结下,以备不时之需。这次主要介绍4个指标(WOE,IV,KS,PSI)。WOE(WeightofEvidence,用于特征变换,衡量变量某个取值的预测能力)WOE算法已在我的另一篇文章数据预处理-分箱(Binn

准备我们心爱的IDEA写Jsp

JSP学习一、准备我们心爱的IDEAnew一个项目:NewProject-->Next-->Next-->Finsh二、配置好服务器Tomcat-9.0.301.>在WEB-INF下创建一个Lib包将jsp-api.jar复制进去,并使其生效未生效前:生效过程:2.>用锤子配置汤姆猫TomCat点击+号选择本地的汤姆猫

idea中dataBase模板生成

controller.java.vm##定义初始变量#set($tableName=$tool.append($tableInfo.name,"Controller"))##设置回调$!callback.setFileName($tool.append($tableName,".java"))$!callback.se

基于ssm扶贫产品和扶贫物资捐赠系统033

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路,向着优秀程序员前行!🍅更多优质项目👇🏻👇🏻可点击下方获取🍅文章底部或评论区获取🍅Java项目精品实

ELFK之zookeeper+kafka

目录kafka+zookeeper的系统架构Zookeeper一、zookeeper概述二、zookeeper特点三、zookeeper选举机制四、应用场景五、zookeeper实验实例Kafka一、概述为什么需要消息队列(MQ)使用消息队列的好处消息队列的两种模式Kafka定义二、Kafka的特性三、Kafka系统架

热文推荐