当前位置: 首页 > news >正文

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 managementand 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寄存器组的基地址。

http://www.lryc.cn/news/13897.html

相关文章:

  • Vue3 的状态管理库(Pinia)
  • 信息系统项目管理师知识点汇总(2023最新)
  • 标题标题标题
  • OKR学习总结二
  • MAC中docker搭建fastdfs
  • JavaScript 变量
  • 【前端验证】环境仿真中对于寄存器配置的随机策略讨论
  • Servlet如何读取Web资源文件?【操作演示】
  • [ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2019-6339)
  • flex-shrink和felx-grow
  • 将HTTP接口配置成HTTPS
  • YOLOV5报错解决办法
  • java final关键字 详解
  • Vbs_To_Exe制作简易exe程序
  • AI制药 - TMScore(US-align)、RMSD、Sequence 源码
  • 关于个人的经历
  • 设计在单链表中删除值相同的多余结点的算法(包括指针的引用的知识点)
  • 100份简历才找一个合适的,2023,软件测试岗位饱和了吗?
  • (三十七)vue 项目中常用的2个Ajax库
  • Python打包调试问题解决
  • 计算机SCI期刊自引率一般是多少? - 易智编译EaseEditing
  • 力扣(LeetCode)417. 太平洋大西洋水流问题(2023.02.19)
  • Python解题 - CSDN周赛第30期 - 天然气订单
  • 移动WEB开发一、基础知识
  • 07 二叉树
  • 3|物联网控制|计算机控制-刘川来胡乃平版|第4章:过程通道与人机接口-4.1数字量输入输出通道接口|课堂笔记|ppt
  • 从 ClickHouse 到 Apache Doris,腾讯音乐内容库数据平台架构演进实践
  • linux线程的基本知识
  • docker swarm 集群服务编排部署指南(docker stack)
  • ESP开发环境搭建