Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
HWTIMER_硬件定时器
HWTIMER_硬件定时器
RT-Thread硬件定时器HWTIMER具体使用-小白福利
发布于 2021-08-04 09:15:43 浏览:3281
订阅该版
[tocm] ## 第一步:查找该外设开启的前置条件或使用步骤 RTT系统每需开启一种外设,都可以直接在dirvers/board.h里找到使用该外设的步骤。 ![image.png](https://oss-club.rt-thread.org/uploads/20210804/ec597f0cf2e20e02c5a963113a5757ad.png.webp) ## 第二步:跟着第一步找到对应外设,这里举例硬件定时器。 board.h里说明,要想用硬件定时器,需要在RT-Thread Settings中进行勾选。 ![image.png](https://oss-club.rt-thread.org/uploads/20210804/dcb91a0dcf7fe527846149d3a2d6ff66.png.webp) ## 第三步:通过宏定义打开对应的外设配置。 ![image.png](https://oss-club.rt-thread.org/uploads/20210804/7d6f0e232ff97ae16c4c96bd632adba0.png.webp) ## 第四步:在board.c中添加定时器3的初始化代码。 这个步骤是很多人会经常出错的地方,又是基于RTT Studio开发,又是接入STM32CuBeMx的相关代码。一会函数名冲突,一会stm32f4xx_hal_conf.h因STM32CuBeMx的代码生成,变成stm32f4xx_hal_conf_back.h,也引入一些找不到stm32f4xx_hal_conf.h头文件的问题。所以我习惯不在项目里使用STM32CuBeMx,而是单独在桌面打开STM32CuBeMx按着需要进行外设配置。(这种习惯不一定最好)然后将如图所示代码添加道board.c的末尾。![image.png](https://oss-club.rt-thread.org/uploads/20210804/3e0c4b84a48f191c603453dca1e24888.png) 在board.c中添加外设初始化代码。 ![image.png](https://oss-club.rt-thread.org/uploads/20210804/f2de922541976ba3a6c6b11920cf52ea.png.webp) ## 第五步:进行STM32 HAL库本身需要支持的宏打开。 最关键,也最容易出错的一步完成了。 ![image.png](https://oss-club.rt-thread.org/uploads/20210804/ff9dfc342b8836643f0ef2ebf432c662.png.webp) ## 第六步:跟着官方撸代码。 注意官方使用的外设是"time0",我改成了"time3"。然后也会报一些没有定义某某结构体等的错。那就加上#include
。 ```c /* * 程序清单:这是一个 hwtimer 设备使用例程 * 例程导出了 hwtimer_sample 命令到控制终端 * 命令调用格式:hwtimer_sample * 程序功能:硬件定时器超时回调函数周期性的打印当前tick值,2次tick值之差换算为时间等同于定时时间值。 */ #include
#include
#define HWTIMER_DEV_NAME "timer3" /* 定时器名称 */ /* 定时器超时回调函数 */ 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_err_t ret = RT_EOK; rt_hwtimerval_t timeout_s; /* 定时器超时值 */ rt_device_t hw_dev = RT_NULL; /* 定时器设备句柄 */ rt_hwtimer_mode_t mode; /* 定时器模式 */ /* 查找定时器设备 */ 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); /* 设置模式为周期性定时器 */ 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_sample, hwtimer sample); ``` ##第七步:如果有帮助记得点赞,收获动力!
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
RTT_STUDY
笨鸟先飞
文章
1
回答
5
被采纳
0
关注TA
发私信
相关文章
1
请问HWTIMER设备支持计数模式吗
2
HWTIMER 设备没有计数模式吗
3
ART-Pi开发板,新建Wifi示例工程,打开hwtimer就42个错误?
4
求助:使用HWTIMER timer13的问题
5
使用menuconfig 使能硬件定时器的驱动,使能PWM 编码器等,编译错误
6
STM32H743 的硬件定时器是不是是不是没有晚上
7
硬件定时器如何实现us,ms级定时功能
8
纳秒级的高精度定时器在RTT中的实现
9
HWTIMER设备TIM2_CONFIG函数要自己手动添加?F407ZGT6
10
【已解决】STMF103ZE定时器hwtimer 定时时间为us的时候不准确
推荐文章
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
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部