嵌入式学习日记

CPU:运算器、控制器、寄存器

运算器: 信息处理

控制器: 控制各种器件进行工作

寄存器: 信息存储

串口通讯的缺点:

  1. 不能远距离传输信号(RS232、RS485)
  2. 通信速度慢(SPI)
  3. 不能一对多通信(I2C)


RS232通讯距离短,RS485通讯距离长,RS485还有一对多的通讯功能。

SPI通讯速度快。

I2C最大的优点:支持多设备互相通讯,支持多组通信

支持多设备通讯

  • 画电路板需要注意的事情

时钟是用来同步信号的,发送端在时钟的高电平发送数据,接收端在时钟的高电平接收数据。

芯片是如何输出高低电平的:上面的MOS管导通就输出高电平,下面的MOS管导通就输出低电平。

上拉电阻的取值:上拉电阻太大会造成浪费和烧毁电路,上拉电阻太小无法把总线拉低到低电平的状态,**上拉电阻的取值一般取4.7K欧,**随着总线的增加也会适当降低上拉电阻的取值。

I2C采用的方案是上拉电阻+开漏输出,上拉电阻的取值一般就是几千欧姆,总线设备多且通讯速度高的话,上拉电阻取值就小一些,反之就去大一点。

I2C抗干扰能力弱。

  • 写代码需要注意的事情

这三个东西结合起来看会更好

W25Q64学习SPI通讯

W25Q64简介

  • W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,
  • 常应用于数据存储、字库存储、固件程序存储等场景
  • 存储介质:Nor Flash(闪存)
  • 时钟频率:80MHz/160MHz(Dual SPI)/320MHz(Quad SPI)
  • 存储容量(24位地址):W25Q40: 4Mbit/512KByte
    W25Q80: 8Mbit/1MByte
    W25Q16: 16Mbit/2MByte
    W25Q32: 32Mbit/4MByte
    W25Q64: 64Mbit/8MByte
    W25Q128: 128Mbit/16MByte
    W25Q256: 256Mbit/32MByte

硬件电路:

W25Q64框图

Flash操作注意事项

写入操作时:

  • 写入操作前,必须先进行写使能。
  • 每个数据位只能由1改写为0,不能由0改为为1
  • 写入数据前必须先擦除,擦除后,所以数据位变为1
  • 擦除必须按照最小擦除单元进行
  • 连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到首页覆盖写入。
  • 写入操作结束后,芯片进入忙状态,不响应新的读写操作。

读取操作时候:

  • 直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取。

SPI外设简介

  • STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
  • 可配置8位/16位数据帧、高位先行/低位先行
  • 时钟频率:fpcLk/(2,4, 8,16,32, 64,128, 256)
  • 支持多主机模型、主或从操作
  • 可精简为半双工/单工通信
  • 支持DMA
  • 兼容I2S协议
  • STM32F103C8T6硬件SPI资源:SPI1、SPI2

SPI框图:

SPI 是同步串行、主从、全双工接口。主机给时钟(SCK),一边从 MOSI 送数据给从机,同时从 MISO 收回数据;片选 NSS 决定哪一颗从机工作。

引脚与最外层

  • SCK:位时钟,来自 Master。

  • MOSI / MISO:主出从入 / 主入从出。

  • NSS :片选;低有效。既可硬件管理 (外设自动控制),也可软件拉脚(GPIO 方式)。

图左侧 4 根线和最下方的 NSS,就是 SPI 和外部世界的接口。

数据通路(图核心)

cpp 复制代码
写DR → 发送缓冲区(TX buffer) → 移位寄存器 → MOSI 线
MISO 线 → 移位寄存器 → 接收缓冲区(RX buffer) → 读DR
  • 移位寄存器:跟随 SCK 每个沿移入/移出 1 位。

  • 发送/接收缓冲区:通常是 1×字宽(8/16 bit)的单深度缓冲。

  • LSBFIRST 控位:决定移位方向(默认 MSB first,置 1 变 LSB first)。

全双工要点 :每"发"一个位的同时也在"收"一个位------所以主机必须写 DR 才会产生时钟,从而才能把对端数据"时出来"。这就是"SPI 接收也需要发送占位"的根本原因。

波特率发生器 & 主控制电路

  • BR[2:0] 分频 :SCK = PCLK / {2,4,8,...,256}。在 CR1.BR 里。

  • CPOL/CPHA:时钟空闲极性与采样/改变边沿。

  • MSTR:主/从选择。

  • SPE:SPI 使能总开关。

SPI Mode CPOL CPHA 空闲电平 采样沿
0 0 0 上升沿采样
1 0 1 下降沿采样
2 1 0 下降沿采样
3 1 1 上升沿采样

控制寄存器 CR1(图右下)

