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

RT-Thread之STM32使用定时器实现输入捕获

前言

基于RT-Thread的STM32开发,配置使用定时器实现输入捕获。
比如配置特定通道捕获上升沿,该通道对应的引脚有上升沿信号输入,则触发捕获中断

一、新建工程

在这里插入图片描述

二、工程配置

1、打开CubeMX 进行工程配置

在这里插入图片描述

2、时钟使用外部高速晶振

在这里插入图片描述

3、配置下载口

在这里插入图片描述

4、配置时钟树

在这里插入图片描述

5、打开串口一调试输出

在这里插入图片描述

6、配置定时器三,打算用定时器三的通道一做输入捕获。

在这里插入图片描述

7、生成.c和.h文件

在这里插入图片描述

8、生成代码

在这里插入图片描述

三、代码编写

1、先编译一下工程,出现如下报错

在这里插入图片描述

2、修改芯片支持包版本

在这里插入图片描述

3、将0.2.3降版本为0.2.2

在这里插入图片描述

4、确认切换

在这里插入图片描述

5、点击确定去下载资源

在这里插入图片描述

6、下载0.2.2版本

在这里插入图片描述

7、下载完成后再进行切换

在这里插入图片描述

8、切换完成后,再进行编译,无报错无警告

在这里插入图片描述

9、使能定时器模块

在这里插入图片描述

10、打开定时器驱动程序

在这里插入图片描述

11、找到CubeMX生成的 MX_TIM3_Init()进入进去

在这里插入图片描述

12、长这样

在这里插入图片描述

13、找到这个函数HAL_TIM_Base_MspInit

在这里插入图片描述

14、把它放到MX_TIM3_Init()定时器三初始化函数的这个位置

在这里插入图片描述

15、在HAL_TIM_Base_MspInit这个函数里写上开启定时器三的中断。

在这里插入图片描述

16、最后再在定时器三的初始化函数里写上开启定时器三通道一的输入捕获。

在这里插入图片描述

17、回到主函数,在函数开始时进行定时器三的初始化,编译发现报错,说函数未定义

在这里插入图片描述

18、找到该函数,将前面的static关键字去掉

在这里插入图片描述

19、前面的声明这也要去掉

在这里插入图片描述

20、再编译,无报错无警告

在这里插入图片描述

21、再看看定时器三的初始化函数,这里是输入捕获的触发边沿,可以根据需要进行修改

在这里插入图片描述

22、在主函数这里写上输入捕获中断函数

在这里插入图片描述

23、打开CubeMX查看确认一下TIM3通道一的引脚号,我这里是PA6,也就是说当PA6引脚捕获到上升沿信号时,就会进入捕获中断。

在这里插入图片描述

24、进入HAL_TIM_Base_MspInit()函数,配置捕获引脚为下拉输入。

在这里插入图片描述

25、board.h里要打开TIM3

在这里插入图片描述

26、再配置一下时钟,RTT默认使用的是内部时钟,找到CubeMX生成的SystemClock_Config()时钟配置函数,将其复制到drv.clk.c里面来

在这里插入图片描述

27、然后在时钟初始化这里做一个替换,把CubeMX生成的时钟配置函数替换进去,把原来的注释掉

在这里插入图片描述

28、在主函数中写入如下代码测试,找到板子上的PA6引脚(我使用的是PA6),将其接到板子上的3.3V口,看看是否能捕获上升沿进入中断,由串口打印查看。

/** Copyright (c) 2006-2024, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2024-10-15     RT-Thread    first version*/#include <rtthread.h>
#include <rtdevice.h>
#include "board.h"/* system io */
#define SYS_LED             GET_PIN(A, 15)extern TIM_HandleTypeDef htim3;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == htim3.Instance){switch(htim->Channel){case HAL_TIM_ACTIVE_CHANNEL_1:rt_kprintf("TIM3_IC_TRICK!!\r\n");break;default:break;}}
}static void SystemLedRun(void)
{static uint8_t l_ucmode = 0;if (l_ucmode == 0){rt_pin_write(SYS_LED, PIN_HIGH);l_ucmode = 1;}else if (l_ucmode == 1){rt_pin_write(SYS_LED, PIN_LOW);l_ucmode = 0;}
}
int main(void)
{rt_pin_mode(SYS_LED, PIN_MODE_OUTPUT);rt_pin_write(SYS_LED, PIN_HIGH);MX_TIM3_Init(&htim3);while (1){SystemLedRun();rt_thread_mdelay(500);}return RT_EOK;
}

