【STM32专题 UART中断 】

STM32专题 UART中断

image-20210710130755511
Coding STM32专题

环境搭建:

  • 硬件平台:STM32H750XBH6
  • 开发环境:STM32CubeMX V6.8.1+KEIL V5.28.0.0
  • STM32H750固件版本:package V1.11.0
  • 仿真下载驱动:ST-Link

image-20230818104530082

image-20230818105339945

image-20230818105410633

使用外部中断

image-20230818105615360

UART和USART的区别

UART和USART都是用于串行通信的接口,但它们之间存在一些关键区别。下面是它们的定义和主要差异:

  1. 定义
    • UART (Universal Asynchronous Receiver-Transmitter):是一个无时钟串行通信协议。它使用异步模式,即发送和接收是独立进行,不同步的。这意味着数据字节之间的时间间隔可能是不固定的。
    • USART (Universal Synchronous/Asynchronous Receiver-Transmitter):既可以用于同步串行通信也可以用于异步串行通信。在同步模式下,发送方和接收方通过一个外部时钟或数据线上的时钟来同步。
  2. 同步 vs. 异步
    • UART只支持异步通信。
    • USART支持同步和异步通信。这意味着USART是更加灵活的,因为它可以在需要的时候切换到同步模式。
  3. 时钟
    • UART没有外部时钟信号。它依赖于独立的时钟源,并且在通信的两端,时钟的速率必须相同或非常接近,以确保数据的正确接收。
    • USART在同步模式下需要一个外部时钟信号来同步发送和接收操作。
  4. 用途和应用场景
    • UART是串行通信中最常用的接口之一,用于多种应用,包括与PC、GPS模块、蓝牙模块等的通信。
    • USART由于其同步能力,通常用于需要高速、短距离通信的场景,如与其他微控制器或数字接口如SPI进行通信。
  5. 硬件复杂性
    • UART相对简单,因为它不需要同步逻辑。
    • USART由于其同步功能,其硬件实现可能稍微复杂一些。
  6. 其他特性
    • 一些USART设备可能还支持其他增强功能,如错误检测、自动寻址等。

在实际应用中,很多现代微控制器都提供USART模块,因为它们具有更大的灵活性。但在异步模式下,USART的工作方式与UART基本相同。

我们使用cubemx配置好在结构体中看详细配置,cubemx上的配置情况最后再讲

UART初始化代码

//UART4初始化


UART_HandleTypeDef huart4;
void MX_UART4_Init(void)
{
   

  /* USER CODE BEGIN UART4_Init 0 */

  /* USER CODE END UART4_Init 0 */

  /* USER CODE BEGIN UART4_Init 1 */

  /* USER CODE END UART4_Init 1 */
  huart4.Instance = UART4;
  huart4.Init.BaudRate = 115200;
  huart4.Init.WordLength = UART_WORDLENGTH_8B;
  huart4.Init.StopBits = UART_STOPBITS_1;
  huart4.Init.Parity = UART_PARITY_NONE;
  huart4.Init.Mode = UART_MODE_TX_RX;
  huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart4) != HAL_OK)
  {
   
    Error_Handler();
  }
  if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
   
    Error_Handler();
  }
  if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
   
    Error_Handler();
  }
  if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
  {
   
    Error_Handler();
  }
  /* USER CODE BEGIN UART4_Init 2 */

  /* USER CODE END UART4_Init 2 */

}

我们看下UART_HandleTypeDef结构体都定义了什么

typedef struct __UART_HandleTypeDef
{
   
  USART_TypeDef            *Instance;                /*!< UART registers base address        */

  UART_InitTypeDef         Init;                     /*!< UART communication parameters      */

  UART_AdvFeatureInitTypeDef AdvancedInit;           /*!< UART Advanced Features initialization parameters */

  const uint8_t            *pTxBuffPtr;              /*!< Pointer to UART Tx transfer Buffer */

  uint16_t                 TxXferSize;               /*!< UART Tx Transfer size              */

  __IO uint16_t            TxXferCount;              /*!< UART Tx Transfer Counter           */

  uint8_t                  *pRxBuffPtr;              /*!< Pointer to UART Rx transfer Buffer */

  uint16_t                 RxXferSize;               /*!< UART Rx Transfer size              */

  __IO uint16_t            RxXferCount;              /*!< UART Rx Transfer Counter           */

  uint16_t                 Mask;                     /*!< UART Rx RDR register mask          */

  uint32_t                 FifoMode;                 /*!< Specifies if the FIFO mode is being used.
                                                          This parameter can be a value of @ref UARTEx_FIFO_mode. */

  uint16_t                 NbRxDataToProcess;        /*!< Number of data to process during RX ISR execution */

  uint16_t                 NbTxDataToProcess;        /*!< Number of data to process during TX ISR execution */

  __IO HAL_UART_RxTypeTypeDef ReceptionType;         /*!< Type of ongoing reception          */

  __IO HAL_UART_RxEventTypeTypeDef RxEventType;      /*!< Type of Rx Event                   */

  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值