RT-Thread硬件定时器(HWTIMER)官方文档实例实现

在学习rt-thread文档的时候,根据rt-thread官方的步骤,但是还是没有实现预期效果。中途我也遇到了一些问题,今天就来看看关于文档HWTIMER设备的实现步骤。
首先学习HWTIMER所需要的文档

函数描述
rt_device_find();功能:查找设备。参数:设备名称。返回值:成功返回设备句柄,失败返回RT_NULL
rt_devcie_open()功能:打开设备。参数1:设备句柄,参数2:打开模式,一般为读写打开:RT_DEVICE_OFLAG_RDWR。返回值:成功返回RT_EOK,错误返回其它错误码
rt_device_set_rx_indicate()功能:设置超值回调函数。参数1:设备句柄,参数2:回调函数。返回值:成功返回RT_EOK
rt_device_control()功能:控制定时器。参数1:设备句柄,参数2:命令控制字,参数3:控制参数。返回值:成功返回RT_EOK,失败返回-RT_ENOSYS
rt_device_write ()功能:设置定时器超时值。参数1:设备句柄,参数2:偏移量(一般为0),参数3:指向超时时间结构体指针,参数4:结构体大小。返回值:成功返回结构体大小,失败返回0
rt_device_read ()功能:读取定时器当前值。参数1:设备句柄,参数2:偏移量,参数3:输出参数,指向定时器时间结构体指针,参数4:超时时间结构体大小。返回值:返回超时时间结构体大小,失败返回0
rt_device_close()功能:关闭设备。参数:设备句柄。返回值:RE_EOK表示关闭成功,-RT_ENOSYS表示重复关闭,其它错误码表示关闭失败

直接上代码(内容做了部分修改以编译验证),读取定时值部分代码删除了,学会这个后面加上去很容易的:

#include <rtthread.h>
#include <rtdevice.h>
#include "hwtimer_sample.h"


rt_device_t hw_dev;         //设备句柄
rt_hwtimer_mode_t mode;     //控制参数,单次定时OR周期定时
rt_hwtimerval_t timeout_t;  //定时器超出值

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


    return 0;
}

int hw_sample(void)
{
    rt_err_t ret = RT_EOK;
    /* 查找设备 */
    hw_dev = rt_device_find(HWTIME_DEV_NAME);
    if(hw_dev == RT_NULL)
    {
        rt_kprintf("find %s failed\t\n", HWTIME_DEV_NAME);
        return RT_ERROR;
    }
    /* 查找设备成功 */
    rt_kprintf("find %s success \t\n",HWTIME_DEV_NAME);

    /* 以读写的方式打开设备 */
    rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);

    /* 设置定时器工作模式为周期定时 */
    mode = HWTIMER_MODE_PERIOD;
    rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);

    /* 超值回调函数 */
    rt_device_set_rx_indicate(hw_dev, timeout_cb);

    /* 配置超时值 */
    timeout_t.sec = 5;
    timeout_t.usec = 0;
    rt_device_write(hw_dev, 0, &timeout_t, sizeof(timeout_t));

    return RT_EOK;
}

1.寻找定时器3

我用到的是STM32F407IET6,用到的定时器可以在tim_config.h查看可以使用的定时器,其它能知道的方法未知,按道理查看原理图是有的。在这里插入图片描述

2、配置定时器3

首先需要在RT-Thread setting打开定时器设备在这里插入图片描述
接下来在board.h文件中取消TIM的注释,在添加一个TIM3
在这里插入图片描述
接下来把stm32f4xx_hal_conf.h文件中的定时器使能在这里插入图片描述
不要以为这就完了。在board.h文件里有使用步骤,因为我看文档不细心在这里插入图片描述
第一、二、四步已经完成了,那stm32xxxx_hal_msp.c这个文件在哪。这个文件在RT-Thread项目里是没有的,需要下载stm32cubeMX软件,这个软件简单的理解就是对芯片的外设进行封装,我的理解类似于库函数
如何下载以及安装可以百度。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
设置完后直接生成在这里插入图片描述
我们找到生成的目录文件,在Src文件夹下看到了熟悉的文件在这里插入图片描述
将代码复制到borad.c文件尾在这里插入图片描述

编译,下载,搞定

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值