STM32学习-10-[串口]发送数据
TxE标志位

如图所示
查询上面这些寄存器的值就可以知道当前串口的工作状态
TxE的作用就是判断发送数据寄存器是否为空,没有数据的时候,TxE寄存器就是1
发送数据之前判断一下,TxE标志位是否为空,不然可能会导致数据丢失
TC标志位

只有发送数据寄存器和移位寄存器都为空的时候才能判定发送成功,数据为1
发送数据寄存器里面存的是将要发送的数据
移位寄存器存的是正在发送的数据
编程接口

#include "stm32f10x.h"
int main(void)
{
RCC_APB2PriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 启动UASRT1模块的时钟
// 对串口进行初始化
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate = 115200; // 设置波特率
USART_InitStruct.USART_Mode = USART_Tx | USART_Rx; // 设置收发方向
USART_InitStruct.USART_WordLength = USART_WordLength_8b; // 设置数据位数
USART_InitStruct.USART_StopBits = USART_StopBits_1; // 设置停止位
USART_InitStruct.USART_Parity = USART_Parity_No; // 设置校验位
// 调用初始化函数
USART_Init(USART1, &USART_InitStruct);
// 启用USART模块 闭合总开关
USART_Cmd(USART1, ENABLE);
while(1)
{
}
}


编写代码
// @作用:使用串口一次性发送多个字节
// @参数:pData - 要发送的数据 Size - 字节的数量
void My_USART_SendBytes(USART_TypeDef *USARTx, uint8_t *pData, uint16_t Size){
for(uint32_t i = 0; i < Size; i++){
// #1.等待发送数据寄存器空
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);// #2. 将要发送的数据写入到发送数据寄存器
USART_SendData(USARTx, pData[i]);
}
// #3.等待数据发送完成
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}

浙公网安备 33010602011771号