stm32f103c8t6bs 在面包板上接入18b20
时间: 2023-09-04 07:08:51 浏览: 206
stm32f103c8t6 ds18b20
接入 DS18B20 温度传感器需要以下步骤:
1. 准备硬件
将 STM32F103C8T6 开发板和 DS18B20 温度传感器连接在面包板上。连接需要三个引脚,分别是 VCC、GND 和 DQ。其中,VCC 连接到开发板的 3.3V 电源引脚,GND 连接到 GND 引脚,DQ 连接到开发板的任意一个 I/O 引脚。
2. 初始化引脚
首先需要在程序中初始化对应的引脚。使用 STM32F103C8T6 的库函数可以轻松地实现初始化,例如:
```
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
```
其中,GPIOA 是引脚所在的端口,GPIO_PIN_0 是引脚编号,GPIO_MODE_OUTPUT_PP 是引脚模式,表示设置为推挽输出模式。
3. 发送指令
向 DS18B20 发送指令需要实现时序,可以使用延时函数或者定时器实现。首先需要发送复位指令,然后发送读取温度指令。例如:
```
void DS18B20_Start(void)
{
DS18B20_DQ_OUT();
DS18B20_DQ_RESET();
HAL_Delay(1);
DS18B20_DQ_SET();
HAL_Delay(30);
DS18B20_DQ_IN();
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_SET);
}
void DS18B20_ReadTemp(void)
{
DS18B20_Start();
DS18B20_DQ_OUT();
DS18B20_DQ_RESET();
HAL_Delay(5);
DS18B20_DQ_SET();
DS18B20_DQ_IN();
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_SET);
HAL_Delay(1);
DS18B20_DQ_IN();
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_SET);
for(uint8_t i = 0; i < 8; i++)
{
uint8_t byte = 0;
for(uint8_t j = 0; j < 8; j++)
{
byte >>= 1;
DS18B20_DQ_OUT();
DS18B20_DQ_RESET();
HAL_Delay(1);
DS18B20_DQ_SET();
DS18B20_DQ_IN();
if(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_SET)
{
byte |= 0x80;
}
while(HAL_GPIO_ReadPin(DS18B20_DQ_GPIO_Port, DS18B20_DQ_Pin) == GPIO_PIN_RESET);
}
temp[i] = byte;
}
}
```
其中,DS18B20_Start 函数用于发送复位指令,DS18B20_ReadTemp 函数用于发送读取温度指令,并将读取到的温度数据存储在 temp 数组中。
4. 解析数据
读取到的温度数据需要进行解析,将其转换为实际温度值。例如:
```
float DS18B20_GetTemp(void)
{
uint16_t t = temp[1];
t <<= 8;
t |= temp[0];
float temp_value = t * 0.0625;
return temp_value;
}
```
其中,temp 数组存储了读取到的温度数据,将其转换为实际温度值并返回。
以上就是在 STM32F103C8T6 开发板上接入 DS18B20 温度传感器的步骤。
阅读全文