主要字段(常见):

  • CPOL / CPHA:见上。

  • MSTR:1=主机。

  • BR[2:0]:分频选择。

  • SPE:1=启动 SPI。

  • LSBFIRST:1=低位先发。默认 0(高位先发)。

  • SSM/SSI:软件管理 NSS(无外部 NSS 线时常用)。

    • SSM=1 允许软件接管 NSS;

    • 同时把 SSI=1 等效于"片选已有效",否则从模式下会认为未选中。

  • RXONLY:只接收(半双工接收场景)。

  • DFF:数据帧 8/16 bit(老款 F1/F3 有这个位)。

  • BIDIMODE/BIDIOE:单线半双工模式以及方向输出使能。

  • CRCEN/CRCNext:CRC 计算与发送控制(很少在普通外设上用)。

  • 左边四根线:SCK/MOSI/MISO/NSS

  • 中央:移位寄存器 上下连着发送/接收缓冲 ,再连地址与数据总线DR

  • 右侧:CR1/CR2/SR 组合:

    • CR1:模式、主从、分频、帧长、方向等"性格"。

    • CR2:中断、DMA、NSS 输出使能等"外联"。

    • SR:TXE/RXNE/BSY/OVR/MODF/CRCERR 等"状态回报"。

  • 下方:波特率发生器主控制电路,由 CR1 配参后驱动整个通道。

  • 右中"小 0/1 开关"图示:可理解为单线方向/数据路径选择(BIDIMODE/BIDIOE)或发送/接收通路的选择与门控。

  • "先写 DR 才有 SCK;读 DR 清 RXNE;读 DR→读 SR 清 OVR;TXE==1 不代表结束,BSY==0 才是真的结束。"

  • 设备对不上:先看 Mode,再看片选时序

  • 一主多从:GPIO 当 CS,软 NSS(SSM=1, SSI=1),更灵活。

  • 高速长线:SCK 分频+端接+上拉;必要时降速保稳

SPI基本结构:

主模式全双工连续传输:

非连续传输

软件硬件波形对比

Ctrl+空格是提示

Unix时间戳

  • Unix时间戳(UnixTimestamp)定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒
  • 时间戳存储在一个秒计数器中,秒计数器为32位/64位的整型变量
  • 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间

UTC/GMT

  • GMT(Greenwich Mean Time)格林尼治标准时间是一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准
  • UTC(Universal TimeCoordinated)协调世界时是一种以原子钟为基础的时间计量系统。它规定绝133原子基态的两个超精细能级间在零磁场下跃迁辐射9,192,631,770周所持续的时间为1秒。当原子钟计时一天的时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其计时与地球自转的协调一致

时间戳转换

  • C语言的time.h模块提供了时间获取和时间戳转换的相关函数,可以方便地进行秒计数器、日期时间和字符串之间的转换

BKP简介

  • BKP(Backup Registers)备份寄存器
  • BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位
  • TAMPER引脚产生的侵入事件将所有备份寄存器内容清除 RTC引脚输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲
  • 存储RTC时钟校准寄存器
  • 用户数据存储容量: 20字节(中容量和小容量)/ 84字节(大容量和互联型)

BKP基本结构

RTC简介

  • RTC(Real Time Clock)实时时钟
  • RTC是一个独立的定时器,可为系统提供时钟和日历的功能
  • RTC和时钟配置系统处于后备区域,系统复位时数据不清零,VDD(2.0~3.6V)断电后可借助VBAT(1.8~3.6V)供电继续走时
  • 32位的可编程计数器,可对应Unix时间戳的秒计数器
  • 20位的可编程预分频器,可适配不同频率的输入时钟
  • 可选择三种RTC时钟源: HSE时钟除以128(通常为8MHz/128) LSE振荡器时钟(通常为32.768KHz) LSI振荡器时钟(4OKHz)

RTC框图

RTC基本结构

硬件电路

RTC操作注意事项

  • 执行以下操作将使能对BKP和RTC的访问: 设置RCC_APB1ENR的PWREN和BKPEN,使能PWR和BKP时钟。 设置PWR_CR的DBP,使能对BKP和RTC的访问。
  • 若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1
  • 必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器
  • 对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器
相关推荐
lingggggaaaa4 小时前
小迪安全v2023学习笔记(七十七讲)—— 业务设计篇&隐私合规检测&重定向漏洞&资源拒绝服务
笔记·学习·安全·web安全·网络安全
百度森森4 小时前
【nuscenes数据集有关】
c++·数码相机·学习·ubuntu
OEC小胖胖6 小时前
React学习之路永无止境:下一步,去向何方?
前端·javascript·学习·react.js·前端框架·react·web
我命由我123456 小时前
Photoshop - Photoshop 触摸功能
运维·笔记·学习·ui·课程设计·设计·美工
蓑衣客VS索尼克8 小时前
第三章:生活重构:当程序员不再只是“码农“
学习·程序人生·重构·生活
耳总是一颗苹果10 小时前
数据结构---选择排序
c语言·数据结构·学习·算法·排序算法
ホロHoro11 小时前
学习笔记:MYSQL(3)(常用函数和约束)
笔记·学习·mysql
梦中的天之酒壶13 小时前
Mysql学习第五天 Innodb底层原理与Mysql日志机制深入剖析
学习·mysql
yuxb7313 小时前
Docker学习笔记(一):容器基础、生态与安装实践
运维·笔记·学习·docker