STM32学习-10-[串口]发送数据

TxE标志位

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

TC标志位

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

编程接口

image

#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)
	{
	}
}

image
image

编写代码

// @作用:使用串口一次性发送多个字节
// @参数: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);
}
posted @ 2026-08-31 10:56  灵垚克府  阅读(5)  评论(0)    收藏  举报