STM32与SPI通信协议
本文最后更新于20 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

SPI通信

  • SPI是由Motorola公司开发的一种通用数据总线
  • 四根通信线:SCK、MOSI(主机输出从机输入)、MISO(主机输入从机输出)、SS
  • 同步,全双工
  • 支持总线挂载多设备(一主多从)

与IIC相比

优点:

  • SPI传输速度更快,最大传输速度取决与芯片厂商的设计需求
  • 设计简单,不复杂

缺点:

  • SPI的硬件开销大,通信线的个数比较多
  • 通信过程中,经常会有资源浪费的现象
  • 仅支持一主多从,不支持多主机

硬件电路

  • 所有的SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别连接各从机的SS引脚
  • 输出的引脚配置为推挽输出,输入引脚配置为浮空或上拉输入
  • 一次只能选择一个SS引脚
  • 从机未被选中时,该从机的引脚必须切换为高阻态

数据移位示意图

上升沿:数据移位 下降沿:采样数据

SPI时序基本单元

  • 起始条件:SS从高电平切换到低电平
  • 终止条件:SS从低电平切换到高电平

SS在低电平期间,表示选用该从机

SPI时序图

CPHA:时钟相位

模式1

  • 交换一个字节(模式1)
  • CPOL=0:空闲状态,SCK为低电平
  • CPHA=1:SCK第一个边沿(即上升沿)移出数据,第二个边沿(即下降沿)移入数据

SPI没有硬性规定MOSI的默认电平,但是从机的MISO必须置回高阻态

模式0(用的最多)

  • 交换一个字节(模式0)
  • CPOL=0:空闲状态,SCK为低电平
  • CPHA=1:SCK第一个边沿移(即上升沿)移入数据,第二个边沿(即下降沿)移出数据

为什么模式0最为广泛使用,明明模式1更符合常理?经过网上查证,大概分为以下几点

  • 模式0是最早定义的SPI时序模式,兼容性强
  • 模式0采用下降沿移出数据,稳定性好
  • 很多人刚开始学的就是模式0,于是就模式0就成了默认模式了

SPI1挂载在在APB2上 SPI2和SPI3挂载在APB1上 GPIO全部都挂载在APB2上

配置时钟时要相对应

编程技巧

 #define DE_BUG  1
 ​
 #if DE_BUG
     #define LED P0
 #else
     #define LED P1
 ​
 //通过DE_BUG来使用不同的宏
 ​
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