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

实现按键按下(低电平)检测到下降沿

按照流程进行编程

步骤1:

初始化函数

包括时基工作参数配置  输入通道配置  更新中断使能   使能捕获、捕获中断及计数器  

HAL_TIM_IC_Init(&ic_handle)    //时基参数配置

HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2)   //输入通道配置

包括ICPolarity    ICSelection   ICPrescaler  ICFilter  四种参数的设置  极性(初始设置检测下降沿还是上升沿)    定时器直接来接到输入捕获通道(映射)   分频  滤波

__HAL_TIM_ENABLE_IT(&ic_handle,TIM_IT_UPDATE);   //更新中断使能
HAL_TIM_IC_Start_IT(&ic_handle,TIM_CHANNEL_2);   /使能捕获 捕获中断 及计数器

步骤2:

msp初始化  包括  定时器时钟 GPIO NVIC

步骤3:

中断服务函数,定时器2中断TIM2_IRQHandler(void)            要包含公共服务函数HAL_TIM_IRQHandler(&ic_handle)

步骤4:

回调函数  HAL_TIM_IC_CaptureCallback (TIM_HandleTypeDef *htim)  回调函数中  写你想要的代码   

#include "ic.h"
#include "stdint.h"
#include "stdio.h"TIM_HandleTypeDef ic_handle={0};void ic_init(uint16_t arr,uint16_t psc)
{TIM_IC_InitTypeDef ic_config ={0};ic_handle.Instance = TIM2;ic_handle.Init.Period = arr;ic_handle.Init.CounterMode =TIM_COUNTERMODE_UP;ic_handle.Init.Prescaler = psc;HAL_TIM_IC_Init(&ic_handle);                       //时基工作参数配置ic_config.ICPolarity = TIM_ICPOLARITY_FALLING;     //选择极性   刚开始捕获的是下降沿 故选择下降沿的模式ic_config.ICSelection = TIM_ICSELECTION_DIRECTTI;  //定时器2被直接连接到相应的输入捕获通道ic_config.ICPrescaler = TIM_ICPSC_DIV1;            //默认不分频ic_config.ICFilter =0;                            //滤不滤波   不滤波设置为0HAL_TIM_IC_ConfigChannel(&ic_handle,&ic_config,TIM_CHANNEL_2);       //输入通道的配置   捕获的边沿   映射   分频   滤波__HAL_TIM_ENABLE_IT(&ic_handle,TIM_IT_UPDATE);   //更新中断使能   第二个参数为更新中断的模式HAL_TIM_IC_Start_IT(&ic_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();   //打开GPIO的时钟__HAL_RCC_TIM2_CLK_ENABLE();  //打开定时器的时钟//调用GPIO初始化函数gpio_initstruct.Pin = GPIO_PIN_1 ;                         //LED1、LED2对应的引脚gpio_initstruct.Pull = GPIO_PULLUP;                        //上拉   gpio_initstruct.Mode =GPIO_MODE_INPUT;                //推挽复用输出gpio_initstruct.Speed =GPIO_SPEED_FREQ_HIGH;              //高速HAL_GPIO_Init(GPIOA,&gpio_initstruct);HAL_NVIC_SetPriority(TIM2_IRQn, 2,2);           //设置NVICHAL_NVIC_EnableIRQ(TIM2_IRQn);                  //设置NVIC               }
}void TIM2_IRQHandler(void)
{HAL_TIM_IRQHandler(&ic_handle);}
void HAL_TIM_IC_CaptureCallback (TIM_HandleTypeDef *htim)
{printf("捕获到下降沿\r\n");}

主函数:

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "ic.h"int main(void) {HAL_Init();stm32_clock_init(RCC_PLL_MUL9);  // 设置时钟,72MHzled_init();uart1_init(115200);  // 初始化 UARTprintf("hello world!\r\n");  // 通过 UART 输出 "hello world"ic_init(65536-1,72-1);while(1) {led1_on();led2_off();delay_ms(500);led1_toggle();led2_toggle();delay_ms(500);}
}

最终显示结果

http://www.lryc.cn/news/503480.html

相关文章:

  • 解析 SSM 垃圾分类系统,助力生态平衡
  • 软件工程 设计的复杂性
  • Nginx 限制只能白名单 uri 请求的配置
  • QT c++ 同时使用sqlite 和mysql数据库的问题
  • redis集群 服务器更换ip,怎么办,怎么更换redis集群的ip
  • 【C++习题】19.数组中第K个大的元素
  • JIS-CTF: VulnUpload靶场渗透
  • BGP-面试
  • Git-安装与常用命令
  • 回归预测 | Matlab实现基于BiLSTM-Adaboost双向长短期记忆神经网络结合Adaboost集成学习回归预测
  • 微信小程序跳转其他小程序以及跳转网站
  • Not using native diff for overlay2, this may cause degraded performance……
  • 【自用】管材流转项目 数据库恢复之 PIPE 表 二维码相关 各个表恢复 SQL
  • 【渗透测试】信息收集二
  • 测试工程师八股文04|计算机网络 和 其他
  • 定时/延时任务-Kafka时间轮源码分析
  • 如何用状态图进行设计05
  • 【计算机视觉】边缘检测
  • 林曦词典|无聊
  • LabVIEW光栅衍射虚拟仿真系统
  • 【NumPy进阶】:内存视图、性能优化与高级线性代数
  • 从YOLOv5到训练实战:易用性和扩展性的加强
  • Prim 算法在不同权重范围内的性能分析及其实现
  • canal安装使用
  • python爬虫常用数据保存模板(Excel、CSV、mysql)——scrapy中常用数据提取方法(CSS、XPATH、正则)(23)
  • You need to call SQLitePCL.raw.SetProvider()
  • IoTDB AINode 报错,call inference 301: Error ocurred while executing inference
  • LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面
  • 项目-移动端适配的几种方案
  • HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装