历史上的今天
返回首页

历史上的今天

今天是:2025年04月09日(星期三)

正在发生

2019年04月09日 | STM32的数据传输外设:USART、I2C、SPI三种常见接口的学习

2019-04-09 来源:eefocus

一、USART串行接口


串行接口分为异步串行接口和同步串行接口两种,其中异步串行接口统称为通用异步收发器接口UART,具有同步功能的UART(包含时钟信号SCLK)称为通用同步/异步收发器接口USART。


USART的电气特性标准包括RS-232C、RS422、RS423和RS485等,其中RS-232C是最常见的串行通信接口(台式机的显示器与主机的连接线好像就是RS232吧)


RS232有9个引脚,当然最常用的只有三个:RXD(接收数据)、TXD(发送数据)、GND(用来共地);而RS232的主要指标有两个:数据速率和数据格式。数据速率就是我们设置的波特率,而数据格式便是我们设置的起始位、数据位、校验位、停止位;


因为UART是挂载在APB1上的,所以我们使用其传输数据的时候,要先开启相应的时钟。但是不要忘了,UART是需要用到GPIO接口的,所以我们还需要开启GPIO的时钟,并且先初始化GPIO接口,再初始化USART。


至于USART使用哪些GPIO引脚,我就不赘述了,网上随便一查就能知道。


当我们程序需要对USART进行操作的时候,我们若通过寄存器进行操作的话,那么通过查询USART寄存器的表便可以慢慢书写下来,而通过库函数的话,通过正点原子的例程也可以很清楚的学习到。


我们只需要知道在我们的主函数里先使用初始化函数,将USART初始化完成,然后接收数据的话通过串口中断来完成,根据项目设置的接收结束标志,把接收结束标志位置1,在主函数中通过查询该标志位的真假来完成接收。


而发送的话,我们既可以用重定向printf来发送数据(但是我不建议实时系统或者系统资源比较小的时候使用,因为该方法会使程序耗费的资源大大增加);也可以通过自己写发送函数,通过传入字符串指针,通过对指针的查询,来逐字节输出到USART->DR,再查询USART->SR来判断是否发送成功,从而发送下一字节。


二、I2C内部集成总线接口


内部集成电路总线接口I2C是通信控制领域广泛采用的一种标准,连接在总线上的每一个设备都有唯一的7/10位地址。


I2C采用一根双向串行数据线SDA和一根双向串行时钟线SCL实现主/从设备间的多主串行通信。


而I2C所要学习的也正是其各个时期的时序以及数据线的高低电平变动:


I2C总线在传输数据的过程中一共有三种信号:开始信号、结束信号、应答信号。


开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传输数据。


结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传输数据。


应答信号:接收数据的IC在接收到8bit的数据后,向发送数据的IC发出一个特定的低电平脉冲,表示已经接收到数据。例如CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号则再根据实际情况决定是否发送下一个信号;若没有接收到应答信号,则可以判断受控单元出现了故障。


这三种信号里,起始信号是必须需要的,而结束信号和应答信号都可以视情况不要。



而使用I2C的时候肯定是要先初始化,初始化的时候我们先初始化GPIO的时钟,然后根据时序图来写出起始信号,结束信号与应答信号,而向从IC写数据与读数据,这些函数在正点原子里都有写,我就不占篇幅赘述啦。


三、SPI串行设备接口


SPI在工业控制领域的应用也可以说是非常多的,SPI可以实现主设备或从设备协议,并且它是一种典型的全双工数据传输方式,其传输的正确性通过串行时钟SCK来保证。当配置为主设备时,SPI可以连接多达16个独立的从设备,发送数据和接收数据寄存器的宽度可以设置为8位或者16位。


SPI使用四根线来实现串行通信:两根数据线、一根时钟线、一根控制线


主出从入MOSI:主设备输出数据,从设备输入数据


主入从出MISO:主设备输入数据,从设备输出数据


串行时钟SCK:主设备输出,从设备输入,用于同步数据位


从设备选择NSS:主设备输出,从设备输入,用来选择哪一个从设备与主机通信。


并且SPI的接口时序也由两个很重要的参数决定:时钟极性与时钟相位


时钟极性为0时初始电平是低电平,为1时初始电平是高电平;时钟相位为0时第一个边沿采集数据,为1时第二个边沿采集数据。


推荐阅读

史海拾趣

Alpha Wire公司的发展小趣事

