Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
混口饭吃,
rt-thread
提交
f497b171
R
rt-thread
项目概览
混口饭吃,
/
rt-thread
与 Fork 源项目一致
Fork自
Mr_Pangza / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f497b171
编写于
12月 12, 2018
作者:
Z
zylx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[components][drivers]fix hardware timer
上级
4fd6f2ef
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
25 addition
and
26 deletion
+25
-26
components/drivers/hwtimer/README_CN.md
components/drivers/hwtimer/README_CN.md
+24
-25
components/drivers/hwtimer/hwtimer.c
components/drivers/hwtimer/hwtimer.c
+1
-1
未找到文件。
components/drivers/hwtimer/README_CN.md
浏览文件 @
f497b171
定时器设备
===
##功能
---
# 定时器设备
## 功能
*
时间测量
*
周期或单次执行回调函数
##编译
---
##
编译
1.
在rtconfig.h添加
`#define RT_USING_HWTIMER`
##使用流程
---
##
使用流程
1.
以读写方式打开设备
2.
设置超时回调函数(如果需要)
3.
根据需要设置定时模式(单次/周期)
...
...
@@ -19,12 +18,12 @@
5.
写入超时值,定时器随即启动
6.
停止定时器(可选)
7.
关闭设备(如果需要)
应用参考 [hwtimer_test] (/examples/test/hwtimer
\_
test.c)
##驱动编写指南
---
###操作接口
##
驱动编写指南
###
操作接口
```
struct rt_hwtimer_ops
...
...
@@ -43,8 +42,8 @@ struct rt_hwtimer_ops
*
count_get -
<读取计数器值>
*
control -
<设置计数频率
>
###定时器特征信息
###
定时器特征信息
```
struct rt_hwtimer_info
{
...
...
@@ -60,7 +59,8 @@ struct rt_hwtimer_info
*
maxcnt
<计数器最大计数值>
*
cntmode
<递增计数
/
递减计数
>
###注册设备
### 注册设备
```
static rt_hwtimer_t _timer0;
int stm32_hwtimer_init(void)
...
...
@@ -73,8 +73,9 @@ int stm32_hwtimer_init(void)
return 0;
}
```
###定时器中断
### 定时器中断
```
void timer_irq_handler(void)
{
...
...
@@ -84,15 +85,13 @@ void timer_irq_handler(void)
}
```
##注意事项
---
<font
color=
"#FF0000"
>
可能出现定时误差
</font>
## 注意事项
**可能出现定时误差**
误差原因:
假设计数器最大值0xFFFF,计数频率1Mhz,定时时间1秒又1微秒。
由于定时器一次最多只能计时到65535us,对于1000001us的定时要求。
可以50000us定时20次完成,此时将会出现计算误差1us。
components/drivers/hwtimer/hwtimer.c
浏览文件 @
f497b171
...
...
@@ -37,7 +37,7 @@ rt_inline rt_uint32_t timeout_calc(rt_hwtimer_t *timer, rt_hwtimerval_t *tv)
{
timeout
=
tv_sec
/
i
;
if
(
timeout
<=
overflow
)
if
(
timeout
<=
overflow
&&
timeout
*
timer
->
freq
<=
timer
->
info
->
maxcnt
)
{
counter
=
timeout
*
timer
->
freq
;
devi
=
tv_sec
-
(
counter
/
(
float
)
timer
->
freq
)
*
i
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录