29、最后我把PA6脚触到3.3V电,则会触发捕获中断

在这里插入图片描述

相关文章:

RT-Thread之STM32使用定时器实现输入捕获

前言 基于RT-Thread的STM32开发&#xff0c;配置使用定时器实现输入捕获。 比如配置特定通道捕获上升沿&#xff0c;该通道对应的引脚有上升沿信号输入&#xff0c;则触发捕获中断。 一、新建工程 二、工程配置 1、打开CubeMX 进行工程配置 2、时钟使用外部高速晶振 3、配置…...

数字图像处理:图像分割应用

数字图像处理&#xff1a;图像分割应用 图像分割是图像处理中的一个关键步骤&#xff0c;其目的是将图像分成具有不同特征的区域&#xff0c;以便进一步的分析和处理。 1.1 阈值分割法 阈值分割法&#xff08;Thresholding&#xff09;是一种基于图像灰度级或颜色的分割方法&…...

Java面试宝典-并发编程学习02

目录 21、并行与并发有什么区别&#xff1f; 22、多线程中的上下文切换指的是什么&#xff1f; 23、Java 中用到的线程调度算法是什么&#xff1f; 24、Java中线程调度器和时间分片指的是什么&#xff1f; 25、什么是原子操作&#xff1f;Java中有哪些原子类&#xff1f; 26、w…...

【每日一题】洛谷 - 快速排序模板

今天的每日一题来自洛谷&#xff0c;题目要求对给定的 N N N 个正整数进行从小到大的排序&#xff0c;并输出结果。我们将使用经典的**快速排序算法&#xff08;QuickSort&#xff09;**来解决这一问题。下面我将从问题分析、代码实现、及快速排序的核心思想进行详细说明。 题…...

Django模型优化

1、创建一个Django项目 可参考之前的带你快速体验Django web应用 我使用的是mysql数据库。按照上述教程完成准备工作。 2、创建一个app并完成注册 demo主要来完成创建用户、修改用户、查询用户、删除用户的操作。 python manage.py startapp test0023、app的目录 新建templ…...

Python实现火柴人的设计与实现

1.引言 火柴人&#xff08;Stick Figure&#xff09;是一种极简风格的图形&#xff0c;通常由简单的线段和圆圈组成&#xff0c;却能生动地表达人物的姿态和动作。火柴人不仅广泛应用于动画、漫画和涂鸦中&#xff0c;还可以作为图形学、人工智能等领域的教学和研究工具。本文…...

衡石分析平台系统分析人员手册-应用模版

应用模板​ 应用模板使分析成果能被快速复用&#xff0c;节省应用创作成本&#xff0c;提升应用创作效率。此外应用模板实现了应用在不同环境上快速迁移。 支持应用复制功能 用户可以从现有的分析成果关联到新的分析需求并快速完成修改。 支持应用导出为模板功能 实现多个用户…...

Git和SVN

一. Git和SVN的区别 1.1 Git是分布式的&#xff0c;SVN是集中式的 1.2 Git复杂概念多&#xff0c;SVN简单易上手 Git 的命令实在太多了&#xff0c;日常工作需要掌握 add, commit, status, fetch, push, rebase等&#xff0c;若要熟练掌握&#xff0c;还必须掌握 rebase和 m…...

【C语言教程】【常用类库】(十八)宏与预处理 - <stddef.h> 和 <stdbool.h>

18. 宏与预处理 - <stddef.h> 和 <stdbool.h> C语言的宏和预处理指令在程序编译之前就被执行&#xff0c;用于文件包含、符号定义、条件编译等操作。理解和运用宏和预处理可以提高代码的灵活性和可移植性。 18.1 宏定义与条件编译 18.1.1 #define 与参数化宏 #…...

