网站首页 > 编程文章 正文
嗨!大家好!我是路师傅,是一名电子技术方面的从业者,在这里分享自己的所见、所学,希望大家多多支持,点赞关注!
前提条件你得有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;
}
下载代码后,打开串行监视器。串行监视器将立即开始显示室温。
总结,这样最初代的开发板就搭建好了。后期如果我们想做其他的项目,我们就可以根据自己的需要来扩充来设计了。加油!欢迎大家关注,点赞,转发!
- 上一篇: STM32入门开发与实践-初入篇-概述
- 下一篇: STM32F0单片机快速入门二:开发环境的建立
猜你喜欢
- 2025-05-21 单片机编程用什么软件?单片机开发软件有哪些?
- 2025-05-21 STM32 开发环境用哪个呢?MDK和IAR那个比较好?结合JLINKV8 的话。
- 2025-05-21 学习stm32单片机,必备工具和软件,你知道几个?华维建议收藏
- 2025-05-21 快速移植大容量STM32单片机的方法
- 2025-05-21 LittlevGL在STM32上的移植使用
- 2025-05-21 零基础学习STM32智能家居系统之STM32模板程序解读
- 2025-05-21 「基于NUCLEO-F746ZG电机开发应用」2.基于SDK5.4.5-工程构建
- 2025-05-21 STM32F030基于LL库的最小软件工程
- 2025-05-21 Keil界面模糊,怎样设置高清界面?
- 2025-05-21 RTOS从入门到精通-基于FreeRTOS
你 发表评论:
欢迎- 最近发表
-
- 90岁老人科目三一把过火爆网络!考驾照、爱美甲……这群“90后”比年轻人潮
- DNF:遗忘之地任务流程,适用于新手起小号,装备修理白漂
- dnf手游:“首款流拍宝珠”,6位玩家眼睁睁看着500万泰拉丢失!
- dnf手游:小熊卡正式升级!可附魔到工会勋章,千万别卖!
- dnf手游:首张“涨抗魔”粉卡火了!以前3万没人要现在准备断货!
- dnf手游:团本币增加!3月26号打团有坑提前避开,浪费门票?
- dnf手游:涨价20倍!曾经没人要的,如今已是妥妥的T0材料!
- dnf手游:“官方鼓励回归”火了,白送玩家+20装备和王子卡等!
- dnf手游:无根之源千万别用!竞拍系统一定要抢否则错过崛起机会
- dnf手游:DNF手游各职业技能加点攻略、装备推荐!小白一看就会
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)