历史上的今天

今天是:2024年09月17日(星期二)

2021年09月17日 | KST-STM学习之I2C+SPI

发布者:Shuangfei 来源: eefocus关键字:KST-STM  I2C  SPI 手机看文章 扫描二维码
随时随地手机看文章

只能说跟51的差不了多少,在这里仅仅记录下主要注意事项吧。


1、I 2 C 通信分为标准模式 100kbit/s、快速模式 400kbit/s 和高速模式 3.4Mbit/s。因为所有的I 2 C 器件都支持标准模式,但却未必支持另外两种速度。

所以作为通用的 I 2 C 程序我们选择100k 这个速率来实现,也就是说实际程序产生的时序必须小于等于 100k 的时序参数,有特殊速度需求的器件再针对性写高速通信程序。


2、I 2 C 引脚属于开漏并联结构,并且 STM32 的 GPIO 端口引脚设置为开漏输出时,可以直接从输入数据寄存器获取 I/O 电平状态,因此将 I 2 C 引脚配置为开漏输出模式。


3、由于 I 2 C 总线空闲时默认为高,初始化时还需要设置引脚输出高电平,不过设置引脚输出高电平并不是在初始化之后,而应该放在初始化之前。


这是因为 STM32 在上电复位时 I/O 口为高阻状态,复位结束后,GPIO 端口引脚默认为浮空输入,由于上拉电阻的存在,I 2 C 引脚被拉高;


当程序执行到 I 2 C 初始化时又被配置为开漏输出模式,由于 GPIO 端口输出数据寄存器初始值默认全为 0,初始化后 I/O 口输出低电平,如果初始化之后再设置引脚输出高电平,势必会在I/O 口上产生一个低电平的毛刺。


如果在 I 2 C 引脚初始化之前先设置输出数据寄存器相应位为高,初始化 I 2 C 引脚后,I/O 口会直接输出高电平,避免毛刺信号。

这里写图片描述

4、实际上 I 2 C 的配置过程比较复杂,比如要充分考虑冲突和仲裁等处理方式,但是那些处理方式在绝大多数场合用不到。STM32F103 系列自带的 I 2 C 协议模块设计的过于复杂,对于实际应用来讲实用性不强,因此实际应用 I 2 C 时,还是用 IO 口直接模拟协议。


5、即在 SCK 的第一个时钟边沿还要早半个时钟周期时,SPI 主机就已经开始输出数据了,但是 SPI 从机却是在片选 SSEL 置低后开始输出数据,总之 SPI 设备输出数据要早于 SCK,这也是为什么 SPI 通信时要先使能片选。

这里写图片描述

这里写图片描述

6、SPI 和 I2C的对比

这里写图片描述

7、SPI接口

这里写图片描述

8、引脚连接

这里写图片描述

9、SPI外设

这里写图片描述

SP3需要注意的地方

这里写图片描述

这里写图片描述

NSS需要注意的地方

这里写图片描述

几个需要注意的地方(标黄的)

这里写图片描述

10、配置流程

这里写图片描述

11、SPI的发送接收与USART的对比

这里写图片描述

12、数据传送过程

这里写图片描述

发送完成的判断,需要注意

这里写图片描述

那么应该怎么判断呢?

这里写图片描述

假如在TXE = 0 的时候仍然向SPI_DR写入数据

这里写图片描述

13、霸气。。。

这里写图片描述

14、SPI查询方式接收和发送的注意点

这里写图片描述

关键字:KST-STM  I2C  SPI 引用地址:KST-STM学习之I2C+SPI

上一篇:KST-STM32学习之W25Q128
下一篇:KST-STM32学习之USART

推荐阅读

   绝大多数人其实是比较自恋的,尤其是本来就长得就漂亮或帅的人们,在自拍的时候自然是怎么拍怎么好看,可是那些长的并不算特别出众,或在自拍的时候总是觉得拍摄出的照片没有真人好看,别着急,有可能是你的相机出了问题。不要羡慕别人过得比你好,她们只是拿着一部自拍神器而已。下面新浪手机就为大家介绍几款目前自拍非常强悍的智能手机,以后在不...
