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


    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)  
        }  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

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

  • 相关阅读:
    【王道计算机组成原理】第二章 数据的表示和运算
    redis的redis.service配置
    多御安全浏览器升级1.7.6版,新增扫描二维码功能
    KT6368A蓝牙芯片认证客户FCC定频出现频偏的处理总结
    华为OD:0019-0020:-最小步骤数—删除字符串中出现次数最少的字符
    FOC程序cubemx配置-ADC配置
    他潜伏三年想插它后门,最终还是输给了另一个他
    ARFoundation系列讲解 - 92 涂鸦效果
    C++ Protobuf
    婴儿沐浴座椅上架亚马逊美国站安全标准要求ASTM F1967-19测试,CPC认证
  • 原文地址:https://blog.csdn.net/techenliu/article/details/132837396