当前位置: 首页 > article >正文

脉冲计数 记录按下的次数

根据上述原理图  从而写清

#include "counter.h"
#include "stdio.h"

TIM_HandleTypeDef counter_handle ={0};
uint16_t new_count =0;
uint16_t old_count =0;

void counter_init(uint16_t arr,uint16_t psc )
{
    TIM_SlaveConfigTypeDef slave_config ={0};
    counter_handle.Instance =TIM2;
    counter_handle.Init.Prescaler=psc;
    counter_handle.Init.Period =arr;
    counter_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
    HAL_TIM_IC_Init(&counter_handle);
    
    slave_config.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;    //选择外部时钟模式1
    slave_config.InputTrigger =TIM_TS_TI2FP2;            //选择通道2
    slave_config.TriggerFilter =TIM_TRIGGERPOLARITY_FALLING ;     //默认选择下降沿检测
    slave_config.TriggerPolarity =0;                            //滤波器为0
    HAL_TIM_SlaveConfigSynchro(&counter_handle,&slave_config);
    HAL_TIM_IC_Start(&counter_handle,TIM_CHANNEL_2);
    
}

void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
{
     if(htim->Instance == TIM2)
     { 
       //①定义初始化结构体
    GPIO_InitTypeDef gpio_initstruct;
         
    //打开时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();   //注意看硬件原理图中LED灯的引脚在哪一个组
    __HAL_RCC_TIM2_CLK_ENABLE();    //开启定时器时钟
    //调用GPIO初始化函数
    gpio_initstruct.Pin = GPIO_PIN_0;                         //LED1、LED2对应的引脚
    gpio_initstruct.Pull = GPIO_MODE_AF_PP;                       //复用推挽输出
    gpio_initstruct.Mode =GPIO_MODE_OUTPUT_PP;                //上拉
    gpio_initstruct.Speed =GPIO_SPEED_FREQ_HIGH;              //高速
    HAL_GPIO_Init(GPIOA,&gpio_initstruct);
   
     }
}

void count_get(void)
{

    new_count=__HAL_TIM_GET_COUNTER(&counter_handle);               
    if(old_count!=new_count)                                  //设置新老比较的原因是 __HAL_TIM_GET_COUNTER()会把未按键的当前值一直在while中循环  使得持续输出
    {
    
    old_count =new_count;
    printf("CNT: %d\r\n",new_count);
    }
}

只需注意新老的值比较  这是因为避免未按键时一直循环   

最终结果


http://www.kler.cn/a/445788.html

相关文章:

  • BGP的六种状态分别是什么?
  • ElementPlus Table 表格实现可编辑单元格
  • 高中数学刷题版:集合与函数概念-函数的概念[笔记总结-干货]
  • WatchAlert - 开源多数据源告警引擎
  • 10. 考勤信息
  • Vue.js前端框架教程1:Vue应用启动和Vue组件
  • C++ STL 中有哪些容器?它们的主要区别是什么?
  • CSS系列(19)-- 主题切换详解
  • Redis(2)常用命令
  • deepin 安装 habse
  • 【AI驱动的泛型数据结构:智能计算的核心】
  • Vscode运行GO文件
  • 【自用】通信内网部署rzgxxt项目_02,前端pipeCloud部署(使用 nginx 部署 + NSSM 控制非窗口运行)
  • 模型优化和迁移学习
  • Windows安装Docker Desktop
  • VTK编程指南<十二>:VTK图像数据结构及图像创建与显示
  • 性能评估工具之unixbench
  • 大恒相机开发(2)—Python软触发调用采集图像
  • Ubuntu2404部署wikijs(非docker方式)
  • 前端项目性能优化(详细)