单片机(2)

最近学习了嵌入式底层通信这块内容,从51单片机的UART串口,学到DS18B20单总线温度传感器。

一、UART串口通信

UART全称串行异步收发器,是单片机最基础的通信方式,用来实现单片机之间、单片机和电脑之间的数据交互。

  1. 接线要点

串口最少需要3根线:

RXD:接收数据线

TXD:发送数据线

GND:共地线

重点:TX交叉接对方RXD,并且双方GND必须连在一起。电压信号依靠电位差传输,基准地不一致,收到的数据大概率全是乱码。

单片机和电脑通信一般需要CH340芯片,把单片机串口信号转换成USB信号。

  1. 核心基础概念

波特率:串口传输速率,单位bps,代表一秒传输多少比特。常用:2400、4800、9600、115200。

串行:数据按位依次传输,先发低位LSB,后发高位MSB。

异步:通信双方不需要共用同一个时钟,只需要提前约定波特率;即便波特率参数一致,硬件时钟也会存在微小偏差,传输速度越快越容易出错。

全双工:TX、RX两条线相互独立,收发可以同时进行。

  1. 一帧数据组成

发送1字节数据完整帧:1位起始位 + 8位数据位 + 可选奇偶校验位 + 1位停止位

  1. 51单片机串口配置流程

发送流程

  1. 设置串口工作模式(常用模式1,8位数据,无校验)

  2. PCON寄存器配置SMOD,选择波特率是否加倍

  3. 根据公式计算定时器初值TH1

  4. 配置定时器1:8位自动重装模式,写入初值,打开定时器

  5. 向SBUF写入待发送字节,硬件自动开始发送

  6. 发送完成硬件自动置TI标志,TI必须软件手动清零,才能继续下一次发送

接收流程

  1. 设置串口工作模式为模式1

  2. 开启串口接收允许位REN

  3. PCON配置SMOD

  4. 计算波特率,配置定时器1

  5. 打开定时器1

  6. 编写串口中断服务函数

  7. 开启总中断EA、串口中断ES

  8. 等待接收中断触发;接收完成硬件置RI,RI必须软件清零

二、DS18B20单总线温度传感器

DS18B20是单总线温度传感器,只需要一根DQ数据线,外加电源和地就能通信,测温范围:-55℃ ~ +125℃。

  1. 引脚

GND:电源地

DQ:单总线通信引脚

VCC:供电引脚,供电范围3.0V~5.5V

12bit分辨率下,一次温度转换最长耗时750ms。

  1. 复位时序(通信第一步)

单总线时序要求非常严格,所有通信都要先复位:

  1. 总线空闲默认高电平

  2. 主机拉低DQ至少480us,发起复位

  3. 释放总线,等待DS18B20回应60~240us低电平脉冲;有应答代表传感器正常。

  4. 读写位时序

  5. 主机写0:拉低总线保持60~120us

  6. 主机写1:拉低总线至少1us,15us内释放总线回到高电平,供传感器采样

    每发送1bit,位与位之间间隔要大于1us

  7. 主机读数据:主机先拉低总线至少1us,随后释放总线;DS18B20会把数据放到总线上,主机要在15us之内完成电平采样。

  8. 常用指令

0xCC:跳过ROM指令,多个传感器挂载总线时不能使用,单传感器场景直接用

0x44:启动温度转换,转换完成温度数据存入暂存器

0xBE:读取暂存器9字节数据,我们只需要前两个字节

  1. 完整读取温度流程

  2. 发送复位信号

  3. 发送0xCC跳过ROM

  4. 发送0x44启动温度转换

  5. 等待约800ms,等待转换完成

  6. 再次发送复位信号

  7. 发送0xCC

  8. 发送0xBE读取暂存器

  9. 读取2字节:第1字节LSB,第2字节MSB

  10. 温度计算公式:温度 = 合并数值 × 0.0625

UART和单总线是嵌入式里很经典的两种通信。UART异步串口靠两根线+地线通信,开发简单稳定;DS18B20单总线节省引脚,但对时序要求苛刻,写代码稍微延时不对就通信失败。学这部分的时候,要多参考手册内容,许多是已经规定好的所以不必深究。

相关推荐
女神下凡5 小时前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
电子元器件选型哥6 小时前
MOS管驱动电阻怎么选?阻值大小到底影响什么?
单片机·嵌入式硬件·硬件工程师·半导体·电子元器件
lhbweilai6 小时前
深挖FreeRTOS内核实现(三)
c语言·stm32·单片机
白搞电子6 小时前
ESP32-S31 上做可在线安装的 WASM 应用平台:0.4.9 Beta 发布
单片机·嵌入式硬件·物联网
辰哥单片机设计11 小时前
漏水传感器(STM32)
stm32·单片机·嵌入式硬件
恶魔泡泡糖12 小时前
stm32F103C8T6标准库串口接收之多串口基础应用5
stm32·单片机·嵌入式硬件
木子单片机12 小时前
基于51单片机计步器—无线蓝牙APP上传
单片机·嵌入式硬件·51单片机·keil
智者知已应修善业12 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
李日华大战鸡红13 小时前
滑膜观测器(学习记录)
stm32·单片机·学习·matlab·机器人
白搞电子13 小时前
ESP32-S31 项目如何制作 Windows 一键烧录包:完整镜像、esptool 与数据边界
windows·stm32·单片机