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

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

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

c 复制代码
#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、定时器等),以便简化开发流程。

相关推荐
HQB202611 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science13 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn13 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
沉淀的.晴天13 小时前
can总线
stm32
桀人14 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯15 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C15 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路15 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc16 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院16 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法