本资源提供了一套使用STM32F407单片机与DS18B20温度传感器进行通信的示例代码,包括通过串口屏显示温度数据。适合初学者学习和参考。
STM32F407单片机读取并显示DS18B20温度传感器数据的示例程序源码可以作为学习参考。
```c
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);
printf(获取该序列号器件的温度:%.1f\n,temperature);
HMI_value_setting(page1.gross.val,temperature * 10);
HAL_Delay(1000);
}
}
/** 函数功能: 向串口屏发送数据
* 输入参数: val_str - 字符串指针,value - 要发送的整数值
* 返回值: 无
*/
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);
}
/** 函数功能: 向串口屏发送浮点数据
* 输入参数: val_str - 字符串指针,value - 要发送的整数值
* 返回值: 无
*/
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 *)tmp_str, %s=%.1f, val_str,temp);
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);
}
```