目录
背景
程序
STM32浮空输入的概念
1.基本概念
2. STM32浮空输入的特点
3. STM32浮空输入的应用场景
STM32推挽输出详解
1. 基本概念
2. 工作原理
3. 应用场景
使能外设时钟
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.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure); //USART1_RX PA.10GPIO_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 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_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符号变量 发送回电脑 }
}