STM32F407VET6使用RT-Thread在线添加DS18B20温度传感器软件包

STM32F407VET6使用RT-Thread在线添加DS18B20温度传感器软件包

在线添加软件包

在相关目录下使用env工具
在这里插入图片描述
开启sensor框架
在这里插入图片描述
找到对应的软件包,开启
在这里插入图片描述
在这里插入图片描述
打开keil工程,会发现有相应的软件包及sensor框架
在这里插入图片描述
修改引脚,参照示例即可使用。
在这里插入图片描述
这里需要注意一下,如果你使用的是以下这种不带外部电阻的DS18B20模块,应对引脚修改为上拉输入模式,否则出现无法发现设备的请况Can’t find device:temp_ds18b20。
在这里插入图片描述
修改如下:
在这里插入图片描述

手动添加软件包的步骤

打开sensor框架
在这里插入图片描述
添加驱动代码,这里给出大概思路不仔细每一步了。
在这里插入图片描述
驱动代码包括:硬件驱动函数部分、ops函数、数据获取函数、指令控制函数、初始化(包括传感器结构体赋值)。
ops函数、数据获取函数、指令控制函数、
在这里插入图片描述
初始化
在这里插入图片描述
驱动相关函数编写,基本是为获取温度传感器数据服务的:硬件初始化,原始数据获取(ds18b20要根据时序编写,我懒的做了),数据处理、控制传输指令等。
在这里插入图片描述
使用的话就可以按照常规的设备使用框架方式了。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【资源介绍】 基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip基于STM32F407VET6DS18B20开发的温度报警系统.zip 【备注】 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 欢迎下载交流,互相学习,共同进步!
STM32F407单片机读写 DS18B20温度传感器 并串口屏显示DEMO软件例程源码,可以做为你的学习设计参考。 int main(void) { uint8_t DS18B20ID[8]; float temperature; /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); HMI_USARTx_Init(); while(DS18B20_Init()) { printf("DS18B20温度传感器不存在\n"); HAL_Delay(1000); } printf("检测到DS18B20温度传感器,并初始化成功\n"); DS18B20_ReadId(DS18B20ID); /* 无限循环 */ while (1) { temperature=DS18B20_GetTemp_MatchRom(DS18B20ID); /* 打印通过 DS18B20 序列号获取的温度值 */ printf("获取该序列号器件的温度:%.1f\n",temperature); HMI_value_setting("page1.gross.val",temperature*10); HAL_Delay(1000); } } /** * 函数功能: 向串口屏发送数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_value_setting(const char *val_str,uint32_t value) { uint8_t tmp_str[30]={0}; uint8_t i; sprintf((char *)tmp_str,"%s=%d",val_str,value); for(i=0;iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } /** * 函数功能: 向串口屏发送浮点数据 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void HMI_string_setting(const char *val_str,int32_t value) { uint8_t tmp_str[50]={0}; uint8_t i; float temp=(float)value; sprintf((char *)
好的,您可以按照以下步骤进行操作: 1. 连接硬件:将DS18B20传感器的VCC接到STM32的3.3V电源,GND接到GND,将DQ(数据线)接到STM32的任意一个IO口,同时在DQ线上加上4.7K上拉电阻。 2. 在STM32的开发环境中,打开一个新工程,选择正确的芯片型号,并配置好系统时钟。 3. 在代码中引入OneWire库和DS18B20库,这两个库可以在GitHub上找到,下载后加入到工程中。 4. 初始化OneWire库和DS18B20库,在代码中设置DS18B20的IO口。 5. 在主函数中调用温度采集函数,将采集到的温度值通过串口输出。 下面是一份简单的参考代码,您可以参考一下: ```c #include "stm32f10x.h" #include "OneWire.h" #include "DS18B20.h" #include "stdio.h" void USART_Config(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } int main(void) { USART_Config(); OneWire_Init(GPIOA, GPIO_Pin_0); DS18B20_Init(DS18B20_Resolution_12bits); float temperature; while (1) { if (DS18B20_Read_Temperature(&temperature) == DS18B20_OK) { char buffer[32]; sprintf(buffer, "Temperature: %.2f\r\n", temperature); USART_SendString(USART1, buffer); } } } void USART_SendString(USART_TypeDef *USARTx, char *str) { while (*str) { while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET) ; USART_SendData(USARTx, *str++); } } ``` 注意:以上代码仅供参考,具体实现还需要根据您的实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛Jay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值