下述代码为stm32在rt-thread平台下通过DS18B20采集温度的代码,温度较之实际温度扩大了10倍
static rt_thread_t ds18b20_tid=NULL;
///* 引脚编号,通过查看设备驱动文件drv_gpio.c确定 */
#define DS18B20_DQ 2 /* PA11 */
//复位DS18B20
void DS18B20_Rst(void)
{
rt_pin_mode(DS18B20_DQ, PIN_MODE_OUTPUT);// 引脚为输出模式
rt_pin_write(DS18B20_DQ, PIN_LOW); //拉低DQ
rt_hw_us_delay(750); //拉低750us(480 ~ 960us)
rt_pin_mode(DS18B20_DQ, PIN_MODE_INPUT); //设置为输入,即可释放总线的占用
//进入接收模式,等待应答信号。
}
//等待DS18B20的回应
//返回1:未检测到DS18B20的存在 返回0:存在
//等待了30us, 从机回应为108us,正常。
uint8_t DS18B20_Check(void)
{
uint8_t retry=0;
//------------------等待时间----------------------------------
rt_hw_us_delay(15); //15 ~60us 等待
while (rt_pin_read(DS18B20_DQ)&&retry<100) //最多还等待100us
{
retry++;
rt_hw_us_delay(1);
};
if(retry>=100) return 1; //100us未响应,则判断未检测到
else retry=0;
//-

该代码示例展示了如何在STM32微控制器上,基于RT-Thread实时操作系统,通过DS18B20传感器进行温度采集。代码包括复位、检查传感器响应、写入和读取字节的函数,以及启动温度转换和获取温度值的函数。此外,还创建了一个线程来周期性读取温度,并根据温度值控制LED的状态。
最低0.47元/天 解锁文章
665

被折叠的 条评论
为什么被折叠?