Alpha Wire公司是一家在电子行业中知名的制造商,专注于生产高性能电线、电缆和线束。虽然我无法提供准确的发展故事,但我可以向你介绍一些关于Alpha Wire公司的背景和其在行业中的重要性。

  1. 公司成立:Alpha Wire公司成立于1922年,总部位于美国新泽西州。创始人是一位名叫韦尔纳·布雷德的工程师,他创立了Alpha Wire公司,旨在为不同领域的电子设备提供高质量的电线和电缆。

  2. 技术创新:Alpha Wire公司在其发展历程中一直致力于技术创新和产品质量的提升。公司不断投资于研发,并采用最新的材料和生产工艺,以确保其产品在性能和可靠性方面处于行业领先地位。

  3. 产品线扩展:随着时间的推移,Alpha Wire公司不断扩展其产品线,以满足不断变化的市场需求。除了标准的电线和电缆产品外,公司还开发了各种特种电线和线束,如耐高温、耐化学腐蚀、防火等特性的产品,以满足不同行业和应用的需求。

  4. 全球市场拓展:Alpha Wire公司在其发展过程中不断拓展其市场份额,通过建立全球分销网络和合作伙伴关系,将其产品销往世界各地。公司不仅在北美市场占据重要地位,还在欧洲、亚洲和其他地区建立了业务和生产基地,以更好地服务全球客户。

  5. 质量和可靠性:作为一家具有悠久历史的公司,Alpha Wire始终将质量和可靠性视为其产品的核心竞争力。公司严格遵循国际标准和质量管理体系,对原材料进行严格筛选和检验,并采用先进的生产工艺和严格的质量控制程序,以确保产品的稳定性和一致性。

以上是关于Alpha Wire公司的一些基本信息,虽然我无法提供具体的发展故事,但希望这些信息能够帮助你了解该公司在电子行业中的重要性和影响力。

EFINIX公司的发展小趣事

为了加速Quantum™可编程加速器技术的商业化进程,EFINIX公司与中芯国际集成电路制造有限公司展开合作。中芯国际是世界领先的集成电路晶圆代工企业之一,其先进的制造能力为EFINIX公司提供了强有力的支持。双方合作仅用了不到六个月的时间,就成功交付了首批Quantum™可编程加速器产品样本,创造了行业内的里程碑。

CHENMKO公司的发展小趣事

EFINIX公司继续深化其在FPGA领域的技术创新,成功推出了Trion FPGA产品系列。该产品具有低功耗、精细封装面积和强大的性能特点,深受市场欢迎。在Trion FPGA产品销售的头三个月里,EFINIX公司获得了多项设计认可和客户订单,并有很多客户已经开始使用Trion FPGA进行产品设计。

Diamond SA公司的发展小趣事

在电子行业的初期,Diamond SA公司以其卓越的技术研发能力脱颖而出。公司创始人对半导体技术的深入研究,引领了一场技术革命。他们成功开发出一种新型的芯片设计,大大提高了电子设备的性能和效率。这一创新技术迅速在市场上获得了认可,Diamond SA公司也因此逐渐崭露头角。

DIALIGHT公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

FUJI公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

问答坊 | AI 解惑

Windows Embedded帮助数字农业发展

随着全球信息化的发展,数字农业成为了现代农业发展的新潮流。 数字农业是一个集信息化、数字化、网络化、自动化等多种现代高新技术为一体的计算机管理和应用系统。它对农业生产中的现象、过程进行模拟,达到合理利用农业资源,降低生产成本,改 ...…

查看全部问答>

Fiber Optic Communication Systems

Fiber Optic Communication Systems Fiber-Optic Communication Systems, 3rd Edition Govind P. Agrawal ISBN: 978-0-471-21571-4 Hardcover 576 pages June 2002 目录: Preface. 1. Introduction. 1.1 Historical Perspective. 1. ...…

查看全部问答>

一个网友提了一个建议!

记得前几天有个网友问我有没有最好的办法找个XXID回复过的帖子,发表过的帖子呢!我看了一下目前咱们论坛只支持查资料搜索某个ID发表的帖子, 但是回复过的我没有发现,各版主有没有找到办法呢?…

查看全部问答>

欢迎s3c6410爱好者加入超级群67958848

欢迎s3c6410爱好者加入超级群67958848…

查看全部问答>

谁有DVD光盘格式, 主要是文件头的解析

如题, 俺现在已经能够准确地分拆它的每个视频单元(CELL),但我需要的是按章节(Charpter)来进行分拆, 这需要解析它的IFO文件, 有没有朋友熟悉这方面的, 提点一下, 不胜感谢!…

查看全部问答>

串口传输线有232和485之分吗

我用板子带的线(一头公,一头母)进行传输都可以。 但我自己买的两根线(一根线为全公,一根线为全母),连接后传输,就连不通了。 难道线有232和485之分吗? 我要求的是PC端和板子间传输,板子的串口也是232的。…

查看全部问答>

初学者问个pc与单片机通信协议的问题

我做pc上位机程序 通过串口与51单片机通信 涉及到通行协议不太明白怎么弄。 请问如果自定义pc与单片机通信的协议  要定义些什么啊 不太清楚 能详细点最好 谢谢…

查看全部问答>

有关tcsetattr的问题

tcsetattr(0,TCSANOW,&term); tcsetattr(1,TCSANOW,&term);   中的“0”和“1”表示啥意思啊?…

查看全部问答>

添加hive-based registry问题,系统起不来

环境:S3C2440+EVC4.0+SP4+PB5.0  NAND Flash 问题: 添加了Hive-Based Registryz组件,添加FAT File System组件       platform.reg 如下:      ; HIVE BOOT SECTION [HKEY_LOCAL_MACHINE\\i ...…

查看全部问答>

MSP430开发

我做的是基于MSP430的温度检测系统,为什么程序下载到板子上运行时没有反应?…

查看全部问答>