STM32学习——串口

STM32学习——串口

USART通用同步异步收发器(Universal Synchronous Asynchronous Receiver Transmitter)是一串行通信设备,可以灵活地与外部设备进行进行**全双工信息交换**

UART(Universal Asynchronous Receiver Transmitter),它是在 USART 的基础上裁剪了同步通信功能,只保留异步通信功能我们平时使用的串口通信都是 UART

1.通信接口背景知识介绍

1.1通信双方的两种通信方式

  1. 串行通信

    • 传输原理:数据按位顺序传输
    • 优点:占用引脚资源少
    • 缺点:速度相对较慢
  2. 并行通信

    • 传输原理:数据各个位同时传输

    • 优点:速度快

    • 缺点:占用引脚资源多

1.2串行通信的分类

单工:数据只支持在一个方向上传输(看电视)

image-20210722155139811

**半双工:**同一时刻只允许在一个方向传输(对讲机)

image-20210722155152212

全双工:允许同时在两个方向上传输(电话)

image-20210722155205777

1.3常见的串行通信接口

image-20210722155600507

2.USART功能概述

任何 UART 双向通信至少需要 3 个引脚,数据发送引脚 TXD,数据接收引脚 RXD,数

据参考地 GND。串口连接必须共地!!!

这里解释下电平标准,根据使用使用的电平标准不同,可以分为 TTL 和 RS232 标准,因为控制器一般都是 TTL 标准,因此如果需要进行 RS232 通信时,一定要使用 R232转换器进行 TTL 和 RS232 的电平转换

image-20210428103209850

3.STM32串口资源

image-20210722155929235

  • 全双工异步通信。
  • 分数波特率发生器系统,提供精确的波特率。发送和接收共用的可编程波特率,最高可达4.5Mbits/s
  • 可编程的数据字长度(8位或者9位);
  • 可配置的停止位(支持1或者2位停止位);
  • 可配置的使用DMA多缓冲器通信。
  • 单独的发送器和接收器使能位。
  • 检测标志:① 接受缓冲器 ②发送缓冲器空 ③传输结束标志
  • 多个带标志的中断源。触发中断。
  • 其他:校验控制,四个错误检测标志。

4.串口通信过程

image-20210722161223964

5.STM32串口通信使用方法

串口通信需要定义的参数

  1. 起始位
  2. 数据位(8位/9位)
  3. 奇偶校验位
  4. 停止位
  5. 波特率设置(收发两端要一致)

6.串口通信相关函数

  • 初始化函数 bsp_InitUart
    • 第1步: 配置GPIO
      • 打开 GPIO 时钟
      • 打开 UART 时钟
      • 配置 USART Tx 为复用功能
      • 配置 USART Rx 为复用功能
    • 第2步: 配置串口硬件参数
    • 第3步: Usart1 NVIC 配置
    • 第4步: 使能串口1
  • 中断服务函数 USART1_IRQHandler
  • 状态清零函数 Uart0_STA_Clr
  • 打印输出函数 fput
  • 数据发送函数 USART1_Send_Data

7.STM32F1的 USART 库

7.1对应库函数
  • 使能 USART 时钟

    下面的函数用于使能 USART1 的时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx,ENABLE)

    下面的函数用于使能 USART2、USART3 UART4、UART5

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_UARTx,ENABLE)

  • 使能 GPIO APB2 时钟(GPIO 是挂载在 APB2 高速总线上的)

  • 用函数 GPIO_Init()配置 GPIO 引脚,主要有以下两种配置方式,分别对应 RXD 和 TXD的引脚

     输入:浮空,上拉

     复用输出:复用推挽

  • 外设复用功能配置外设的复用功能

    • 对于其它外设(USART,SPI……)

      • 通过结构体 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_xx 配置为具体的 AF 模式(xx 对应的 OD 为开漏,PP 为推挽)
      • 调用函数 GPIO_Init()
    • 通 过 函 数 USART_Init 配 置 BaudRate , WordLength , StopBits , Parity ,HardwareFlowControl,USART_Mode

    • 如果需要使用中断,使用 NVIC_Init 函数进行配置,并通过 USART_ITConfig 使能相应中断。

    • 通过函数 USART_Cmd 使能对应串口

7.2初始化和配置函数

下面是串口 1 的初始化函数,主要完成串口的设置。

/**/
/*******************************************************************************
* 函数名   		:串口初始化函数
* 函数功能      :初始化USRAT1的硬件设备
* 形参          : 无
* 返回值        : 无
*******************************************************************************/
/**/
void bsp_InitUart1(uint32_t baud)
{
   
	GPIO_InitTypeDef  GPIO_InitStructure;
	USART_InitTypeDef	USART_InitStructure;
	
	#if	EN_USART1_RX	//如果使能了接收
		NVIC_InitTypeDef  NVIC_InitStructure;
	#endif
	
	/*TX=PA9 RX=PA10*/
	
	
	/*配置GPIO*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);	//打开GPIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);	//打开串口时钟
	
	/*配置PA9与PA10两个端口的复用功能*/
	//TX发送
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;					//PA9
	GPIO_InitStructure.GPIO_Speed
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值