订单超时过期的实现方案的探讨

在我们的业务开发中&#xff0c;会遇到这样一个场景&#xff0c;用户下了一个单&#xff0c;如果超过20分钟不进行支付&#xff0c;订单就要变成已取消状态。 字段设定 订单中需要设定了三个字段&#xff1a;订单是否取消、是否支付、支付超时时间。 订单是否取消会存在&…...

C++中的CRTP

CRTP&#xff0c;全称为 Curiously Recurring Template Pattern&#xff08;奇异递归模板模式&#xff09;&#xff0c;是一种在C中使用继承和模板技术来实现静态多态和功能复用的惯用法。它使用派生类来模板参数化基类&#xff0c;使得基类能够访问派生类&#xff0c;从而在编…...

go压缩的使用

基础&#xff1a;使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…...

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中&#xff0c;经常会需要进行各种业务流程梳理&#xff0c;而流程图就是梳理业务时必要的手段&#xff0c;同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…...

【微信小程序_19_自定义组件(1)】

摘要:本文主要介绍了小程序开发中自定义组件的相关知识。包括组件的创建与引用,可在项目根目录创建组件文件夹,生成相应文件,并根据使用频率选择全局或局部引用。还阐述了组件和页面的区别,如组件的.json 文件需声明 “component: true”,.js 文件调用 Component () 函数…...

标准版admin后台页面添加及开发操作流程及注意事项

基础介绍 CRMEB后台管理是基于vue2技术栈进行开发搭建的 Vue Router 使用的是v3版本&#xff0c;mode为history模式 如需修改 mode 请在src/setting.js中修改routerMode 新建页面 新建路由 根据目录结构&#xff0c;需要在src/router/modules中对应模块中&#xff0c;添加对…...

‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

‘perl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 明明已经根据教程安装了perl环境,但是在cmd中依赖报该错误,本章教程提供解决办法。 一、激活perl环境 state shell ActiveState-Perl-5.36.0此时输入perl -v 是可以直接输出perl版本号的。 二、找到perl的执…...

如何利用CMMI帮助组织消除低价值流程

CMMI发展到今天&#xff0c;过程中历经了不断的蜕变和升级。从早期的CMM到今天的CMMI3.0&#xff0c;从早期的22个过程域优化组合到今天的20个实践域&#xff0c;从早期隶属的SEI到今天的CMMI研究院&#xff0c;所有的变化都是与时俱进&#xff0c;都是为了提供更好的实践&…...

如何理解线程安全这个概念?

文章目录 为什么需要线程安全&#xff1f;线程安全的实现方式总结推荐阅读文章 线程安全&#xff08;Thread Safety&#xff09;是指在多线程环境中&#xff0c;多个线程同时访问某个对象时&#xff0c;不会导致程序出现错误的状态或不一致的结果。简单来说&#xff0c;线程安全…...

代码随想录算法训练营第48天| 739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II

第十一章&#xff1a;图论part01 图论理论基础 大家可以在看图论理论基础的时候&#xff0c;很多内容 看不懂&#xff0c;例如也不知道 看完之后 还是不知道 邻接矩阵&#xff0c;邻接表怎么用&#xff0c; 别着急。 理论基础大家先对各个概念有个印象就好&#xff0c;后面在…...

Qt 支持打包成安卓

1. 打开维护Qt&#xff0c;双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件&#xff0c;点击下一步&#xff0c; 勾选Android, 点击下一步 3.更新安装中 4.进度100%&#xff0c;完成安装&#xff0c;重启。 5.打开 Qt Creator&#xff0c;编辑-》Preferences... 6.进…...

Qwen3-Embedding-0.6B场景应用:企业代码库智能检索实战

Qwen3-Embedding-0.6B场景应用&#xff1a;企业代码库智能检索实战 1. 企业代码管理的痛点与解决方案 1.1 代码检索的常见挑战 在软件开发过程中&#xff0c;工程师经常面临以下问题&#xff1a; 代码复用困难&#xff1a;相似功能代码分散在不同项目中&#xff0c;难以快速…...

