【基于STM32F103C8T6的DS18b20温度检测系统】

这篇具有很好参考价值的文章主要介绍了【基于STM32F103C8T6的DS18b20温度检测系统】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

库函数是ST公司针对STM32系列微控制器提供的一套API,可以方便地实现各种功能。下面是一个基于STM32F103C8T6的温度检测系统的示例,使用了STM32F10x标准库函数。

硬件部分:

- STM32F103C8T6微控制器
- 电源模块
- 温度传感器模块

软件部分:

- Keil C编译器
- STM32F10x_StdPeriph_Driver库文件

系统流程:

1. 初始化ADC模块

- 使能ADC时钟
- 设置ADC模式为单通道单次转换模式
- 设置ADC采样时间
- 设置ADC通道
- 启动ADC

2. 读取温度值

- 读取ADC转换结果
- 计算温度值

3. 显示温度值

- 控制数码管模块显示温度值

代码实现:

以下代码演示了如何使用STM32F10x标准库函数来检测温度传感器的模拟信号,并将温度值显示在数码管上。

以下是基于STM32F103C8T6库函数的DS18B20温度检测系统代码:

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "misc.h"

#define DS18B20_GPIO GPIOB
#define DS18B20_PIN  GPIO_Pin_0

void delay_us(uint32_t time){
    uint32_t i;
    for(i=0;i<time;i++);
}

void delay_ms(uint32_t ms){
    SysTick->LOAD = ms*9000;
    SysTick->VAL = 0;
    SysTick->CTRL = 1;
    while(!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk));
    SysTick->CTRL = 0;
}

void DS18B20_Init(void){
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(DS18B20_GPIO, &GPIO_InitStructure);
    GPIO_SetBits(DS18B20_GPIO, DS18B20_PIN);
}

void DS18B20_WriteBit(uint8_t bit){
    GPIO_ResetBits(DS18B20_GPIO, DS18B20_PIN);
    delay_us(5);
    if(bit){
        GPIO_SetBits(DS18B20_GPIO, DS18B20_PIN);
    }
    delay_us(80);
    GPIO_SetBits(DS18B20_GPIO, DS18B20_PIN);
}

uint8_t DS18B20_ReadBit(void){
    uint8_t bit;
    GPIO_ResetBits(DS18B20_GPIO, DS18B20_PIN);
    delay_us(5);
    GPIO_SetBits(DS18B20_GPIO, DS18B20_PIN);
    delay_us(5);
    bit = GPIO_ReadInputDataBit(DS18B20_GPIO, DS18B20_PIN);
    delay_us(80);
    return bit;
}

void DS18B20_WriteByte(uint8_t byte){
    uint8_t i;
    for(i=0;i<8;i++){
        DS18B20_WriteBit(byte & 0x01);
        byte >>= 1;
    }
}

uint8_t DS18B20_ReadByte(void){
    uint8_t i, byte = 0;
    for(i=0;i<8;i++){
        byte >>= 1;
        if(DS18B20_ReadBit())
            byte |= 0x80;
    }
    return byte;
}

void DS18B20_Start(void){
    DS18B20_Init();
    DS18B20_WriteByte(0xCC);
    DS18B20_WriteByte(0x44);
}

float DS18B20_ReadTemp(void){
    uint8_t temp_l, temp_h;
    float temp;
    DS18B20_Init();
    DS18B20_WriteByte(0xCC);
    DS18B20_WriteByte(0xBE);
    temp_l = DS18B20_ReadByte();
    temp_h = DS18B20_ReadByte();
    temp = (float)((temp_h<<8) | temp_l) / 16.0;
    return temp;
}

int main(void){
    float temp;
    SysTick_Config(SystemCoreClock/1000);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    while(1){
        DS18B20_Start();
        delay_ms(800);
        temp = DS18B20_ReadTemp();
        //在这里可以将温度值显示在LCD等外设上
    }
}

代码中主要包括以下几个函数:

1. delay_us:微秒级延时函数,使用for循环实现。

2. delay_ms:毫秒级延时函数,使用SysTick定时器实现。

3. DS18B20_Init:初始化DS18B20引脚,使用GPIO初始化函数进行配置。

4. DS18B20_WriteBit:向DS18B20发送一个bit,先拉低数据线,再根据传入的参数决定是否拉高数据线,最后延时一段时间。

5. DS18B20_ReadBit:从DS18B20读取一个bit,先拉低数据线,再拉高数据线,读取数据线的电平,最后延时一段时间。

6. DS18B20_WriteByte:向DS18B20发送一个字节,先按位发送每一个bit,最后延时一段时间。

7. DS18B20_ReadByte:从DS18B20读取一个字节,先按位读取每一个bit,最后返回读取到的字节。

8. DS18B20_Start:开始一次温度转换,先初始化DS18B20引脚,然后向DS18B20发送指令开始转换。

