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

相关推荐
KOAN凯擎小妹4 小时前
无源晶振为什么有串联谐振和并联谐振?MCU为什么使用并联晶体?
单片机·嵌入式硬件·晶振·元器件
茯苓gao5 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
木木_王5 小时前
嵌入式学习 | STM32 裸板驱动开发(Day06) | DHT11温湿度传感器超详解(单总线时序+全套驱动代码+智能温湿度报警项目)
驱动开发·stm32·学习
论迹复利6 小时前
蓝牙 OTA 升级断连、升级失败底层链路问题定位
嵌入式硬件·安全·bt
振南的单片机世界7 小时前
3.5T静默分帧,CRC16校验:Modbus-RTU帧结构解析
arm开发·stm32·单片机·嵌入式硬件
LingzhiPi7 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件
尼喃7 小时前
42V热拔插认证过压保护芯片:70V耐压+响应<1μs+可调OVP+SOT23-6
嵌入式硬件
0x3F(小茶)7 小时前
STM32 SPI的5种方向模式
c语言·stm32·单片机·嵌入式硬件
BSD_CGQ9 小时前
FSR压力传感器信号调理电路设计要点
单片机·嵌入式硬件·压力传感器·源头工厂·薄膜压力传感器
爱就是恒久忍耐9 小时前
CanFestival移植到STM32 F103芯片(基于HAL库)
stm32·单片机·嵌入式硬件