void delay_us(uint16_t us)
{
/* 中断会打断微秒延时函数,
* 但计数器计数不会停
* 防止计数器增加到65535之后重新开始计数
*/
uint16_t differ=50000-us;
HAL_TIM_Base_Start(&htim2);
__HAL_TIM_SET_COUNTER(&htim2,differ);
while(differ<50000)
{
differ=__HAL_TIM_GET_COUNTER(&htim2);
}
HAL_TIM_Base_Stop(&htim2);
}
2. 注意程序工程中DS18B20.H的定义,及DS18B20.C文件,(同文件夹下附件)其内部函数定义根据DS18B20官方手册进行操作,DS18B20为one wire 通讯,对时序的要求相对严格,DS18B20的数据通讯通过DS18B20的data管脚进行单片机通讯,主要流程如下:
1. DS18B20初始化
2. DS18B20接入自检
3. DS18B20写0xcc(SKIP ROM)
4. 写0x44(通知传感器进行温度数据采集与转换)
5. DS18B2再次初始化
6. DS18B20再次接入自检
7. DS18B20写0xcc(SKIP ROM)(倒序即0011 0011,如下图左)
8. DS18B20写0xbe(通知传感器进行数传)(倒序0111 1101,下图右)
9. DS18B20读一个字节
10. DS18B20再读一个字节
4. 传感器选用的是DS18B20,因外部封装种类繁多,此处就不放链接了,相关代码可点击文末“阅读原文”进行查看。
END
来源:TopSemic嵌入式
→点关注,不迷路←