rt-thread 学习(二)外部中断 添加头文件 延时函数

  • 设置按键外部中断
  • 开启硬件定时器
    • 初始化配置部分
  • 延时函数
  • 添加头文件

设置按键外部中断

#include <rtthread.h>
#include <rtdevice.h>
#include "board.h"
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#define B1_PIN_NUM            GET_PIN(B,1)
/* 中断回调函数 */
void B1_IRQ_CB(void *args)
{rt_kprintf("enter B1_IRQ_CB!\r\n");rt_pin_write(B1_PIN_NUM, PIN_HIGH);
}
static void pin_beep_sample(void)
{/* 按键0引脚为输入模式 */rt_pin_mode(B1_PIN_NUM, PIN_MODE_INPUT_PULLUP);/* 绑定中断,下降沿模式,回调函数名为beep_on */rt_pin_attach_irq(B1_PIN_NUM, PIN_IRQ_MODE_FALLING, B1_IRQ_CB, RT_NULL);/* 使能中断 */rt_pin_irq_enable(B1_PIN_NUM, PIN_IRQ_ENABLE);/* 脱离中断回调函数 */// rt_pin_detach_irq(B1_PIN_NUM);
}
int main(void)
{pin_beep_sample();return RT_EOK;
}

开启硬件定时器

初始化配置部分

/** if you want to use hardware timer you can use the following instructions.** STEP 1, open hwtimer driver framework support in the RT-Thread Settings file** STEP 2, define macro related to the hwtimer*                 such as     #define BSP_USING_TIM  and*                             #define BSP_USING_TIM1** STEP 3, copy your hardwire timer init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file*                 such as     void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)** STEP 4, modify your stm32xxxx_hal_config.h file to support hardwere timer peripherals. define macro related to the peripherals*                 such as     #define HAL_TIM_MODULE_ENABLED**/#define BSP_USING_TIM
#ifdef BSP_USING_TIM
#define BSP_USING_TIM3void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{if(htim_base->Instance==TIM3){/* USER CODE BEGIN TIM3_MspInit 0 *//* USER CODE END TIM3_MspInit 0 *//* Peripheral clock enable */__HAL_RCC_TIM3_CLK_ENABLE();/* USER CODE BEGIN TIM3_MspInit 1 *//* USER CODE END TIM3_MspInit 1 */}}

硬件定时器设备的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:

首先根据定时器设备名称 “timer3” 查找设备获取设备句柄。

以读写方式打开设备 “timer3” 。

设置定时器超时回调函数。

设置定时器模式为周期性定时器,并设置超时时间为 5 秒,此时定时器启动。

延时 3500ms 后读取定时器时间,读取到的值会以秒和微秒的形式显示。

#include <rtthread.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <rtdevice.h>#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(void)
{rt_err_t ret = RT_EOK;rt_hwtimerval_t timeout_s; /* 定时器超时值 */rt_device_t hw_dev = RT_NULL; /* 定时器设备句柄 */rt_hwtimer_mode_t mode; /* 定时器模式 */mode = HWTIMER_MODE_PERIOD;timeout_s.sec = 5; /* 秒 */timeout_s.usec = 0; /* 微秒 *//* 查找定时器设备 *//* 以读写方式打开设备 *//* 设置超时回调函数 *//* 设置模式为周期性定时器 *//* 设置定时器超时值为5s并启动定时器 */hw_dev = rt_device_find(HWTIMER_DEV_NAME);ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR);rt_device_set_rx_indicate(hw_dev, timeout_cb);ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode);rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s));return ret;}/* 导出到 msh 命令列表中 */MSH_CMD_EXPORT(hwtimer_sample, hwtimer sample);int main(void) {hwtimer_sample();return RT_EOK;
}

内部,外部都是这样

然后把 字符全删了就正常了

延时函数

rt_thread_delay延时的单位是系统节拍,如果每秒系统节拍数这个配置不是1000,延时数值的单位就不是毫秒,
rt_thread_mdelay可以直接使用,单位就是毫秒,无需考虑转换

添加头文件

右键工程,属性-------c/c++常规-----路径与符号-------添加,就可以把头文件路径添加到工程

