网站首页 > 博客文章 正文
嗨!大家好!我是路师傅,是一名电子技术方面的从业者,在这里分享自己的所见、所学,希望大家多多支持,点赞关注!
前提条件你得有C语言的基础,从软件着手入门。会看懂电路图和芯片手册。
对于新手小白来讲,在什么平台上开始练习单片机编程可能已经挑花眼了吧。面对众多博主,有的说要从51单片开始,有的说要从STM32 的平台开始练习。下面听我来讲一讲。
stm32和51单片机的区别:
1.不同的开发方式
51单片机一般直接操作寄存器,STM32主操作库函数编程。
2.系统资源不同
一般来说,STM32的资源比51单片机多。
3.开发环境可能不同
一般来说,51和STM32都可以在KEIL下开发,但是STM32的选择更多,可以在Linux、windows esplease,甚至vscode+插件模式下开发。
4.操作系统差异
一般来说,51单片机不支持操作系统,STM32支持各种主流操作系统,STM32更容易开发,可以很方便的使用系统实现各种场景的应用。由于51单片机没有操作系统,其发展存在一定的障碍,有时不得不牺牲一些功能来实现整体功能的和谐运行。
从新手的角度来讲,从STM32的平台开始练习更为简单, STM32平台有库文件支持,暂时不用理解底层寄存器的操作,程序更具可读性。
硬件平台我建议用STM32F103C8T6的最小系统板搭建,比如要上手流水灯实验,可以自己买元件焊接流水灯模块,根据你编程的需要连接电路编程验证就可以了。
今天我们将学习 DS18B20 温度传感器的用法。由于DS18B20 不支持 Arduino Dallas 库和 OneWire 库。这就是为什么我们必须在不使用库的情况下编写代码的原因。STM32F103C 的 DS18B20 代码有点长且复杂,因为没有库的参与,并且所有寻址模式都在代码中定义。
DS18B20 是一款单线防水传感器,用于测量 -55 至 125°C 之间的液体温度。用于读取、写入和执行温度转换的电源可以从数据线本身获得,无需外部电源。由于每个 DS18B20 都包含唯一的芯片序列号,因此同一 1-Wire 总线上可以存在多个 DS18B20。
DS18B20 防水数字温度传感器
这是DS18B20 传感器的预接线防水版本。当您需要测量远处或潮湿条件下的物体时非常方便。传感器可以测量-55 至 125°C(-67°F 至 +257°F)之间的温度。该电缆采用 PVC 护套。
因为它是数字的,所以即使长距离也不会出现信号衰减。这些 1 线数字温度传感器相当精确,即在大部分范围内为 ±0.5°C。它可以通过板载数模转换器提供高达 12 位的精度。它们可以与任何使用单个数字引脚的微控制器配合使用。
唯一的缺点是它们使用 Dallas 1-Wire 协议,该协议有点复杂,需要一堆代码来解析通信。我们添加了一个 4.7k 电阻,在使用传感器时需要将其用作 DATA 到 VCC 线的上拉电阻。
要了解有关该传感器的更多信息,您可以查阅DS18B20 传感器数据手册。
DS18B20 温度传感器与 STM32 的连接
现在让我们将 DS18B20 传感器与 STM32F103C8T6最小系统板连接起来。连接图如下。
传感器由 STM32 的 3.3V 引脚供电,GND 连接到 GND。同样,数字Pin连接到Bluepill的PA8。数字引脚通过 4.7K 电阻拉动。
DS18B20 STM32代码(仅供参考)
将以下代码上传到STM32F103C板,用于读取DS18B20感测到的温度。您可以使用任何方法上传代码。我使用串行方法并使用USB-TTL转换器模块上传代码。
int DSPIN = PA8;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
void loop()
{
// put your main code here, to run repeatedly:
double temp = TempRead();
temp = temp * 0.0625; // conversion accuracy is 0.0625 / LSB
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" °C");
Serial.println("");
delay(500);
}
boolean DS18B20_Init()
{
pinMode(DSPIN, OUTPUT);
digitalWrite(DSPIN, HIGH);
delayMicroseconds(5);
digitalWrite(DSPIN, LOW);
delayMicroseconds(750);//480-960
digitalWrite(DSPIN, HIGH);
pinMode(DSPIN, INPUT);
int t = 0;
while (digitalRead(DSPIN))
{
t++;
if (t > 60) return false;
delayMicroseconds(1);
}
t = 480 - t;
pinMode(DSPIN, OUTPUT);
delayMicroseconds(t);
digitalWrite(DSPIN, HIGH);
return true;
}
void DS18B20_Write(byte data)
{
pinMode(DSPIN, OUTPUT);
for (int i = 0; i < 8; i++)
{
digitalWrite(DSPIN, LOW);
delayMicroseconds(10);
if (data & 1) digitalWrite(DSPIN, HIGH);
else digitalWrite(DSPIN, LOW);
data >>= 1;
delayMicroseconds(50);
digitalWrite(DSPIN, HIGH);
}
}
byte DS18B20_Read()
{
pinMode(DSPIN, OUTPUT);
digitalWrite(DSPIN, HIGH);
delayMicroseconds(2);
byte data = 0;
for (int i = 0; i < 8; i++)
{
digitalWrite(DSPIN, LOW);
delayMicroseconds(1);
digitalWrite(DSPIN, HIGH);
pinMode(DSPIN, INPUT);
delayMicroseconds(5);
data >>= 1;
if (digitalRead(DSPIN)) data |= 0x80;
delayMicroseconds(55);
pinMode(DSPIN, OUTPUT);
digitalWrite(DSPIN, HIGH);
}
return data;
}
int TempRead()
{
if (!DS18B20_Init()) return 0;
DS18B20_Write (0xCC); // Send skip ROM command
DS18B20_Write (0x44); // Send reading start conversion command
if (!DS18B20_Init()) return 0;
DS18B20_Write (0xCC); // Send skip ROM command
DS18B20_Write (0xBE); // Read the register, a total of nine bytes, the first two bytes are the conversion value
int temp = DS18B20_Read (); // Low byte
temp |= DS18B20_Read () << 8; // High byte
return temp;
}
下载代码后,打开串行监视器。串行监视器将立即开始显示室温。
总结,这样最初代的开发板就搭建好了。后期如果我们想做其他的项目,我们就可以根据自己的需要来扩充来设计了。加油!欢迎大家关注,点赞,转发!
猜你喜欢
- 2025-05-16 网络技术领域端口号备忘录,受益匪浅 !
- 2025-05-16 实现多态必须满足什么条件
- 2025-05-16 常见的 Ethernet II 报文类型(EtherType)及其对应的 十六进制值
- 2025-05-16 Unicode,GBK和UTF8
- 2025-05-16 阿波罗 STM32F767 开发板资料连载第四十六章 NAND FLASH 实验
- 2025-05-16 基于c51单片机的智能温度控制系统设计与实现(含代码)
- 2025-05-16 基于msp430单片机1602 DS1802温度显示
- 2025-05-16 CPU缓存一致性:从理论到实战
- 2025-05-16 正点原子STM32F4/F7水星开发板资料连载第四十四章NAND FLASH实验
- 2025-05-16 D/A转换器DAC0832的应用
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 359℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)