APP TIM驱动
结构体
app_tim_params_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| app_tim_id_t id |
Timer模块ID |
该参数的取值可以是下列值中的任意一个:
|
| timer_init_t init |
Timer模块的初始化配置 |
参考timer_init_t结构体 |
| tim_env_t tim_env |
仅用于参数、句柄和信号量的保存,不需要配置 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_tim.h。
timer_init_t
结构体定义如下:
| 成员 | 描述 | 取值 |
|---|---|---|
| uint32_t auto_reload |
自动装载值,表示定时器的倒计时数。如果要配置特定的持续时间(例如,µs、ms或s),则需要使用以下公式: Expect_time (s) = RELOAD/(SystemCoreClock-1) 当自动装载值配置为0时,不会产生计数完成事件中断。其中RELOAD为自动装载值,即auto_reload,SystemCoreClock为系统时钟频率。 |
0 ~ 0xFFFFFFFF |
- GR551x/GR5526/GR5x25:SDK_Folder\drivers\inc\hal\gr55xx_hal_tim.h
- GR533x:SDK_Folder\drivers\inc\hal\gr533x_hal_tim.h
- GR5405:SDK_Folder\hal_drv\include\hal_tim.h
枚举
app_tim_id_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_TIM_ID_0 |
TIMER模块0 |
| APP_TIM_ID_1 |
TIMER模块1 |
| APP_TIM_ID_MAX |
TIMER模块总数,用作参数检测 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_tim.h。
app_tim_evt_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_TIM_EVT_ERROR = 0 |
错误事件 |
| APP_TIM_EVT_DONE = 1 |
计数完成事件 |
| APP_TIM_EVT_CHANNEL0 | CHANNEL0事件,仅适用于GR533x、GR5405 |
| APP_TIM_EVT_CHANNEL1 | CHANNEL1事件,仅适用于GR533x、GR5405 |
| APP_TIM_EVT_CHANNEL2 | CHANNEL2事件,仅适用于GR533x、GR5405 |
| APP_TIM_EVT_CHANNEL3 | CHANNEL3事件,仅适用于GR533x、GR5405 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_tim.h。
app_tim_state_t
枚举定义如下:
| 成员 | 描述 |
|---|---|
| APP_TIM_INVALID = 0 |
TIMER不可用 |
| APP_TIM_ACTIVITY = 1 |
TIMER激活 |
| APP_TIM_SLEEP = 2 |
TIMER睡眠 |
详细信息请参考文件:SDK_Folder\drivers\inc\app_tim.h。
接口函数
| API | 芯片 | ||||
|---|---|---|---|---|---|
| GR551x | GR5526 | GR5x25 | GR533x | GR5405 | |
| app_tim_init |
Y |
Y |
Y |
Y |
Y |
| app_tim_deinit |
Y |
Y |
Y |
Y |
Y |
| app_tim_start |
Y |
Y |
Y |
Y |
Y |
| app_tim_stop |
Y |
Y |
Y |
Y |
Y |
| app_tim_get_handle |
Y |
Y |
Y |
Y |
Y |
| app_tim_get_channel0_val | N | N | N | Y |
Y |
| app_tim_get_channel1_val | N | N | N | Y |
Y |
| app_tim_get_channel2_val | N | N | N | Y |
Y |
| app_tim_get_channel3_val | N | N | N | Y |
Y |
app_tim_init
| 函数原型 | uint16_t app_tim_init(app_tim_params_t *p_params, app_tim_evt_handler_t evt_handler) |
|---|---|
| 功能说明 | 初始化Timer |
| 输入参数 |
|
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 回调函数形式参照typedef void (*app_tim_evt_handler_t)(app_tim_evt_t *p_evt); HAL层已经实现中断标志位的清理,用户不用关心中断标志的清理,回调函数根据返回事件类型进行相应的处理即可。 |
app_tim_deinit
| 函数原型 | uint16_t app_tim_deinit(app_tim_id_t id) |
|---|---|
| 功能说明 | 反初始化Timer |
| 输入参数 | id:Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_tim_start
| 函数原型 | uint16_t app_tim_start(app_tim_id_t id) |
|---|---|
| 功能说明 | 开启Timer,使能中断并开始向下计数 |
| 输入参数 | id:指定Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_tim_stop
| 函数原型 | uint16_t app_tim_stop(app_tim_id_t id) |
|---|---|
| 功能说明 | 关闭Timer,停止计数 |
| 输入参数 | id:指定Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 |
app_tim_get_handle
| 函数原型 | uint16_t app_tim_get_handle(app_tim_id_t id) |
|---|---|
| 功能说明 | 获取Timer句柄 |
| 输入参数 | id:指定Timer模块ID |
| 返回值 |
Timer句柄,详见:
|
| 备注 |
app_tim_get_channel0_val
| 函数原型 | uint32_t app_tim_get_channel0_val(app_tim_id_t id) |
|---|---|
| 功能说明 | 获取当前通道0的计数值 |
| 输入参数 | id:Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 仅适用于GR533x、GR5405 |
app_tim_get_channel1_val
| 函数原型 | uint32_t app_tim_get_channel1_val(app_tim_id_t id) |
|---|---|
| 功能说明 | 获取当前通道1的计数值 |
| 输入参数 | id:Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 仅适用于GR533x、GR5405 |
app_tim_get_channel2_val
| 函数原型 | uint32_t app_tim_get_channel2_val(app_tim_id_t id) |
|---|---|
| 功能说明 | 获取当前通道2的计数值 |
| 输入参数 | id:Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 仅适用于GR533x、GR5405 |
app_tim_get_channel3_val
| 函数原型 | uint32_t app_tim_get_channel3_val(app_tim_id_t id) |
|---|---|
| 功能说明 | 获取当前通道3的计数值 |
| 输入参数 | id:Timer模块ID |
| 返回值 | APP_DRV_xxx:详见SDK_Folder\drivers\inc\app_drv_error.h宏定义 |
| 备注 | 仅适用于GR533x、GR5405 |
示例工程
示例工程代码帮助开发者快速理解并使用TIMER驱动。
TIMER
该示例工程实现TIMER的定时功能,工程路径:SDK_Folder\projects\peripheral\tim\app_tim。
流程图
示例设置TIMER0的reload值为SystemCoreClock - 1,因为TIMER0使用系统时钟,因此会看到每秒产生一次中断并打印。设置TIMER1的reload值为SystemCoreClok /100 - 1,TIMER1每10 ms产生中断,TIMER0和TIMER1计数将在10s后停止。
初始化参数
p_params_tim0.id = APP_TIM_ID_0;
p_params_tim0.init.auto_reload = SystemCoreClock - 1;
- id:TIMER模块ID,选择APP_TIM_ID_0(TIMER0)
- auto_reload:自动装载值,设置为SystemCoreClock – 1,表示1s
重要函数
-
初始化模块
app_tim_init(&p_params_tim0, app_tim0_event_handler) -
开启TIMER计数
app_tim_start(APP_TIM_ID_0) -
停止TIMER计数
app_tim_stop(APP_TIM_ID_0)
测试验证
连接开发板到PC端,打开串口助手,连接串口,查看串口日志。TIMER0 1s打印一次串口,10s后停止打印。
This is 0th call TIMER0.
This is 1th call TIMER0.
This is 2th call TIMER0.
This is 3th call TIMER0.
This is 4th call TIMER0.
This is 5th call TIMER0.
This is 6th call TIMER0.
This is 7th call TIMER0.
This is 8th call TIMER0.
This is 9th call TIMER0.
This example demo end.