Ⅰ、写在前面本文带来关于Keil软件菜单的内容,系列教程中前面讲述的内容都可以通过菜单而找到,只是大部分内容都可以通过快捷按钮或快捷键找到,该文就讲述主菜单里每一个子菜单的内容。Keil有些菜单在编辑模式和调试模式下可能有所不同,也就是说在不同模式下有些功能或许不能使用,下面内容会将每项菜单在不同模式下的区别提出来。按照前面文章编辑方式...
  测量电流前应切断待测仪表的电源,连接好万用表后再送电测量,不能带电串入万用表。测量电流绝对不可将两表笔跨接在电源上,以免烧坏表头。电源内阻和负载电阻都很小,应尽量选择较大的电流量程,以减小分流电阻值,从而减小分流电阻上的压降,提高测量准确度。  电流测量时,万用表与电路相串联,流过电路的电流也流过万用表。不知被测电流大小时,...
  涡旋压缩机结构图  涡旋压缩机是一种容积式压缩的压缩机,压缩部件由动涡旋盘和静涡旋组成。其工作原理是利用动、静涡旋盘的相对公转运动形成封闭容积的连续变化,实现压缩气体的目的。主要用于空调、制冷、一般气体压缩以及用于汽车发动机增压器和真空泵等场合,可在很大范围内取代传统的中、小型往复式压缩机。  基本结构图如下:  涡旋压缩机...

史海拾趣

问答坊 | AI 解惑

确定WiMAX系统中基于FPGA加速器的软硬件分工

技术要求和商业需求正促使WiMAX无线网络技术快速升温。通信行业面临着进一步降低无线通信网络成本的巨大压力,而实现这一点的一个可能方法就是提高目前的移动网络中使用的无线频谱的使用效率。综合利用一系列允许快速改变通信业务的调制模式和编码模 ...…

查看全部问答∨

开发部噩梦 转帖

开发部噩梦            今天安排了新的工作。看来又有段时间要忙了,公司开发部的管理几近混乱,开发项目下来没有正式的通知,没有需求计划书,而且参与的人比奇的少,一般一个项目一个人。你永远不知 ...…

查看全部问答∨

S3C6410 电源部分

在看S3C6410 文档时,我怎么没有看见上电的时序要求啊?在做S3C6410的朋友们,你们怎么设计这一块的,莫非没有上电时序要求,要知道PXA270时序要求很高啊!…

查看全部问答∨

wince 驱动 学习 新手新手 新新手!!

看了很多东西和书 但是还是一头雾水!         希望那为大哥给外完整的实列+注释给我讲解讲解 越详细月好!       比如入口函数那种简单的东西都要有注释(表明着是个入口函数!) 就太谢谢了啊&nb ...…

查看全部问答∨

一个简单的问题:halt_loop

在头文件head.S最后通常都是 .... ldr lr , =halt_loop .... halt_loop:     b  halt_loop 这个地方始终不是很明白; 还有就是,如果我的主函数是: int main() {    while(1);    return 0; ...…

查看全部问答∨

arm里面调用库函数的问题

我做的是ARM7的程序,只要在程序里调用stdio.h里面的函数,比如说,fopen函数,编译可以通过,但是把程序烧到片子里,程序就是不运行!请高手帮忙指点,谢谢了!…

查看全部问答∨

【求助】Vxworks实时显示采集到的数据

我用windML在vxworks中开发图形界面,现在需要在界面中实时显示由网络数据过来的数据,看到资料上说用双缓冲什么的,但是我不是很清楚,希望做过类似工作的能给点建议和指导!谢谢…

查看全部问答∨

LED背光源制作工艺简介

replyreload += \',\' + 706021;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答∨

nios2 教程

 有资料大家多多分享啊…

查看全部问答∨

STR91X样品怎么申请呢?

正打算使用STR91X写列,用于医疗监护模块处理,需要FLASH:>=256K,SRAM>=64K,双串口(或者USB、CAN),100M左右的处理速度,功耗低。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved