硬汉嵌入式论坛

 找回密码
 立即注册
查看: 986|回复: 7
收起左侧

HAL库驱动I2C、SPI、SDIO精确延时

[复制链接]

25

主题

92

回帖

167

积分

初级会员

积分
167
发表于 2022-1-22 14:09:19 | 显示全部楼层 |阅读模式
HAL库驱动中,由于某些外设的驱动需要使用超时判断(比如I2C、SPI、SDIO等),需要精确延时(精度为1ms),使用的是SysTick,但是在操作系统里面,我们需要使用SysTick来提供系统时基,那么就冲突了,怎么办?



为什么ST要占用systick呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2022-1-22 16:17:36 | 显示全部楼层
解决办法很多,根本方法就是重定向。比如我这个。

ThreadX的系统时钟节拍和STM32的HAL库时间基准都使用Systick的简单方法
https://www.armbbs.cn/forum.php? ... 9213&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

78

主题

693

回帖

927

积分

金牌会员

积分
927
发表于 2022-1-22 16:31:38 | 显示全部楼层
使用DWT
回复

使用道具 举报

2

主题

269

回帖

275

积分

高级会员

积分
275
发表于 2022-1-22 22:09:04 | 显示全部楼层

perf_counter开源包更香
回复

使用道具 举报

40

主题

296

回帖

416

积分

高级会员

积分
416
发表于 2022-1-24 11:50:49 | 显示全部楼层
回复

使用道具 举报

23

主题

211

回帖

280

积分

高级会员

积分
280
发表于 2022-1-24 16:02:53 | 显示全部楼层
cctv180 发表于 2022-1-22 22:09
perf_counter开源包更香

这个用起来确实方便,还附带了64位的时间戳,可惜Segger RTT不知道怎么输出64位的数据,只能用其他口输出。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107122
QQ
发表于 2022-1-24 17:30:08 | 显示全部楼层
blackfire531 发表于 2022-1-24 16:02
这个用起来确实方便,还附带了64位的时间戳,可惜Segger RTT不知道怎么输出64位的数据,只能用其他口输出 ...

sprintf转换下就行。
sprintf(buf, "X, %llu, %d, %d\r\n", (long long)sys_tickclk, tick2, tick3);
SEGGER_RTT_SetTerminal(0);
SEGGER_RTT_WriteString(0, buf);


QQ截图20220124172942.png
回复

使用道具 举报

23

主题

211

回帖

280

积分

高级会员

积分
280
发表于 2022-1-24 17:58:48 | 显示全部楼层
eric2013 发表于 2022-1-24 17:30
sprintf转换下就行。
sprintf(buf, "X, %llu, %d, %d\r\n", (long long)sys_tickclk, tick2, tick3);
S ...

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 22:41 , Processed in 0.176706 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表