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

news/2024/10/18 19:22:06 标签: stm32, 嵌入式硬件, 单片机, RT-Thread, 机器人, c语言, 学习

前言

基于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电,则会触发捕获中断

在这里插入图片描述


http://www.niftyadmin.cn/n/5711557.html

相关文章

[新电脑整理工作]

git 安装python安装 工作需要同时安装py2,和py3,故用anconda 软件&#xff0c;下载并安装成功后 1、conda create -n py2 python2.7 conda cerete -n py3 python3.8 2、安装成功后用VScode直接切换不同环境就可以&#xff08;原本旧电脑就不可用&#xff0c;可能是vscode 版本有…

JCO发表加州大学团队最新医学AI研究,从常规HE染色切片预测同源重组缺陷和铂类药物反应|顶刊精析·24-10-18

小罗碎碎念 这篇文章是关于一项名为DeepHRD的深度学习平台的研究&#xff0c;该平台能够从常规的苏木精-伊红&#xff08;H&E&#xff09;染色组织切片中预测同源重组缺陷&#xff08;HRD&#xff09;和铂类药物反应。 作者角色姓名单位第一作者Erik N. Bergstrom加州大学圣…

如何建立自己的体育直播平台:现成源码搭建全流程揭秘

随着越来越多的用户选择在线观看体育赛事&#xff0c;搭建一个专业的足球赛事直播应用正变得愈加吸引人。利用现成的体育直播系统源码&#xff0c;如“东莞梦幻网络科技”提供的解决方案&#xff0c;创业者可以快速启动自己的平台。只要准备好必要的技术组件&#xff0c;您就能…

【Python 常用脚本及命令系列 7 -- pdf 文件字符搜索 python脚本实现】

> 请阅读【嵌入式及芯片开发学必备专栏】< 文章目录 pdf 文件字符搜索 python脚本实现说明 pdf 文件字符搜索 python脚本实现 要实现一个 Python 脚本来在指定目录中搜索 PDF 文件中的关键字&#xff0c;可以使用 PyPDF2 库来读取 PDF 文本&#xff0c;并结合 os 库来遍…

[笔记] 关于CreateProcessWithLogonW函数创建进程

函数介绍 https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-createprocesswithlogonw BOOL CreateProcessWithLogonW([in] LPCWSTR lpUsername,[in, optional] LPCWSTR lpDomain,[in] …

Linux - 环境变量 | 命令行参数 | 进程基础

文章目录 一、了解冯诺依曼体系结构1、概念2、对数据层面3、实例二、操作系统1、概念2、设计OS的目的3、定位4、操作系统怎么管理&#xff1f; 三、进程1、概念2、怎么管理进程3、描述进程-PCB4、描述进程怎么运行&#xff08;粗略&#xff09;5、进程属性6、创建子进程7、创建…

scala 抽象类

理解抽象类 抽象的定义 定义一个抽象类 &#xff1a;abstract class A {} idea实例 抽象类重写 idea实例 练习 1.abstract2.错3.abstract class A{}4.对

下一代安全:融合网络和物理策略以实现最佳保护

在当今快速发展的技术环境中&#xff0c;网络和物理安全融合变得比以往任何时候都更加重要。随着物联网 (IoT) 和工业物联网 (IIoT) 的兴起&#xff0c;组织在保护数字和物理资产方面面临着独特的挑战。 本文探讨了安全融合的概念、说明其重要性的实际事件以及整合网络和物理安…