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

2023-12-16 11:28

本文主要是介绍BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-硬件定时器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

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设备

这篇关于BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-硬件定时器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500287

相关文章

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Springboot如何配置Scheduler定时器

《Springboot如何配置Scheduler定时器》:本文主要介绍Springboot如何配置Scheduler定时器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Springboot配置Scheduler定时器1.在启动类上添加 @EnableSchedulin

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP