STM32_USART通用同步/异步收发器

目录

背景

程序

STM32浮空输入的概念

1.基本概念

[2. STM32浮空输入的特点](#2. STM32浮空输入的特点)

[3. STM32浮空输入的应用场景](#3. STM32浮空输入的应用场景)

STM32推挽输出详解

[1. 基本概念](#1. 基本概念)

[2. 工作原理](#2. 工作原理)

[3. 应用场景](#3. 应用场景)

使能外设时钟

[TXE 和 TC的区别](#TXE 和 TC的区别)

USART_IT_TXE

USART_IT_TC

使能串口外设

中断处理函数


背景

单片机有常用的三大通信(SPI、I2C、UART(USART))。本篇文章对STM32的UART初始化进行简要的说明。

程序

复制代码
void USART1_Init(u32 bound){ //串口1初始化并启动
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟
     //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);  
    //USART1_RX	  PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure); 
   //Usart1 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器 
   //USART 初始化设置
	USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式
    USART_Init(USART1, &USART_InitStructure); //初始化串口
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启ENABLE/关闭DISABLE中断
    USART_Cmd(USART1, ENABLE);                    //使能串口 
}

对于RX脚的端口模式要设置为浮空输入。对于RX脚的端口模式要设置为推挽输出

STM32浮空输入的概念

1.基本概念

STM32浮空输入(Floating Input)模式是指GPIO端口的电平状态完全由外部信号决定 ,该引脚既不连接到内部上拉电阻,也不连接到内部下拉电阻,处于高阻态。这种模式下,引脚对外表现为高阻抗,可以检测到微弱的信号变化。

2. STM32浮空输入的特点

  • 高阻抗‌:浮空输入时,引脚表现为高阻抗,对外部电路的影响较小。
  • 电平状态不定‌:由于电平状态完全由外部信号决定,因此在外部无信号或信号微弱时,引脚电平状态可能不稳定,容易受到外界电磁干扰。
  • 适用于特定场景‌:浮空输入通常用于需要高阻抗信号读取的场景,如按键检测、ADC(模数转换器)输入等。

3. STM32浮空输入的应用场景

  • 按键检测‌:在按键电路中,按键未按下时,通过浮空输入模式可以检测到按键的悬空状态,从而判断按键是否被按下。
  • ADC输入‌:在ADC采样输入时,使用浮空输入模式可以减少上拉或下拉电阻对采样结果的影响,提高采样精度。
  • 微弱信号检测‌:由于浮空输入具有高阻抗特性,可以检测到微弱的信号变化,适用于需要高灵敏度信号检测的场景。

STM32推挽输出详解

1. 基本概念

STM32推挽输出(Push-Pull Output)是一种GPIO(通用输入输出)引脚输出模式,能够输出高电平和低电平,并具有一定的驱动能力。在这种模式下,引脚在输出低电平时形成低阻抗,输出高电平时形成高阻抗,可以驱动外部电路。

2. 工作原理

推挽输出模式的工作原理基于两个互补的晶体管(通常是MOSFET或双极型晶体管)来控制输出电平。当输出信号为高电平时,一个晶体管导通,将输出端拉向高电平;当输出信号为低电平时,另一个晶体管导通,将输出端拉向低电平。这种互补控制方式确保了输出端在高低电平之间快速切换,同时提供足够的驱动能力。

3. 应用场景

STM32推挽输出模式广泛应用于需要驱动外部负载的场景,如:

  • 控制LED灯的亮灭。
  • 驱动继电器、电机等负载。
  • 与其他数字电路进行逻辑电平连接。

使能外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);

查看GPIOA(端口组A)是接在APB2总线上。

串口中断配置

TXE 和 TC的区别

USART_IT_TXE

USART_IT_TXE ‌(发送数据寄存器空标志位)表示发送数据寄存器(USART_DR)为空 ,即可以往USART_DR中写入下一个要发送的数据。当USART_DR中的数据被传送到移位寄存器后,TXE标志被设置,此时程序可以把下一个要发送的字节写入USART_DR。需要注意的是,在初始化USART时,即使没有发送任何数据,TXE标志也会被设置,因为此时发送数据寄存器是空的‌12。

USART_IT_TC

USART_IT_TC ‌(传输完成标志位)表示移位寄存器中的所有数据都已发送完毕 。当移位寄存器中的所有数据都移出后,硬件会设置TC标志。TC标志是在发送结束时触发,通常用于发送结束后处理‌。

使能串口外设

中断处理函数

复制代码
void USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)	
	u8 Res;
	
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ 	
		Res =USART_ReceiveData(USART1);//(USART1->DR);	//读取接收到的数据
		printf("%c",Res); //把收到的数据以 a符号变量 发送回电脑		
		   		 
	} 
} 
相关推荐
智商偏低15 分钟前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen2 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森4 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白4 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D4 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术7 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt8 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘8 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang8 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c
几个几个n10 小时前
STM32-第二节-GPIO输入(按键,传感器)
单片机·嵌入式硬件