单片机
返回首页

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时第二个边沿采集数据。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章