BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-硬件定时器)

news2024/10/6 1:45:31

简介

BearPi IOT开发板 硬件定时器使用

步骤

创建项目

参考 BearPi RT-Thread项目创建

RT-Thread TIM2 设备注册

宏定义添加

rtconfig.h 中添加

#define RT_USING_HWTIMER
#define BSP_USING_TIM
#define BSP_USING_TIM2
生成支持TIM2的mdk5项目工程

env + 指令 scons --target=mdk5 -s
一样参考 参考 BearPi RT-Thread项目创建

STM32CubeMX 开启TIM2

board\CubeMX_Config\CubeMX_Config.ioc 双击打开, 设置TIM2, 如下
在这里插入图片描述

编译烧录

list device 就可以看到timer2设备了
在这里插入图片描述
这里会有两个报错
1) 其中一个就是TIM17, 目前我的芯片是没看到TIM17这个定时器, 所以报错注释掉就可以
2) tim_config.h 中缺少 TIM2_CONFIG
参考其他TIM配置, 加入如下代码

#ifdef BSP_USING_TIM2
#ifndef TIM2_CONFIG
#define TIM2_CONFIG                                        \
    {                                                      \
       .tim_handle.Instance     = TIM2,                    \
       .tim_irqn                = TIM2_IRQn,               \
       .name                    = "timer2",                \
    }
#endif /* TIM2_CONFIG */
#endif /* BSP_USING_TIM2 */
硬件定时器使用代码

接口参考 HWTIMER 设备

#include <board.h>
#include <rtthread.h>
#include <drv_gpio.h>
#include <rtdevice.h>

#define HWTIMER_DEV_NAME   "timer2"     /* 定时器名称 */
rt_device_t hw_dev;                     /* 定时器设备句柄 */
rt_hwtimerval_t timeout_s;

/* 定时器超时回调函数 */
static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size)
{
    rt_kprintf("this is hwtimer timeout callback fucntion!\n");
    rt_kprintf("tick is :%d !\n", rt_tick_get());

    return 0;
}

static int hwtimer_sample(int argc, char *argv[])
{
		rt_hwtimer_mode_t  mode = HWTIMER_MODE_PERIOD;
		rt_uint32_t freq = 10000;               /* 计数频率 */
	
    /* 查找定时器设备 */
    hw_dev = rt_device_find(HWTIMER_DEV_NAME);
		if ( RT_NULL == hw_dev )
		{
			rt_kprintf("can't find device name %s!\n", HWTIMER_DEV_NAME);
			return -RT_ERROR;
		}
	
    /* 以读写方式打开设备 */
    if (RT_EOK != rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR))
		{
			rt_kprintf("fail to open device name %s!\n", HWTIMER_DEV_NAME);
			return -RT_ERROR;
		}

    /* 设置超时回调函数 */
    if (RT_EOK != rt_device_set_rx_indicate(hw_dev, timeout_cb))
		{
			rt_kprintf("fail to set callback function!\n");
			return -RT_ERROR;
		}
		
		/* 设置计数频率(若未设置该项,默认为1Mhz 或 支持的最小计数频率) */
    rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq);
    /* 设置模式为周期性定时器(若未设置,默认是HWTIMER_MODE_ONESHOT)*/
    mode = HWTIMER_MODE_PERIOD;
    if (RT_EOK != rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode))
    {
        rt_kprintf("set mode failed!\n");
        return -RT_ERROR;
    }
		
		/* 设置定时器超时值为1s并启动定时器 */
    timeout_s.sec = 1;      /* 秒 */
    timeout_s.usec = 0;     /* 微秒 */
    rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s));
		
		rt_kprintf("timer2 init succeed!\n");
    return RT_EOK;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(hwtimer_sample, timer sample);
编译烧录测试

list device ## 看到timer2设备
hwtimer_sample ## 执行指令,1s打印一次

代码

完整代码

参考

RT-Thread API参考手册 定时器管理

RT-Thread 时钟管理

RT-Thread 设备和驱动 - HWTIMER设备

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片转HTML-screenshot-to-code

Github地址 https://github.com/abi/screenshot-to-code 在线站 Screenshot to Code 简介 这是一个基于GPT4开发的一个工具站&#xff0c;它可以基于截图生成站点代码&#xff0c;生成速度快且准确。

jmeter,动态参数之随机数、随机日期

通过函数助手&#xff0c;执行以下配置&#xff1a; 执行后的结果树&#xff1a; 数据库中也成功添加了数据&#xff0c;对应字段是随机值&#xff1a;

make没有更新最新的uImage

在 LCD 驱动的时候发现&#xff0c;linux logo一直弄不出来&#xff0c;猜想可能是因为uImage的问题&#xff0c;就看了一眼 uImage 时间&#xff1a; ​ 我现在的时间是 &#xff0c;那可能就是没有更新make的时候没有更新&#xff0c;就上网搜了一下用下面的命令输出 uImage&…

nodejs+vue+微信小程序+python+PHP的微博网络舆情分析系统-计算机毕业设计推荐

2.3.1 功能性分析 按照微博网络舆情分析系统的角色&#xff0c;我划分为了微博用户管理模块和管理员管理模块这三大部分。 微博用户管理模块&#xff1a;&#xff08;1&#xff09;用户登录&#xff1a;用户登录微博网络舆情分析系统 &#xff1b;用户对个人信息的增删改查&…

Docker Swarm编排:构建简单集群

Docker Swarm 是 Docker 官方提供的容器编排工具&#xff0c;通过它可以轻松构建和管理多个 Docker 容器的集群。本文将深入探讨 Docker Swarm 的基础概念、构建集群的步骤&#xff0c;并提供更为丰富和实际的示例代码&#xff0c;帮助大家全面了解如何使用 Docker Swarm 搭建一…