rt-thread 学习(二)外部中断 添加头文件 延时函数相关推荐

  1. RT1064学习笔记-外部中断

    所有的中断号可以在MIMXRT1064.h中74行开始查看 外部中断 1.初始化IO口作为输入 设置要作为外部中断输入的 IO 口的状态,可以设置为上拉/下拉输入, 也可以设置为浮空输入(PKE=0) ...

  2. 【IAR】IAR for MSP430添加头文件的方法

    一.问题由来   在使用IAR for MSP 430编译代码时,用户为了方便管理文件,会将编写的.c和.h头文件存放在不同的路径下,这个路径是用户自定义的路径,因此我们不能直接在main.c文件中直 ...

  3. 基于F28335的Simulink代码生成(四)——如何链接可以访问底层文件的外部源文件和头文件

    基于F28335的Simulink代码生成系列文章目录 基于F28335的Simulink代码生成(一)--搞懂模型的运行逻辑 基于F28335的Simulink代码生成(二)--EPWM模块同步设置 ...

  4. codeblock添加头文件路径和静态库路径(转自CSDN用户jiao319)

    通常在一些项目中需要使用外部的头文件和静态库文件,codeblock通过如下方法添加头文件和库文件. 以codeblock 10.05为例 添加头文件:依次点击project->bulid op ...

  5. VS_自动添加头文件

    2019独角兽企业重金招聘Python工程师标准>>> 有时候,我们因为层级太乱,还手动添加可能出错,不愿意手动去写#include<>来加入头文件,就可以用自动添加头文 ...

  6. warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)

    ubuntu编译c程序报错: warning: implicit declaration of function 'sleep' 解决方法: 添加头文件: #include <unistd.h& ...

  7. C语言再学习 -- 常用头文件和函数(转)

    参看:C/C++常用头文件及函数汇总 linux常用头文件如下: POSIX标准定义的头文件 <dirent.h>        目录项 <fcntl.h>         文 ...

  8. 乐鑫ESP32-C3开发(四)添加头文件和源文件

    ESP32-C3 1. 工程分析 2. 源码CMakeList.txt 3. 添加头文件和源文件 4. 其他 1. 工程分析 组织工程目录,代码要解构,模块化,可复用,避免重复劳动,遵循一定的命名规则 ...

  9. 如何向linux中添加头文件,linux添加头文件路径

    gcc demo.c -o demo  -I/tools/libevent/include -L/tools/libevent/lib -levent -I:头文件目录 -L:静态库目录 -l:静态库 ...

最新文章

  1. MySQL:数据库优化,看这篇就够了
  2. 【JavaSE】双向链表的实现与讲解
  3. 对于JavaScript中this关键字的理解
  4. 我的心得:数据中心运维管理(一)
  5. SpringBoot_配置-外部配置加载顺序
  6. window使用技巧记录
  7. 使用ajax获取用户所在地的天气
  8. python中的集合set
  9. 异常的产生与传递 java 1615309080
  10. sql 实现决策树_SQL Server中的Microsoft决策树
  11. cookie 以及session 的使用
  12. 了解Spring AOP吗
  13. centos设置静态IP地址
  14. connection reset by beer问题排查
  15. 图像超分辨率:优化最近邻插值Super-Resolution by Predicting Offsets
  16. 【详解】软件工程中的有效性威胁(Threats to validity)到底是什么?
  17. 五分钟GO、KEGG和COG注释和富集分析
  18. linux进程状态是PD,GitHub - linuxep/lepd: server daemon of LEP
  19. SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...
  20. MATLAB中输出直观公式

热门文章

  1. 安利一个超牛的资源网站,国庆看片就用它了
  2. [Android]如何做一个崩溃率少于千分之三噶应用app(7)-跨module交互
  3. 如何理解面向对象思维?
  4. [数论 斐波那契] 51nod1355. 斐波那契的最小公倍数
  5. Spring boot基于itext实现定制化模板pdf生成功能
  6. c语言 算术平均滤波法_基本C语言滤波算法
  7. SpringBoot练手小案例-社区管理系统
  8. 10 个鲜为人知的 Linux 命令
  9. [日推荐] 『TheGolfGame』-小程序有游戏啦?
  10. 互联网寒冬,7面阿里,终获Offer,定级P6+