STM32的三种串口通信协议介绍

发布时间:2023-05-05  

  STM32串口硬件电路

STM32的三种串口通信协议介绍

  开发板串口硬件电路

  STM32串口编程

  1、整体流程

  ① 开启GPIO时钟和USARTX时钟

  ② 配置TX和RX引脚

  ③ 初始化USART控制器

  2、细节实现

  ① 开启GPIO时钟和USARTX时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

  ② 配置TX和RX引脚

  /* Configure USART1 Tx (PA.09) as alternate function push-pull */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART1 Rx (PA.10) as input floating */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  ③ 初始化USART控制器

  /* USART1 mode config */

  USART_InitStructure.USART_BaudRate = 115200;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No ;

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_Init(USART1, &USART_InitStructure);

  USART_Cmd(USART1, ENABLE);

  STM32F的三种串口通信协议

  1、USART

  通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。

  USART支持同步单向通信和半双工单线通信,也支持LIN(局部互联网)、智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。

  USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX)。

  同步模式下需要引脚:发送器时钟输出(CK)

  IrDA模式需要引脚:数据输入(IrDA_RDI)、数据输出(IrDA_RDO)

  USART特点:

  1. 全双工操作(相互独立的接收数据和发送数据);

  2. 同步操作时,可主机时钟同步,也可从机时钟同步;

  3. 独立的高精度波特率发生器,不占用定时/计数器;

  4. 支持5、6、7、8和9位数据位,1或2位停止位的串行数据桢结构;

  5. 由硬件支持的奇偶校验位发生和检验;

  6. 数据溢出检测;

  7. 帧错误检测;

  8. 包括错误起始位的检测噪声滤波器和数字低通滤波器;

  9. 三个完全独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;

  10.支持多机通信模式;

  11.支持倍速异步通信模式。

  2、SPI

  串口外围设备接口SPI是一种低成本,易使用的接口,主要用于微控制器与外围设备芯片之间的连接。SPI接口可以用来连接存储器、A/D转换器、D/A转换器、实时时钟日历、LCD驱动、传感器、音频芯片等。

  SPI是一个四线接口:主机输出/从机输入(MOSI)、主机输入/从机输出(MISO)、串行SCLK或SCK、外设芯片(CS/)。

  SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个时钟信号由主机产生。SPI允许芯片与外部设备以半/全双工、同步、串行方式通信。

  根据时钟极性和时钟相位的不同,SPI有4种工作模式,如图。

STM32的几种串口通信协议

  3、I2C

  I2C总线是同步通信的一种特殊形式,具有接口少,控制简单,器件封装形式小、通信速率较高等优点。

  I2C总线由数据线SDA和时钟线SCL两条线构成通信线路,既可以发送数据,也可以接收数据。

  I2C总线的操作模式:主发送模式、从接收模式、从发送模式、从接收模式。

  I2C总线的模拟时序如下图:

STM32的几种串口通信协议

  STM32串口通信程序设计要点

  1、要是能串口时钟同时要是能复用总线时钟和对应的IO时钟,如:

  //使能串口1,PA,AFIO总线

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |

  RCC_APB2Periph_AFIO |

  RCC_APB2Periph_USART1 ,

  ENABLE);

  2、stm32f10x_conf.h 中使能

  #include “stm32f10x_usart.h”

  #include “misc.h”

  3、使能中断的话要配置NVIC,在中断函数中加入相应的程序。

  简单的配置例程:

  /**************************************************************

  文件名:USART.c

  功能:串口初始化配置以及相关函数

  串口配置注意事项:

  1、 stm32f10x_conf.h 中使能

  #include “stm32f10x_usart.h”

  #include “misc.h”

  2、 本文件中定义的串口相关函数需要在头文件中做外部函数声明

  ***************************************************************/

  #include “STM32Lib//stm32f10x.h”

  void USART_Configuration(void)

  {

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  USART_ClockInitTypeDef USART_ClockInitStructure;

  //使能串口1,PA,AFIO总线

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |

  RCC_APB2Periph_AFIO |

  RCC_APB2Periph_USART1 ,

  ENABLE);

  /* A9 USART1_Tx */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出-TX

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* A10 USART1_Rx */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入-RX

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  USART_InitStructure.USART_BaudRate = 9600;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No;

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;

  USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;

  USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;

  USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

  USART_ClockInit(USART1, &USART_ClockInitStructure);

  USART_Init(USART1, &USART_InitStructure);

  /* Enable the USARTx */

  USART_Cmd(USART1, ENABLE);

  }

  void USART1_Putc(unsigned char c)

  {

  USART_SendData(USART1, c);

  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

  }

  void USART1_Puts(char * str)

  {

  while(*str)

  {

  USART_SendData(USART1, *str++);

  /* Loop until the end of transmission */

  while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

  }

  }


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>