stm32f7网口_STM32F7xx —— 串口通信

一、串口初始化过程

1、时钟使能;

2、GPIO初始化;

3、串口波特率设置;

4、串口控制;

5、数据发送与接收

二、几个重要的串口函数

HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); // 串口初始化

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 串口发送

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 串口接收

__HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__)  // 串口中断使能

void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority); // 设置中断优先级

void HAL_NVIC_EnableIRQ(IRQn_Type IRQn); // 使能中断

三、几个重要的结构

// 串口初始化结构体 包含了串口句柄 波特率配置 发送接收缓存 dma等

// 我们只描述前两个基本功能,对效率要求极高可以使用DMA。

typedef struct

{

USART_TypeDef            *Instance;        /*!< UART registers base address        */

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

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

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

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

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

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

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

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

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

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                    */

}UART_HandleTypeDef;

// 串口的操作句柄 如 USART1 USART2 USART3等

typedef struct

{

__IO uint32_t CR1;    /*!< USART Control register 1,                 Address offset: 0x00 */

__IO uint32_t CR2;    /*!< USART Control register 2,                 Address offset: 0x04 */

__IO uint32_t CR3;    /*!< USART Control register 3,                 Address offset: 0x08 */

__IO uint32_t BRR;    /*!< USART Baud rate register,                 Address offset: 0x0C */

__IO uint32_t GTPR;   /*!< USART Guard time and prescaler register,  Address offset: 0x10 */

__IO uint32_t RTOR;   /*!< USART Receiver Time Out register,         Address offset: 0x14 */

__IO uint32_t RQR;    /*!< USART Request register,                   Address offset: 0x18 */

__IO uint32_t ISR;    /*!< USART Interrupt and status register,      Address offset: 0x1C */

__IO uint32_t ICR;    /*!< USART Interrupt flag Clear register,      Address offset: 0x20 */

__IO uint32_t RDR;    /*!< USART Receive Data register,              Address offset: 0x24 */

__IO uint32_t TDR;    /*!< USART Transmit Data register,             Address offset: 0x28 */

} USART_TypeDef;

// 设置串口的各个参数 波特率 字长 停止位 奇偶校验 收发模式 硬件流 过采样

// 字长:8位/9位

// 停止位:1位/2位

typedef struct

{

uint32_t BaudRate;                  /*!< This member configures the UART communication baud rate.

The baud rate register is computed using the following formula:

- If oversampling is 16 or in LIN mode,

Baud Rate Register = ((PCLKx) / ((huart->Init.BaudRate)))

- If oversampling is 8,

Baud Rate Register[15:4] = ((2 * PCLKx) / ((huart->Init.BaudRate)))[15:4]

Baud Rate Register[3] =  0

Baud Rate Register[2:0] =  (((2 * PCLKx) / ((huart->Init.BaudRate)))[3:0]) >> 1      */

uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.

This parameter can be a value of @ref UARTEx_Word_Length */

uint32_t StopBits;                  /*!< Specifies the number of stop bits transmitted.

This parameter can be a value of @ref UART_Stop_Bits */

uint32_t Parity;                    /*!< Specifies the parity mode.

This parameter can be a value of @ref UART_Parity

@note When parity is enabled, the computed parity is inserted

at the MSB position of the transmitted data (9th bit when

the word length is set to 9 data bits; 8th bit when the

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] [3] 610626052e95c7fbe3d254abc769d9ad.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值