rt-thread:_004STM32F429IGT BSP的HWTIMER设备应用

本文详细介绍了如何在RT-THREAD操作系统下,基于STM32F429IGT6 BSP操作硬件定时器(HWTIMER)设备,包括查找设备、使能设备、设置超时回调、控制定时器、设置超时值等步骤,并讨论了定时误差及其解决方案。此外,还展示了STM32CubeMX配置和工程配置过程。
摘要由CSDN通过智能技术生成

基于RT-THREAD STM32F429IGT6 BSP的HWTIMER设备应用


硬件平台:野火STM32挑战者 MCU:STM32F429IGT6
开发工具:
  1. MDK Version:5.25
  2. VSCode
  3. env
  4. STM32CubeMX Version:5.2.1
  5. rt-thread源码 Version:4.0.1

工具获取


说明:
这次先介绍下HWTIMER设备(硬件定时器设备)的操作方法,然后一步一步完成HWTIMER设备的BSP过程。

该BSP主要实现使用HWTIMER设备管理接口来定时(定时器TIM4),同时使用信号量传递消息,当定时器时间到时,释放一次信号量;线程获得信号量以后蜂鸣器发出“滴”声,其中蜂鸣器硬件图下图:
在这里插入图片描述

图1.蜂鸣器硬件原理图

ADC设备的操作方法

应用程序通过RT-Thred提供的I/O设备管理接口操作hwtimer设备,相关函数接口如下表:

表1.I/O设备管理接口API
方法名称 方法描述
rt_device_find() 根据 定时器 设备名称查找设备获取设备句柄
rt_device_open() 根据 以读写方式打开定时器 RT_DEVICE_FLAG_RDWR
rt_device_set_rx_indicate() 设置超时回调函数
rt_device_control() 控制定时器设备,可以设置定时模式(单次/周期)/计数频率,或者停止定时器
rt_device_write() 设置定时器超时值,定时器随即启动
rt_device_read() 获取定时器当前值
rt_device_close() 关闭定时器设备

1. 查找HWTIMER设备

在使用HWTIMER设备之前需要先查找HWTIMER设备句柄,通过下面函数完成:

rt_device_t rt_device_find(const char* name);
表2.rt_device_find()的输入参数与返回值
参数 描述
name HWTIMER设备名字
返回 描述
设备句柄 无查找到正确的设备后返回对应的设备句柄
RT_NULL 没有查找到设备

根据 rt-thread 设备注册格式,一般注册到设备块的 adc 设备名字为timer0timer1等等。找到了该设备也就是打开了设备

2. 使能HWTIMER设备

跟我们前面使用其他设备一样,具体操作之前都得先使能,使能HWTIMER设备用如下函数完成:

rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags);
表3.rt_device_open()的输入参数与返回值
参数 描述
dev HWTIMER设备句柄
oflags HWTIMER设备使能方式: RT_DEVICE_OFLAG_RDWR (读写方式)
返回 描述
RT_EOK 使能成功
其他值 使能失败

3. 设置HWTIMER设备超时回调函数

读取HWTIMER设备超时回调函数使用如下函数完成:

rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size))
表4.rt_device_set_rx_indicate()的输入参数与返回值
参数 描述
dev HWTIMER设备句柄
rt_ind 超时回调函数,由用户提供
返回 描述
RT_EOK 设置成功

4. 控制HWTIMER设备

定时器设备的计数频率(定时时间=计数值/计数频率)以及定时模式(单次定时:HWTIMER_MODE_ONESHOT,还是周期定时:HWTIMER_MODE_PERIOD)由如下函数完成:

rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg);
表3.rt_device_control()的输入参数与返回值
参数 描述
dev HWTIMER设备句柄
cmd 计数频率设置还是定时模式设置命令字 ,见表4
arg 计数频率或者定时模式的参数
返回 描述
RT_EOK 关闭成功
-RT_ENOSYS 关闭失败,设备操作方法为空
其他值 关闭失败
表4.cmd命令字一览表
参数 描述
HWTIMER_CTRL_FREQ_SET 设置计数频率
HWTIMER_CTRL_STOP 停止定时器
HWTIMER_CTRL_INFO_GET 获取定时器特征信息
HWTIMER_CTRL_MODE_SET 设置定时器模式

5. 设置HWTIMER设备的超时值

定时器设备的超时值(即定时时间)由如下函数完成:

rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size);

该函数设置完之后,定时器变立即启动。

表5.rt_device_write()的输入参数与返回值
参数 描述
dev HWTIMER设备句柄
pos 定时时间偏移量,一般不使用,为0
buffer 指向定时器的超时时间结构体的指针
size 超时时间结构体的大小
返回 描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值