STM32学习笔记-SPI-11

1.SPI通信

是一种通用数据总线

相比I2C,传输更快,最大科大80MHZ,设计简单粗暴,通信线个数多,容易资源浪费

四根通信线:SCK(串口时钟),MOSI(主出从入),MISO(主入从出),SS(从机选择)

同步,全双工

支撑总线挂在多设备(一主多从)

SPI没有应答机制的设计

2.硬件电路

所有SPI设备的SCK,MOSI,MISO分别接在一起

主机两外引出多条SS控制线,分别接到各从机的SS引脚

输出引脚配置位推挽输出,输入引脚配置为浮空或上拉输入

从机的引脚为高电平,也就是未选中时,MISO必须切换为高阻态

3.移位示意图

移位寄存器向左移,主机左边移出的数据到从机移位寄存器的右边

波特率发生器产生上升沿时,左移到通信线上,即MOSI和MISO上

产生下降沿时,移位寄存器接收到数据

4.SPI时序基本单元

模式1

CPOL=0:空闲模式时,SCK为低电平

CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

通信过程中,SS始终保持低电平,结束恢复高电平

SS下降沿后,从机的MISO必须置回高阻态

SCK上升沿时,主机和从机同时移出数据


5.W25Q64简介

W25Qxx系列是一种低成本,小型化,使用简单的非易失性存储器(易失性存储器指SRAM,DRAM,非易失性存储器指E2PROM,FLASH),常应用于数据存储,字库存储,固件程序存储等场景

存储介质:闪存

时钟频率:80MHZ(标准)/160MHZ/320MHZ

存储容量(24位地址):64的是64Mbit/8MByte

6.Flash操作注意事项

写入操作时:

写入操作前,必须先进行写使能

每个数据位只能由1改写为0,不能由0改写为1

写入数据前必须先擦除,擦除后,所有数据位变为1

擦除必须按最小擦除单元进行

连续写入多字节是,最多写入一页数据,超过页尾位置的数据,会回到页首覆盖写入

写入操作结束后,芯片进入忙状态,不响应新的读写操作

读取操作时:

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

7.数据手册重要事项

(1)状态寄存器1,有2个位:

BUSY:正在干活时,忽略进一步的指令

WRITE ENABLE LATCH(WEL):写使能锁存位,一个写使能,只能保证后续一条写指令可以执行

(2)指令集

芯片ID号需要关注

Write Enable 写使能 06h

Read Status Register1 读状态寄存器1 05h

Page Program 页编程(写数据) 02h

Sector Erase(4KB)扇区擦除 20h

JEDEC ID 擦除指令号 9Fh

Read Data 读数据 03h


8.STI外设简介

STM32内部集成了硬件SPI收发电路,可以由硬件自动执行数据收发功能,减轻了CPU的负担

可配置8位/16位的数据帧,高位先行/地位先行

时钟频率:f plck/(2,4,...,256)

支持多主机模型,主或从操作

可精简为半双工/单工通信

支持DMA

兼容I2S协议

9.框图 简化版

TDR和RDR的配合,可以实现连续的数据流
TDR数据整体转入移位寄存器的时刻,置TXE标志位,移位寄存器数据,整体转入RDR的时刻,置RXNE标志位

10.

第一步:开启时钟

第二步:初始化GPIO口,上拉输入

第三步:配置SPI外设

第四步:配置开关控制

### STM32 使用 OLED 显示屏的学习笔记与教程 #### 关于 STM32 和 OLED 的基础知识 STM32 是一种基于 ARM Cortex-M 架构的微控制器系列,广泛应用于嵌入式开发领域。OLED(有机发光二极管)显示屏因其高对比度、低功耗等特点,在许多项目中被用作显示设备。为了实现 STM32 对 OLED 屏幕的支持,通常需要完成硬件连接以及软件驱动程序的设计。 以下是有关 STM32 驱动 OLED 显示屏的一些关键知识点: #### 硬件连接方式 在 STM32 中,OLED 通常通过 IIC(I²C)、SPI 或 UART 接口进行通信。其中最常见的是 IIC 协议,因为它只需要两根线即可完成数据传输,简化了硬件设计[^1]。具体的硬件连接方法可以参考实际使用的模块手册或相关文档。 #### 软件初始化过程 对于 STM32 来说,使用 OLED 显示屏的第一步是对屏幕进行初始化配置。这一步骤包括设置通信协议参数、定义屏幕分辨率以及其他必要的寄存器操作。以下是一个简单的初始化代码示例: ```c #include "stm32f10x.h" #include "OLED.h" int main() { SystemInit(); // 初始化系统时钟 OLED_Init(); // 初始化 OLED 模块 while (1) { OLED_ShowString(2, 1, "Hello"); // 在第 2 行第 1 列显示字符串 "Hello"[^3] } } ``` 上述代码展示了如何调用 `OLED_Init()` 函数来启动 OLED 并利用 `OLED_ShowString` 方法向屏幕上写入文字信息。 #### 数据打印至 OLED 屏幕 如果希望将来自串口的数据实时展示到 OLED 上,则需编写额外的功能逻辑处理接收到的信息并将其传递给 OLED 控制接口。例如,可以通过中断服务例程捕获串口输入流,并逐字符绘制到指定位置上[^2]。 #### 进阶功能扩展 除了基本的文字输出外,还可以尝试实现更复杂的图形化界面效果,比如加载位图图像或者支持多语言字体渲染等功能。这些都需要深入理解底层库文件结构及其 API 定义说明。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值