XCOSnTh单片机的串口

串口是一个泛称,具体的串口有RS232、TTL、RS485等等
单片机的串口

上图中,RX为单片机串口数据的接收线,TX为单片机串口数据的发送线,单片机的异步串口就这2根线,如果想要串口工作起来,还需要一根GND线(因为在这个单片机中,所有的电压信号都是相对于GND的),串口靠有无电压(高低电平)来传递信号,【此单片机的串口为TTL串口(这是一个很具体的名字,在设计硬件电路的时候,称为TTL电路设计)】其中信号的格式如下
1表示高电平(有电压),0表示低电平(无电压)

由上图可知串口在没有传输数据的时候,保持为高电平状态

如上图所示串口的每一帧数据一般有10位分别为初始位、8位数据和结束位(停止位),每位的保持时间称为波特率(比如115200Hz、9600Hz)

1、关于波特率的配置代码为:

复制代码
/*USART_InitTypeDef USART_InitStructure;*/
USART_InitStructure.USART_BaudRate = 115200;//波特率:115200

2、串口是可以全双工、半双工、单工的通信接口,在该单片机中的配置代码为:

复制代码
/*USART_InitTypeDef USART_InitStructure;*/
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//模式:发送和接收模式

当配置为USART_InitStructure.USART_Mode = USART_Mode_Tx;时候串口就只具备发送功能。

当配置为USART_InitStructure.USART_Mode = USART_Mode_Rx;时候串口就只具备接收功能。

3、通常使用的串口为异步串口,所以将硬件流控配置为【无硬件流控】,代码为:

复制代码
/*USART_InitTypeDef USART_InitStructure;*/
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控:无

4、串口有数据校验(奇偶校验)的功能,但通常不使用,所以代码为【无校验】

复制代码
/*USART_InitTypeDef USART_InitStructure;*/
USART_InitStructure.USART_Parity = USART_Parity_No;//校验:无

5、通常配置停止位为1位,数据位为8位【1位停止位、8位数据位】

复制代码
/*USART_InitTypeDef USART_InitStructure;*/
USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位:1位
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据位宽度:8位

6、在STD库中调用初始化函数,通过上面的配置即可完成TTL串口的初始化,代码为

复制代码
USART_Init(USART1, &USART_InitStructure);//串口初始化

完整的串口程序为:

复制代码
#include"STM32F10X.h"
void USART1_IRQHandler(void)
{//串口接收中断
	if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
	{
		uint16_t temp = USART_ReceiveData(USART1);//读取串口接收到的数据	
		USART_SendData(USART1,temp);//将串口接收到的数据发送出去
	}
}
void TTL_SerialInit()
{//【串口配置】
	{//1、串口的GPIO配置
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA的时钟
		GPIO_InitTypeDef GPIO_InitStructure;
		//PA9:Tx
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA9:Tx
		//PA10:Rx
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA10:Rx
	}
	{//2、串口配置
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能串口时钟
		USART_InitTypeDef USART_InitStructure;
		USART_InitStructure.USART_BaudRate = 115200;//波特率:115200
		USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控:无
		USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;//模式:发送和接收模式
		USART_InitStructure.USART_Parity = USART_Parity_No;	//校验:无
		USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位:1位
		USART_InitStructure.USART_WordLength = USART_WordLength_8b;//数据位宽度:8位
		USART_Init(USART1, &USART_InitStructure);//串口初始化
		{//3、串口的接收中断配置
			NVIC_InitTypeDef NVIC_InitStructure;
			NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;	
			NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	
			NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
			NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
			NVIC_Init(&NVIC_InitStructure);	
			USART_Cmd(USART1, ENABLE);
		}
		USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);	//打开串口接收中断
	}
}
static int PrintPutC(int ch)
{
	USART_SendData(USART1, ch);//发送一个字节的数据
	while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);	//等待串口发送完成
	return ch;
}

RS232串口经典电路图

RS485串口经典电路图

相关推荐
铉铉这波能秀16 小时前
LeetCode Hot100数据结构背景知识之集合(Set)Python2026新版
数据结构·python·算法·leetcode·哈希算法
踢足球092916 小时前
寒假打卡:2026-2-8
数据结构·算法
IT猿手16 小时前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
千逐-沐风16 小时前
SMU-ACM2026冬训周报3rd
算法
wangjialelele16 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发
铉铉这波能秀16 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
晚霞的不甘16 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
㓗冽16 小时前
60题之内难题分析
开发语言·c++·算法
大江东去浪淘尽千古风流人物16 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
零一iTEM17 小时前
MAX98357A_音频输出测试
单片机·嵌入式硬件·开源·音视频·硬件工程