9. DS18B20_ReadTemp:读取DS18B20转换后的温度值,先初始化DS18B20引脚,然后向DS18B20发送指令读取温度值,最后将温度值计算出来并返回。

10. main函数:主函数中初始化GPIOC和SysTick定时器,然后循环执行DS18B20_Start和DS18B20_ReadTemp,读取温度值并将其显示在LCD等外设上。

以上代码演示了如何使用STM32F10x标准库函数来检测温度传感器的模拟信号,并将温度值显示在数码管上。

总结

基于STM32F103C8T6微控制器的温度检测系统,可以使用STM32F10x标准库函数来实现。这样的系统可以用于各种应用场景,如温度监测等。

 文章来源地址https://www.toymoban.com/news/detail-806601.html

到了这里,关于【基于STM32F103C8T6的DS18b20温度检测系统】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32f103c8t6模板的搭建-基于正点例程

           笔者认为正点编写的官方例程结构较为整洁,可以便于后期的例程开发,如果开发者对于项目开发中芯片要求较高的话,有很多人会选择正点的开发板,但是通常大多数是stm32初学者会选择用价格更为便宜的c8t6来进行学习,而正点选用的教程开发板大多都是些RC、ZE、

    2024年02月06日
    浏览(68)
  • 基于STM32F103C8T6的超声波测距应用

    #一、超声波HC_SR04简介 #二、超声波工作原理 #三、超声波测距步骤 #四、硬件接线 #五、项目代码 一、超声波HC_SR04简介 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收。电路板上有四个引脚:VCC、GND、Trig(触发)、Echo(回应) 工作电压与电流

    2024年02月03日
    浏览(47)
  • 基于stm32f103c8t6的fft频率计

    之前项目中需要用到正弦信号的频率测量,也参考了几个大佬的博客(链接如下),但可能是由于stm32的型号不匹配,虽然也在网上查了一些需要修改的地方,但结果一直不太对,后来经过自己摸索结果终于对了,在这里给大家分享下,具体原理不在赘述。 参考的部分大佬博

    2024年02月14日
    浏览(74)
  • 基于STM32F103C8T6的HC-06蓝牙通信

    如果朋友们 遇到了如下问题 ,可以仔细借鉴本文章和另一篇专门讲解 蓝牙通信问题 的文章,一定能够解决你在蓝牙通信时遇到的诸多困难 1.在调试蓝牙模块AT指令时无返回值 2.身边 无USB转TTL模块 可以直接调试蓝牙模块(本人就是由于无模块花了了整整一天才调试成功)

    2024年02月03日
    浏览(69)
  • HX711压力传感器(基于STM32F103C8T6)

    HX711模块是我们目前比较常见的压力传感器模块,主要的作用是用来做压力检测,重量监测等等。博主的这篇博文主要实现功能为,在对重量或者压力进行监测的同时,可以累加或者清零数值,在此基础上就可以对比如饮水量进行统计等等。 HX711模块是市面上比较常见的模块

    2024年02月11日
    浏览(58)
  • 基于stm32f103c8t6的定时器详解(持续更新)

    先声明:stm32f103c8t6中没有基本定时器、只有TIM1-TIM4:分别是高级定时器和通用定时器(对照下图请自行阅读stm32f103x的datasheet) 1、定时器功能:定时、输出比较、输入捕获、互补输出,其中基本定时器只有定时功能、通用定时器只没有互补输出功能、高级定时器具有所有功能

    2023年04月24日
    浏览(70)
  • [STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

    目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数,和重定向printf) Uart.c main.c  3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢? 4.小车PWM调速,  6.跟随功能 7.避障功能 超声波测距

    2024年02月13日
    浏览(57)
  • 基于stm32f103c8t6及AS608-----指纹锁项目

              博主纯小白, 本文适合于初学者,大佬还请勿喷,欢迎提出意见,有纰漏之处将及时纠正。 在浅学了stmf103c8t6后,想着依据现在所拥有的知识和能力做一个小项目。 注:工程代码在文章末尾。 掌握C语言基础....这个最基础啦... 接触过类似单片机,稍微看得懂芯片

    2023年04月09日
    浏览(86)
  • 基于STM32F103C8T6的UAV飞控板硬件设计

    一、主控单元:         主控单元基于意法半导体公司的STM32F103C8T6单片机进行设计。STM32F103C8T6DE 内核为ARM Cortex-M3;最大主频:72MHz ;工作电压范围:2V~3.6V ;程序存储容量:64KB; 程序存储器类型:FLASH ;RAM总容量:20KB; GPIO端口数量:37 ;封装为LQFP-48;串行单线调试(

    2024年02月08日
    浏览(55)
  • STM32F103C8T6板子介绍

    STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器。  STM32F103C8T6 F1XX片上资源

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包