Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
HWTIMER_硬件定时器
RT-Thread Studio
RT-Thread studio 环境下,RT-Thread 使用未默认启用的timer 作为硬件定时器 HWTIMER
发布于 2023-07-16 21:43:36 浏览:440
订阅该版
[tocm] 初学 RT-Thread,在 RT-Thread studio 环境下,使用手里的 nucleo_L476 开发板来学习 HWTimer 的使用,运行官方 HWTimer 例程。 nucleo_L476 默认开启了 timer15、16、17,如果使用已经开启的 Timer,直接在 RT_Thread setting 里开启对应 timer,将官方例程里的`define HWTIMER_DEV_NAME ` 改成对应 imer 即可。 这里我想使用未默认开启的 timer2,这里记录一下当前版本(RT-tread 4.1.0, RT-Thread Studio 2.2.6)使用 cubeMX 的操作步骤: ### 1.在 cubeMX 里开启timer2 打开cubeMX: ![1.png](https://oss-club.rt-thread.org/uploads/20230716/56807d081ba54c38503f19a62e2afc77.png) 注意不要更新版本,选择 continue: ![2.png](https://oss-club.rt-thread.org/uploads/20230716/8ebc29c625b5f745707b196991262cf0.png.webp) 开启timer2: ![3.png](https://oss-club.rt-thread.org/uploads/20230716/72de7867393b998ae25d42f67e63fd45.png.webp) 生成代码,关闭cubeMx ### 2.修改 setting 修改 board 目录下的 Kconfig,在timer对应位置添加timer2的配置选项: ![4.png](https://oss-club.rt-thread.org/uploads/20230716/884efc8ac1b8dc08c9ef814f3f2ad9a5.png.webp) 保存后就可以在 RT_Thread setting 中开启 timer2 了: ![5.png](https://oss-club.rt-thread.org/uploads/20230716/08a5f2cc2eaa2283ffff6e3e0022ecf5.png.webp) ### 3.添加 config 此时编译会发现提示缺少config,找到缺少的位置添加 ![6.png](https://oss-club.rt-thread.org/uploads/20230716/141ca6d70498235e8929b8b9bd8ec723.png.webp) 缺少的位置在 libraries 下,如图,仿照 timer15 添加 `TIM2_CONFIG`: ![7.png](https://oss-club.rt-thread.org/uploads/20230716/e063963fc13cd1613508d82838b0734b.png.webp) **RT-Thread studio 环境下使用 cubeMX 遇到的编译问题**: 我自己在做这一步的时候出现了 RT-Thread studio 将目录 CubeMX_Config 下的所有文件都加入编译的情况。 而 cubeMx 会生成设置的IDE对应的文件,而但 RT-Thread 只使用了 STM32CubeMX 生成的 `stm32fxx_hal_msp.c` 文件和 `stm32fxx_hal_conf.h` 文件,其余的文件并不需要。多余的文件会导致编译报错。最后我将生成的文件删除才能正常编译。 编译报错如下: ![9.png](https://oss-club.rt-thread.org/uploads/20230716/0f3886ce8179b1a7654176fbadbcd985.png.webp) 项目工程默认的 include 里加入了整个 board 目录下的文件: ![10.png](https://oss-club.rt-thread.org/uploads/20230716/1292f1be7bdf70f1a025fcbc5420f149.png) ### 4.运行官方例程 直接添加c源文件: ```C #include
#include
#define HWTIMER_DEV_NAME "timer2" /* 定时器名称 */ /* 定时器超时回调函数 */ static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) { rt_kprintf("this is hwtimer %s timeout callback fucntion!\n", HWTIMER_DEV_NAME); rt_kprintf("tick is :%d !\n", rt_tick_get()); return 0; } static int hwtimer(int argc, char *argv[]) { rt_err_t ret = RT_EOK; rt_hwtimerval_t timeout_s; /* 定时器超时值 */ rt_device_t hw_dev = RT_NULL; /* 定时器设备句柄 */ rt_hwtimer_mode_t mode; /* 定时器模式 */ rt_uint32_t freq = 10000; /* 计数频率 */ /* 查找定时器设备 */ hw_dev = rt_device_find(HWTIMER_DEV_NAME); if (hw_dev == RT_NULL) { rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWTIMER_DEV_NAME); return RT_ERROR; } /* 以读写方式打开设备 */ ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); if (ret != RT_EOK) { rt_kprintf("open %s device failed!\n", HWTIMER_DEV_NAME); return ret; } /* 设置超时回调函数 */ rt_device_set_rx_indicate(hw_dev, timeout_cb); /* 设置计数频率(若未设置该项,默认为1Mhz 或 支持的最小计数频率) */ rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq); /* 设置模式为周期性定时器(若未设置,默认是HWTIMER_MODE_ONESHOT)*/ mode = HWTIMER_MODE_PERIOD; ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode); if (ret != RT_EOK) { rt_kprintf("set mode failed! ret is :%d\n", ret); return ret; } /* 设置定时器超时值为5s并启动定时器 */ timeout_s.sec = 5; /* 秒 */ timeout_s.usec = 0; /* 微秒 */ if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s)) { rt_kprintf("set timeout value failed\n"); return RT_ERROR; } /* 延时3500ms */ rt_thread_mdelay(3500); /* 读取定时器当前值 */ rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s)); rt_kprintf("Read: Sec = %d, Usec = %d\n", timeout_s.sec, timeout_s.usec); return ret; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(hwtimer, hwtimer sample); ``` 下载运行: ![8.png](https://oss-club.rt-thread.org/uploads/20230716/50e6ac451b0a9cec8241dbf90e053a2c.png)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
paradox
这家伙很懒,什么也没写!
文章
7
回答
1
被采纳
0
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部