• STM32 输入捕获配置


      在STM32 的定时器,除了 TIM6 TIM7,就是通过检测 TIMx_CHx 上的
    边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候, 将当时定时器

    的值(TIMx_CNT存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,
    完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。


    1)开启 TIM5 时钟和 GPIOA 时钟, 配置 PA0 为下拉输入。

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能 TIM5 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIOA 时钟

    2) 初始化 TIM5,设置 TIM5 ARR PSC

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式
    TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化 Tim5

    3)设置 TIM5 的输入比较参数,开启输入捕获

    void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)

    TIM_ICInitTypeDef TIM5_ICInitStructure;
    TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1 映射到 TI1
    TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
    TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到 TI1
    TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
    TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
    TIM_ICInit(TIM5, &TIM5_ICInitStructure);

    4)使能捕获和更新中断(设置 TIM5 DIER 寄存器)

    TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断和捕获中断

    if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){}//判断是否为更新中断
    if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET){}//判断是否发生捕获事件
    TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);//清除中断和捕获标志位

    6)使能定时器(设置 TIM5 CR1 寄存器)

    TIM_Cmd(TIM5,ENABLE ); //使能定时器 5

     1 //定时器 5 通道 1 输入捕获配置
     2 TIM_ICInitTypeDef TIM5_ICInitStructure;
     3 void TIM5_Cap_Init(u16 arr,u16 psc)
     4 {
     5     GPIO_InitTypeDef GPIO_InitStructure;
     6     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
     7     NVIC_InitTypeDef NVIC_InitStructure;
     8     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //①使能 TIM5 时钟
     9   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //①使能 GPIOA 时钟
    10   //初始化 GPIOA.0 ①
    11   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 设置
    12   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入
    13   GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.0
    14   GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉
    15   //②初始化 TIM5 参数
    16     TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
    17     TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频器
    18     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim
    19     TIM_TimeBaseStructure.TIM_CounterMode =         TIM_CounterMode_Up; //TIM 向上计数模式
    20     TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //初始化 TIMx
    21   //③初始化 TIM5 输入捕获通道 1
    22     TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //选择输入端 IC1 映射到 TI1 上
    23     TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
    24     TIM5_ICInitStructure.TIM_ICSelection =                 TIM_ICSelection_DirectTI; //映射到 TI1 上
    25     TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频
    26     TIM5_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=0000 配置输入滤波器 不滤波
    27     TIM_ICInit(TIM5, &TIM5_ICInitStructure); //初始化 TIM5 输入捕获通道 1
    28   //⑤初始化 NVIC 中断优先级分组
    29     NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM3 中断
    30     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级 2 级
    31     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级 0 级
    32     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
    33     NVIC_Init(&NVIC_InitStructure); //初始化 NVIC
    34     TIM_ITConfig( TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//④允许更新中断捕获中断
    35     TIM_Cmd(TIM5,ENABLE ); //⑥使能定时器 5
    36 }
    37         

    知识来源:STM32F1开发指南-库函数版本_V3.1 

  • 相关阅读:
    2013-06-28,“万能数据库查询分析器”在中关村本月数据库类下载排行中重返前10位
    Oracle 存储过程
    强化学习精要:核心算法与TensorFlow实现
    深入理解TensorFlow:架构设计与实现原理
    Vue.js实战
    TensorFlow机器学习实战指南
    深入浅出React和Redux
    Flutter技术入门与实战
    TensorFlow:实战Google深度学习框架
    深度学习:一起玩转TensorLayer
  • 原文地址:https://www.cnblogs.com/zengsf/p/7204748.html
Copyright © 2020-2023  润新知