STM32 - HAL库UART串口

1.串口初始化配置

/*******************************************************************************
Function: BSP_UART_Init 
Description: 串口初始化
Input:  instance 串口号
        baudRate: 波特率
Output: 无
Return: 无
*******************************************************************************/
void BSP_UART_Init(USART_TypeDef *instance, uint32_t baudRate)
{
    if (instance == USART1)
    {
        huart1.Instance = USART1;
        huart1.Init.BaudRate = baudRate;
        huart1.Init.WordLength = UART_WORDLENGTH_8B;
        huart1.Init.StopBits = UART_STOPBITS_1;
        huart1.Init.Parity = UART_PARITY_NONE;
        huart1.Init.Mode = UART_MODE_TX_RX;
        huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        huart1.Init.OverSampling = UART_OVERSAMPLING_16;
        if (HAL_UART_Init(&s_uart1) != HAL_OK)
        {
            Error_Handler();
        }
    }
    else if (instance == USART2)
    {
        huart2.Instance = USART2;
        huart2.Init.BaudRate = baudRate;
        huart2.Init.WordLength = UART_WORDLENGTH_8B;
        huart2.Init.StopBits = UART_STOPBITS_1;
        huart2.Init.Parity = UART_PARITY_NONE;
        huart2.Init.Mode = UART_MODE_TX_RX;
        huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        huart2.Init.OverSampling = UART_OVERSAMPLING_16;
        if (HAL_UART_Init(&s_uart2) != HAL_OK)
        {
            Error_Handler();
        }
    }
    else if (instance == USART3)
    {
        huart3.Instance = USART3;
        huart3.Init.BaudRate = baudRate;
        huart3.Init.WordLength = UART_WORDLENGTH_8B;
        huart3.Init.StopBits = UART_STOPBITS_1;
        huart3.Init.Parity = UART_PARITY_NONE;
        huart3.Init.Mode = UART_MODE_TX_RX;
        huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
        huart3.Init.OverSampling = UART_OVERSAMPLING_16;
        if (HAL_UART_Init(&s_uart3) != HAL_OK)
        {
            Error_Handler();
        }
    }
}

1.1 外设句柄 xxx_HandleTypeDef

UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;

第一行表示:名为huart1的、类型为UART_HandleTypeDef型的一个结构体

第二行表示:名为huart2的、类型为UART_HandleTypeDef型的一个结构体

1.2 __UART_HandleTypeDef

stm32f1xx_hal_uart.h文件

代码类型___UART_HandleTypeDef,别名UART_HandleTypeDef

/**
  * @brief  UART handle Structure definition
  */
typedef struct __UART_HandleTypeDef
{
  USART_TypeDef                 *Instance;        /*!< UART registers base address        */
  UART_InitTypeDef              Init;             /*!< UART communication parameters      */
  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           */
  DMA_HandleTypeDef             *hdmatx;          /*!< UART Tx DMA Handle parameters      */
  DMA_HandleTypeDef             *hdmarx;          /*!< UART Rx DMA Handle parameters      */
  HAL_LockTypeDef               Lock;             /*!< Locking object                     */
  __IO HAL_UART_StateTypeDef    gState;           /*!< UART state information related to global Handle management
                                                       and also related to Tx operations.
                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */
  __IO HAL_UART_StateTypeDef    RxState;          /*!< UART state information related to Rx operations.
                                                       This parameter can be a value of @ref HAL_UART_StateTypeDef */
  __IO uint32_t                 ErrorCode;        /*!< UART Error code    

huart1.Instance = USART1;这行代码,首先第一点huart1.Instance表示的是结构体huart1中的成员变量Instance。

1.3 Instance成员=USART1

#define USART1              ((USART_TypeDef *)USART1_BASE)

USART1是一个宏。

这个宏是将USART1_BASE(常量)强制转换为USART_TypeDef型结构体指针。

常量强制转化为一个结构体指针,该常量为结构体的起始地址

USART1_BASE被强制转换为USART_TypeDef的起始地址,内存空间将以USART_TypeDef类型进行构建,首址为USART1_BASE,空间内有成员,按其固有类型顺序依次分配内存空间。

根据HAL库的注释,可以知道Instance指向的也是uart寄存器组的基地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值