- 设置按键外部中断
- 开启硬件定时器
- 初始化配置部分
- 延时函数
- 添加头文件
#include开启硬件定时器 初始化配置部分#include #include "board.h" #define DBG_TAG "main" #define DBG_LVL DBG_LOG #include #define B1_PIN_NUM GET_PIN(B,1) void B1_IRQ_CB(void *args) { rt_kprintf("enter B1_IRQ_CB!rn"); rt_pin_write(B1_PIN_NUM, PIN_HIGH); } static void pin_beep_sample(void) { rt_pin_mode(B1_PIN_NUM, PIN_MODE_INPUT_PULLUP); 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; }
#define BSP_USING_TIM
#ifdef BSP_USING_TIM
#define BSP_USING_TIM3
void HAL_TIM_base_MspInit(TIM_HandleTypeDef* htim_base)
{
if(htim_base->Instance==TIM3)
{
__HAL_RCC_TIM3_CLK_ENABLE();
}
}
硬件定时器设备的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
首先根据定时器设备名称 “timer3” 查找设备获取设备句柄。
以读写方式打开设备 “timer3” 。
设置定时器超时回调函数。
设置定时器模式为周期性定时器,并设置超时时间为 5 秒,此时定时器启动。
延时 3500ms 后读取定时器时间,读取到的值会以秒和微秒的形式显示。
#include#define DBG_TAG "main" #define DBG_LVL DBG_LOG #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(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; 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_CMD_EXPORT(hwtimer_sample, hwtimer sample); int main(void) { hwtimer_sample(); return RT_EOK; }
内部,外部都是这样
然后把 字符全删了就正常了
rt_thread_delay延时的单位是系统节拍,如果每秒系统节拍数这个配置不是1000,延时数值的单位就不是毫秒,
rt_thread_mdelay可以直接使用,单位就是毫秒,无需考虑转换
右键工程,属性-------c/c++常规-----路径与符号-------添加,就可以把头文件路径添加到工程



