| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32的SPI模式读写FLASH芯片全面讲解 -> 正文阅读 |
|
[嵌入式]STM32的SPI模式读写FLASH芯片全面讲解 |
SPI协议简介 SPI协议,即串行外围设备接口,是一种告诉全双工的通信总线,它被广泛地使用在ADC,LCD等设备与MCU间通信的场合。 SPI信号线 SPI包含4条总线,分别为SS,SCK,MOSI,MISO.作用如下: 1) SS:片选信号线,当有多个SPI设备和MCU相连时,每个设备的这个片选信号线是与MCU单独的引脚相连的,而其他的SCK,MOSI,MISO线则为多个设备并联到相同的SPI总线上,当SS信号线为低电平时,片选有效,开始SPI通信. 2) SCK:时钟信号线,由主通信设备产生,不同的设备支持的时钟频率不一样. 3) MOSI:主设备输出/从设备输入引脚,主机的数据从这条信号线输出,从机由这条信号线读入数据,即这条线上的数据方向为从主机到从机. 4)MISO:主设备输入/从设备输出引脚,这条线上数据是从机到主机. SPI模式 根据时钟极性(CPOL)和时钟相位(CPHA)配置的不同,分为4种SPI模式。 时钟极性是指SPI通信设备处于空闲状态时(也可以认为这是SPI通信开始时,即SS线为低电平),SCK信号线的电平信号。CPOL=0时,SCK在空闲状态时为低电平,CPOL=1时则相反。 时钟相位是指数据采样的时刻,当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的奇数边沿被采样。当CPHA=1时,数据线在SCK的偶数边沿被采样。 下面以CPHA=0为例讲解SPI时序。 首先,由主机把片选信号NSS拉低,意为主机输出。 在NSS被拉低的时刻,SCK分为两种情况,若我们设置CPOL=0,则SCK时序在这时为低电平,若设置为CPOL=1,则SCK在这个时刻为高电平。 无论CPOL为0还是1,因为我们配置的时钟相位CPHA=0,在采样时刻的时序中我们可以看到,采样时刻都是在SCK的奇数边沿(注意奇数边沿有时为下降沿,有时为上升沿)。 因此,MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,这个信号将会在SCK奇数边沿时被采集,在非采样时刻,MOSI和MISO的有效信号才发生切换。 对于CPHA=1的情况也类似,只是数据信号的采样时刻为偶数边沿。 注意:使用SPI协议通信时,主机和从机的时序要保持一致,即两者都选择相同的SPI模式。 STM32的SPI特性STM32的小容量产品有一个SPI接口,中容量有两个,而大容量则有3个,其特征如下: * 单次传输可选择为8位或16位。 * 时钟极性(CPOL)和相位(CPHA)可编程设置。 * 数据顺序的传输顺序可进行编程选择,MSB在前或LSB在前。 * 可出发中断的专用发送和接收标志。 * 可以使DMA进行数据传输操作。 STM32的SPI架构分析上图所示为STM32的架构图,可以看到,MISO数据线接收到的信号经移位寄存器处理后把数据转移到接收缓冲区,然后这个数据就可以由软件从接收缓冲区读出了。 当要发送数据时,我们把数据写入发送缓冲区,硬件将会把它用移位寄存器处理后输出到MOSI数据线。 SCK的时钟信号则由波特率发生器产生,我们可以通过波特率控制位(BR)来控制它输出的波特率。 控制寄存器CR1掌控着主控制电路,STM32的SPI模块的协议设置(时钟极性,相位等)就由它来制定。而控制寄存器CR2则用于设置各种中断使能。 最后为NSS引脚,这个引脚扮演着SPI协议中的SS片选信号线的角色,如果我们把NSS引脚配置为硬件自动控制,SPI模块能够自动判别它能否成为SPI的主机,或自动进入SPI从机模式。但实际上我们用的更多的是由软件控制某些GPIO引脚单独作为SS信号,这个GPIO引脚可以随便选择。 SPI接口读取FLASH实例分析本文章以STM32通过SPI读写FLASH的例程来逐步讲解STM32的SPI配置及FLASH芯片的普遍驱动方式,尽量做到讲解精细易懂。 本实验使用STM32的SPI2,采用主模式,全双工通信,通过查询发送数据寄存器和接收数据寄存器状态确保通信正常。操作的FLASH芯片型号为W25Q16。 SPI2与芯片引脚连接为:PB12--CS,PB14--SO,PB13--CLK,PB15--SI. 本试验没有使用中断,采用轮询标志位的方式来确保SPI正常通信。 详细文档见某乎: |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:47:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |