1. 1. 数据通信的基础概念
    1. 1.1. 串行/并行通信
    2. 1.2. 单工/半双工/全双工通信
    3. 1.3. 同步/异步通信
    4. 1.4. 波特率
    5. 1.5. 常见的串行通信接口
  2. 2. 串口(RS-232)
    1. 2.1. 什么是串口
    2. 2.2. RS-232 电平与 COMS/TTL 电平对比
    3. 2.3. 设备间的 RS-232 通信示意图
    4. 2.4. STM32 串口与电脑 USB 口通信示意图
    5. 2.5. RS-232 异步通信协议
  3. 3. STM32 的 USART
    1. 3.1. STM32 的 USART 简介
    2. 3.2. STM32 的 USART 主要特征
    3. 3.3. 如何快速查看 STM32 某个外设的数量及其对应的引脚?
    4. 3.4. STM32F1/F4/F7 的 USART 框图
    5. 3.5. STM32F1/F4/F7/H7 的 USART 框图简化版
    6. 3.6. 设置 USART/UART 波特率(F1)
    7. 3.7. 如何使用寄存器操作的方式设置波特率 - USART1 为例
    8. 3.8. 波特率设置通用公式推演(F1)
    9. 3.9. USART 寄存器介绍(F1)可略
      1. 3.9.1. 控制寄存器 1(CR1)
      2. 3.9.2. 控制寄存器 2(CR2)
      3. 3.9.3. 控制寄存器 3(CR3)
      4. 3.9.4. 数据寄存器(DR)
      5. 3.9.5. 状态寄存器(SR)
    10. 3.10. 需要配置的时序总结(需要查看进行配置)
    11. 3.11. HAL 库外设初始化 MSP 回调机制(了解)
      1. 3.11.1. HAL 库外设初始化 MSP 回调机制- USART 为例
    12. 3.12. HAL 库中断回调机制(了解)
      1. 3.12.1. HAL 库中断回调机制 - USART 为例(F1)
  • - Date:2023-06-18
    1. 1. USART/UART 异步通信配置步骤(掌握)
      1. 1.1. HAL 库相关函数介绍
    2. 2. IO 引脚复用功能(掌握)
      1. 2.1. 何为复用?
      2. 2.2. STM32F1 的 IO 引脚复用
      3. 2.3. IO 引脚复用映射示意图
        1. 2.3.1. GPIO 复用功能低位寄存器(AFRL)
        2. 2.3.2. GPIO 复用功能高位寄存器(AFRH)
    3. 3. 实验
  • stm32-串口

    数据通信的基础概念

    串行/并行通信

    Pasted image 20230613144010|500

    单工/半双工/全双工通信

    Pasted image 20230613144034|500

    同步/异步通信

    Pasted image 20230613144049|500

    波特率

    1. 比特率:每秒钟传送的比特数,单位 bit/s
    2. 波特率:每秒钟传送的码元数,单位 Baud
    3. 比特率 = 波特率 * log2 M ,M 表示每个码元承载的信息量
    4. 二进制系统中,波特率数值上等于比特率

    常见的串行通信接口

    Pasted image 20230613144144|500

    串口(RS-232)

    #串口

    什么是串口

    Pasted image 20230613144336|500

    RS-232 电平与 COMS/TTL 电平对比

    Pasted image 20230613144510|500

    设备间的 RS-232 通信示意图

    Pasted image 20230613144531|500

    STM32 串口与电脑 USB 口通信示意图

    Pasted image 20230613144651|500

    RS-232 异步通信协议

    Pasted image 20230613144726|500
    lsb:最低有效位,位 0
    msb:最高有效位,位 7

    STM32 的 USART

    #usart

    STM32 的 USART 简介

    Universal synchronous asynchronous receiver transmitter,通用同步异步收发器 usart
    Universal asynchronous receiver transmitter,通用异步收发器 uart
    USART/UART 都可以与外部设备进行全双工异步通信
    USART,我们常用的也是异步通信

    STM32 的 USART 主要特征

    1. 全双工异步通信
    2. 单线半双工通信
    3. 单独的发送器和接收器使能位
    4. 可配置使用 DMA 的多缓冲器通信
    5. 多个带标志的中断源

      参考:STM32xxxx 参考手册(中文版).pdf    USART 相关章节

    如何快速查看 STM32 某个外设的数量及其对应的引脚?

    参考:ST MCU 最新选型手册.pdf
    Pasted image 20230613145116|500

    STM32F1/F4/F7 的 USART 框图

    Pasted image 20230613145320|500
    需要了解的点:
    ①,发送/接收数据的流程
    ②,相关寄存器作用
    ③,设置波特率

    STM32F1/F4/F7/H7 的 USART 框图简化版

    Pasted image 20230613145804|500

    设置 USART/UART 波特率(F1)

    Pasted image 20230613151937|500
    波特率计算公式:baud=fck /(16∗USARTDIV),算出 usartdiv 就可以算出上面的 div_mantissa(整数部分),fraction 就是小数部分,也可以算出来,然后写道寄存器里面去
    其中"fck"是串口的时钟,如:USART1 的时钟是 PCLK2,其他串口都是 PCLK1(上图)

    如何使用寄存器操作的方式设置波特率 - USART1 为例

    Pasted image 20230615212901|500

    1
    2
    3
    4
    5
    uint16_t mantissa;
    uint16_t fraction;
    mantissa=39;
    fraction=0.0625*16+0.5=0x01;          /* USARTDIV = DIV_Mantissa + (DIV_Fraction/16) */
    USART1->BRR = (mantissa << 4) + fraction;

    波特率设置通用公式推演(F1)

    Pasted image 20230615213037|500

    USART 寄存器介绍(F1)可略

    控制寄存器 1(CR1)

    该寄存器需要完成的配置:
    位 13:使能 USART
    位 12:配置 8 个数据位
    位 10:禁止检验控制
    位 5:使能接收缓冲区非空中断
    位 3:使能发送
    位 2:使能接收

    控制寄存器 2(CR2)

    Pasted image 20230615213352|500
    该寄存器需要完成的配置:配置 1 个停止位

    控制寄存器 3(CR3)

    Pasted image 20230615213533|500
    该寄存器需要完成的配置:配置不选择半双工模式

    数据寄存器(DR)

    Pasted image 20230615213555|500
    设置好控制和波特率寄存器后,往该寄存器写入数据即可发送,接收数据则读该寄存器

    状态寄存器(SR)

    Pasted image 20230615213623|500
    根据 TC 位可以知道能否发数据,根据 RXNE 位知道是否收到数据

    需要配置的时序总结(需要查看进行配置)

    Pasted image 20230615213650|500
    Pasted image 20230615213658|500

    HAL 库外设初始化 MSP 回调机制(了解)

    #MSP
    Pasted image 20230615214018|500

    HAL 库外设初始化 MSP 回调机制- USART 为例

    Pasted image 20230615214206|500

    1
    2
    3
    4
    5
    6
    7
    8
    void HAL_UART_MspInit(UART_HandleTypeDef *huart)
    {
        GPIO_InitTypeDef gpio_init_struct;
        if(huart->Instance == USART1)                /* 如果是串口1,进行串口1 MSP初始化 */
        {
      /* (1)使能USART1和对应IO时钟,(2)初始化IO,(3)使能USART1中断,设置优先级 */
        }
    }

    HAL 库中断回调机制(了解)

    #IRQ
    Pasted image 20230615214309|500
    中断服务函数在.s 里面找到

    HAL 库中断回调机制 - USART 为例(F1)

    Pasted image 20230615214329|500

    1
    2
    3
    4
    5
    6
    7
    8
    9
    UART中断回调函数:
    HAL_UART_TxCpltCallback();                      /* 发送完成回调函数 */
    HAL_UART_TxHalfCpltCallback();                  /* 半发送完成回调函数 */
    HAL_UART_RxCpltCallback();                      /* 接收完成回调函数(这个多用) */
    HAL_UART_RxHalfCpltCallback();                  /* 半接收完成回调函数 */
    HAL_UART_ErrorCallback();                    /* UART错误回调函数 */
    HAL_UART_AbortCpltCallback();                   /* UART中止回调函数 */
    HAL_UART_AbortTransmitCpltCallback();   /* UART发送中止回调函数 */
    HAL_UART_AbortReceiveCpltCallback();      /* UART接收中止回调函数 */

    Pasted image 20230615214502|500

    - Date:2023-06-18

    • Time:20:26
    • Subject: none
    • Tags: #stm32 #配置
      [[2023-06]]

    USART/UART 异步通信配置步骤(掌握)

    1. 配置串口工作参数 2. HAL_UART_Init()
    2. 串口底层初始化
      1. HAL_UART_MspInit()    配置 GPIO、NVIC、CLOCK 等 上一个笔记里面有
    3. 开启串口异步接收中断
      1. HAL_UART_Receive_IT()
    4. 设置优先级,使能中断
      1. HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
    5. 编写中断服务函数
      1. USARTx_IRQHandler()、 UARTx_IRQHandler()
    6. 串口数据发送
      1. USART_DR, HAL_UART_Transmit()

    HAL 库相关函数介绍

    1. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef * huart)
      1. handletypedef 命名的是句柄
        关键结构体(F1):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct
    {    uint32_t BaudRate;   /* 波特率 */
         uint32_t WordLength;   /* 字长 */
         uint32_t StopBits;   /* 停止位 */
         uint32_t Parity;   /* 奇偶校验位 */
         uint32_t Mode;   /* UART 模式 */
         uint32_t HwFlowCtl;   /* 硬件流设置 */
         uint32_t OverSampling;   /* 过采样设置 */
    }UART_InitTypeDef
    1. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef _ huart , uint8_t _ pData , uint16_t Size)
      1. 作用:以中断的方式接收指定字节的数据
      2. 形参 1 是 UART_HandleTypeDef 结构体类型指针变量
      3. 形参 2 是指向接收数据缓冲区
      4. 形参 3 是要接收的数据大小,以字节为单位
    2. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef _ huart,  uint8_t _ pData, uint16_t Size, uint32_t Timeout)
      1. 作用:以阻塞的方式发送指定字节的数据(必须发送完才能接受,和上面有区别)
      2. 形参 1 :UART_HandleTypeDef 结构体类型指针变量
      3. 形参 2:指向要发送的数据地址
      4. 形参 3:要发送的数据大小,以字节为单位
      5. 形参 4:设置的超时时间,以 ms 单位

    IO 引脚复用功能(掌握)

    #复用

    何为复用?

    1. 通用:IO 端口的输入或输出是由 GPIO 外设控制,我们称之为通用
    2. 复用:IO 端口的输入或输出是由其它非 GPIO 外设控制,我们称之为复用

    STM32F1 的 IO 引脚复用

    Pasted image 20230618205358|500
    参考:STM32F103ZET6(中文版).pdf     第 3 小节   引脚定义

    IO 引脚复用映射示意图

    Pasted image 20230618205911|500
    Pasted image 20230618205915|500
    温馨提示:IO 引脚与 AF(0~15)具体定义关系,需要参考对应的芯片数据手册

    GPIO 复用功能低位寄存器(AFRL)

    Pasted image 20230618210110|500

    GPIO 复用功能高位寄存器(AFRH)

    Pasted image 20230618210120|500
    摘自:STM32F4xx 参考手册_V4(中文版).pdf,7.4.9 节 7.4.10

    实验