STM32 USART通信

USART 功能概述
接口通过三个引脚与其他设备连接在一起 ( 见图 236) 。任何 USART 双向通信至少需要两个脚:接
收数据输入 (RX) 和发送数据输出 (TX) 。
RX :接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
TX :发送数据输出。当发送器被禁止时,输出引脚恢复到它的 I/O 端口配置。当发送器被激活,
并且不发送数据时, TX 引脚处于高电平。在单线和智能卡模式里,此 I/O 口被同时用于数据的发
送和接收。
● 总线在发送或接收前应处于空闲状态
● 一个起始位
● 一个数据字( 8 或 9 位),最低有效位在前
● 0.5 , 1.5 , 2 个的停止位,由此表明数据帧的结束
● 使用分数波特率发生器 ------ 12 位整数和 4 位小数的表示方法。
● 一个状态寄存器 (USART_SR)
● 数据寄存器 (USART_DR)
● 一个波特率寄存器 (USART_BRR) , 12 位的整数和 4 位小数
● 一个智能卡模式下的保护时间寄存器 (USART_GTPR)
关于以上寄存器中每个位的具体定义,请参考寄存器描述 0 节。

基于标准库初始化代码

cpp 复制代码
//引脚初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	//USART初始化
	USART_InitTypeDef USART_InitStrict;
	
	//因为要使用 USART和GPIOA引脚 开启该时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
	
	//PA9 TX 复用推挽
	GPIO_InitStruct.GPIO_Mode	=GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Pin	=GPIO_Pin_9;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

	//PA10		RX  输入上拉
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//初始化引脚 设置usart 引脚的波特率 数据位 停止位 硬件流控制
	USART_InitStrict.USART_BaudRate						=baudrate;//外部输入初始化 波特率 
	USART_InitStrict.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用硬件流控制
	USART_InitStrict.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
	USART_InitStrict.USART_Parity=USART_Parity_No;//不用校验  奇偶检验为 判断1是偶数还是奇数
	USART_InitStrict.USART_StopBits=USART_StopBits_1;// 1位停止位 停止位1 1.5 2 0.5
	USART_InitStrict.USART_WordLength=USART_WordLength_8b;// 8  数据长度 8位或者9位
 	USART_Init(USART1, &USART_InitStrict);//初始化
	//使能
	USART_Cmd(USART1,ENABLE);//引脚初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	//USART初始化
	USART_InitTypeDef USART_InitStrict;
	
	//因为要使用 USART和GPIOA引脚 开启该时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1,ENABLE);
	
	//PA9 TX 复用推挽
	GPIO_InitStruct.GPIO_Mode	=GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Pin	=GPIO_Pin_9;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

	//PA10		RX  输入上拉
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//初始化引脚 设置usart 引脚的波特率 数据位 停止位 硬件流控制
	USART_InitStrict.USART_BaudRate						=baudrate;//外部输入初始化 波特率 
	USART_InitStrict.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用硬件流控制
	USART_InitStrict.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;
	USART_InitStrict.USART_Parity=USART_Parity_No;//不用校验  奇偶检验为 判断1是偶数还是奇数
	USART_InitStrict.USART_StopBits=USART_StopBits_1;// 1位停止位 停止位1 1.5 2 0.5
	USART_InitStrict.USART_WordLength=USART_WordLength_8b;// 8  数据长度 8位或者9位
 	USART_Init(USART1, &USART_InitStrict);//初始化
	//使能
	USART_Cmd(USART1,ENABLE);

然后继续使用标准库的函数继续串口是数据收发就可以实现通信了

cpp 复制代码
// 发送
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
//接收数据
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
相关推荐
电鱼智能的电小鱼3 小时前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频
电院工程师8 小时前
SIMON64/128算法Verilog流水线实现(附Python实现)
python·嵌入式硬件·算法·密码学
Shang180989357268 小时前
T41LQ 一款高性能、低功耗的系统级芯片(SoC) 适用于各种AIoT应用智能安防、智能家居方案优选T41L
人工智能·驱动开发·嵌入式硬件·fpga开发·信息与通信·信号处理·t41lq
BreezeJuvenile9 小时前
外设模块学习(8)——HC-SR04超声波模块(STM32)
stm32·单片机·嵌入式硬件·学习·超声波测距模块·hc-sr04
安庆平.Я12 小时前
STM32——定时器
stm32·单片机·嵌入式硬件·定时器
ACP广源盛1392462567312 小时前
(ACP广源盛)GSV2231---DisplayPort 1.4 MST 到 HDMI 2.0/DP/Type-C 转换器(带嵌入式 MCU)
c语言·开发语言·单片机·嵌入式硬件·音视频·mst
电鱼智能的电小鱼13 小时前
基于电鱼 ARM 边缘网关的智慧工地数据可靠传输方案——断点续传 + 4G/5G冗余通信,保障数据完整上传
arm开发·人工智能·嵌入式硬件·深度学习·5g·机器学习
范纹杉想快点毕业13 小时前
12个月嵌入式进阶计划ZYNQ 系列芯片嵌入式与硬件系统知识学习全计划(基于国内视频资源)
c语言·arm开发·单片机·嵌入式硬件·学习·fpga开发·音视频
NEU-UUN14 小时前
1.2.STM32简介——全程手敲板书
stm32·单片机·嵌入式硬件
三佛科技-1341638421214 小时前
全自动削皮机方案,果蔬去皮机/削皮机MCU控制方案开发设计
单片机·嵌入式硬件