2019-12-14 12:19发布
wctmdgcd 发表于 2018-9-25 15:58 不同的应用场景有不同的写法,像达拉斯协议的延时,还用定时器来延时,是不是麻烦了点。 ...
zqf441775525 发表于 2018-9-25 14:31 如果要延时10mS呢?难道要放720000个__NOP();?
wctmdgcd 发表于 2018-9-25 17:29 大名鼎鼎的 DS18B20就是达拉斯协议啊,
最多设置5个标签!
达拉斯协议 主要用在哪里?
ms延时有库的。就是us延时比较头疼
#define OW_DELAY480US 479//480.05
void ow_delay_480us(void) {//479.958us
vu32 temp;
SysTick->LOAD = OW_DELAY480US * FAC_US - 5; //时间加载,Delay12us5=112:26.50khz,Delay12us5=54:39.919KHZ
SysTick->VAL = 0x00; //清空计数器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //开始倒数
do {
temp = SysTick->CTRL;
} while (temp & 0x01 && !(temp & (1 << 16))); //等待时间到达
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭计数器
SysTick->VAL = 0X00; //清空计数器
}
这货有人用双向uart搞定。。
一周热门 更多>