技术奇点移民局:人类文明延续证书申领指南

当测试思维遇见文明延续在软件测试领域&#xff0c;我们日复一日地构建测试用例、执行回归测试、提交缺陷报告&#xff0c;核心目标是为确保软件系统的稳定性、安全性与可持续性。如果将这一专业视角放大至人类文明的尺度&#xff0c;我们所面临的&#xff0c;正是一场空前规模…...

3个核心功能突破JetBrains IDE试用期限制:2026完全指南

3个核心功能突破JetBrains IDE试用期限制&#xff1a;2026完全指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 问题引入&#xff1a;破解IDE时间枷锁的开发者困境 作为现代软件开发的基础设施&#xff0c;Je…...

patat性能优化技巧:让终端演示更加流畅的7个方法

patat性能优化技巧&#xff1a;让终端演示更加流畅的7个方法 【免费下载链接】patat Terminal-based presentations using Pandoc 项目地址: https://gitcode.com/gh_mirrors/pa/patat patat是一个基于终端的演示工具&#xff0c;它利用Pandoc的强大功能在ANSI终端中呈现…...

Phi-3-Mini-128K入门必看:轻量化开源大模型本地部署全流程

Phi-3-Mini-128K入门必看&#xff1a;轻量化开源大模型本地部署全流程 1. 项目概述 Phi-3-Mini-128K是一款基于微软Phi-3-mini-128k-instruct模型开发的轻量化对话工具。它专为本地环境优化设计&#xff0c;无需云端依赖&#xff0c;普通配备GPU的电脑即可流畅运行。这个工具…...

Python实战:如何用多线程加速破解ZIP/RAR密码(附完整代码)

Python多线程密码破解实战&#xff1a;从原理到性能优化 在数据恢复和渗透测试领域&#xff0c;密码保护的压缩文件处理是常见需求。当我们面对遗忘密码的ZIP/RAR文件时&#xff0c;Python提供了高效的解决方案。本文将深入探讨如何利用多线程技术显著提升密码破解效率&#xf…...

阿姆智创15.6寸触摸工控一体机,工业智造终端解决方案,源头工厂ODM定制赋能自动化升级

在工业自动化与智能制造深度融合的当下&#xff0c;稳定可靠、适配性强、可定制化的工控终端&#xff0c;已成为SMT产线、MES/ESOP系统等场景高效运行的关键支撑。阿姆智创15.6寸触摸工控一体机&#xff0c;以硬核工业性能、丰富系统接口、灵活ODM定制服务&#xff0c;打造一站…...

STM32CubeMX实战:10分钟为你的G474项目配置双区IAP(Boot+App)并生成.bin

STM32CubeMX实战&#xff1a;10分钟为G474项目配置双区IAP&#xff08;BootApp&#xff09;并生成.bin 在嵌入式开发中&#xff0c;IAP&#xff08;在应用编程&#xff09;技术是实现设备固件远程升级的核心方案。对于STM32开发者而言&#xff0c;传统手动配置IAP往往涉及繁琐…...

为什么你的GF-6影像校正总出错?避开UTM投影转换的3个常见坑

为什么你的GF-6影像校正总出错&#xff1f;避开UTM投影转换的3个常见坑 GF-6卫星的宽幅相机&#xff08;WFV&#xff09;凭借800公里的超宽覆盖和红边波段等独特优势&#xff0c;已成为农业监测、环境评估等领域的重要数据源。但许多用户在影像校正环节频频遭遇失败——拼接错位…...

【RAG】【vector_stores008】AwaDB向量存储示例

案例目标本案例演示如何使用AwaDB作为向量存储后端构建RAG系统。AwaDB是一个高性能的向量数据库&#xff0c;专门用于存储和检索高维向量数据&#xff0c;适用于语义搜索、推荐系统和AI应用等场景。通过本示例&#xff0c;用户可以学习如何集成AwaDB与LlamaIndex&#xff0c;实…...