直角三角形判断_分支结构 C语言xdoj56

问题描述 设直角三角形两条直角边长度为a和b&#xff0c;斜边长度为c&#xff0c;则a&#xff0c;b&#xff0c;c满足a^2b^2c^2&#xff0c; 输入三个整数a&#xff0c;b&#xff0c;c&#xff0c;判断对应的三角形是不是直角三角形&#xff0c;不是则输出“no”&#xff0…

Windows 11上边两个空格导致我多熬了1个多小时

将图中的文件路径复制&#xff0c;然后到文件管理器里边去搜索。 发现找不到&#xff0c;可是明明就在这里啊。 我百思不得其解&#xff0c;还以为是IDEA出了问题&#xff0c;我只能是重新启动项目&#xff0c;结果还是告诉我找不到文件。 要是同一个目录下已经有一个名为a…

C++执行系统命令的三种方式

C 执行系统命令可以使用以下几种方法&#xff1a; 1. 使用 system() 函数 system() 函数会调用操作系统的命令行处理器&#xff08;如 /bin/sh&#xff09;来执行命令。该函数的语法如下&#xff1a; int system(const char *command);其中&#xff0c;command 参数指定要执…

Gitee:远程仓库步骤

第一步&#xff1a;新建仓库 第二步&#xff1a;初始化本地仓库&#xff0c;git init 创建分支 git branch 新分支名 第三步&#xff1a;git add . &#xff1a;添加到暂存区 第四步&#xff1a;git config –global user.email关联邮箱&#xff0c;user.name用户名 第…

转载:TableView性能优化

转载&#xff1a;TableView性能优化 原文链接&#xff1a;https://juejin.cn/post/6955731915672387592 tableView性能优化 Cell重用、标识重用 使用 static 修饰重用标识名称能够保证这个标识只会创建一次&#xff0c;提高性能。接着调用dequeueReusableCellWithIdentifie…

Linux 使用 Anaconda+Uwsgi 部署 Django项目和前端项目

一、安装Anaconda 使用Anaconda创建python环境的优点&#xff1a; virtualenv只能创建系统原有的python版本&#xff0c;而不能创建创建任意版本的环境 而Anaconda的虚拟环境中&#xff0c;你可以指定任意现存可使用的python环境&#xff08;包括比原环境版本高的python版本&a…

产品入门第五讲:Axure交互和情境

目录 一.Axure交互和情境的介绍 1.交互介绍 概念 常见的Axure交互设计技巧 2.情境介绍 概念 常见的Axure情境设计技巧&#xff1a; 二.实例展示 1.ERP登录页到主页的跳转 2.ERP的菜单跳转到各个页面 &#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个…

String类的hashCode()方法源码分析

Object类中的hashCode()方法&#xff1a; 同一个对象&#xff0c;hashCode必须相同&#xff1b;如果两个对象的equals相等&#xff0c;那么hashCode也必须要相等&#xff01;hashCode()方法是native本地方法&#xff0c;是C代码&#xff0c;hashCode的值&#xff0c;不一定是…

Web开发伴侣 Prepros 7.17 Crack

您友好的 Web 开发伙伴&#xff0c;Prepros 编译您的文件、转译您的 JavaScript、重新加载您的浏览器并 使开发变得非常容易测试您的网站&#xff0c;以便您可以专注于制作 他们完美。 编译一切 Prepros 可以编译 Sass、Less、Stylus、Pug/Jade、Haml、Slim、CoffeeScript 和 …

Linux 虚拟机复制后如何彻底修改ip共存

Linux那些事儿 1、复制 2、连接 3、cd /etc/sysconfig/network-scripts/ 4、ls -a 5、vi ifcfg-eth0 6、i 7、修改mac地址和ip地址&#xff0c;记住修改后的mac&#xff08;重要&#xff09; 8、关机 9、打开虚拟机设置此镜像&#xff1a;

Kubernetes与Docker:容器编排的未来

在当今快速变化的技术领域&#xff0c;容器化技术已经成为现代应用开发的核心。Docker 提供了一种轻量、可移植、自包含的容器化解决方案&#xff0c;而 Kubernetes&#xff08;简称K8s&#xff09;则崛起为容器编排的事实标准。本文将深入研究 Kubernetes 和 Docker 的关系&am…

武林风云之linux组软raid0

小y可喜欢玩文明系列的游戏了&#xff0c;因为小y也一直喜欢造轮子&#xff0c;属于自己的轮子。 每次小y听到”要向雄鹰一样&#xff0c;定要遨游于天际。”感觉自己给自己打了一针强心剂&#xff0c;要求自己拼搏进取。 众所周知&#xff0c;文明是个原生的linux游戏&#xf…

c++面经总结

C基础语法 C和c的区别 c中new和delete是对内存分配的运算符&#xff0c;取代了c中的malloc和free 标准c中的字符串类取代了标准c函数库头文件中的字符数组处理函数(c中没有字符串类型). 在c中&#xff0c;允许有相同的函数名&#xff0c;不过他们的参数类型不能完全相同&…

LeetCode:2415. 反转二叉树的奇数层(层次遍历 Java)

目录 2415. 反转二叉树的奇数层 题目描述&#xff1a; 实现代码与解析&#xff1a; BFS 原理思路&#xff1a; 2415. 反转二叉树的奇数层 题目描述&#xff1a; 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c;…

三、Spring IoC 容器和核心概念

本章概要 组件和组件管理概念 什么是组件&#xff1f;我们的期待Spring充当组件管理角色&#xff08;IoC&#xff09;组件交给Spring管理优势 Spring IoC 容器和容器实现 普通和复杂容器SpringIoC 容器介绍SpringIoC 容器具体接口和实现类SpringIoC 容器管理配置方式 Spring I…