stm32串口通信入门

一、相关知识

(1)串口协议

STM32微控制器系列的串口协议通常指的是通用异步收发传输器(UART, Universal Asynchronous Receiver/Transmitter)。UART是一种非常广泛使用的硬件通信协议,用于异步串行通信。STM32微控制器通常包含多个UART接口,用于与外部设备或另一个微控制器进行串行通信。

​ UART(Universal Asynchronous Receiver Transmitter,通用异步收发传输器)是一个全双工通用异步串行收/发模块,主要用于打印程序调试信息、上位机和下位机的通信以及ISP程序下载等场合UART至少需要两根数据线用于通信双方进行数据双向同时传输,最简单的UART接口由TxD、RxD、GND共3根线组成。其中,TxD用于发送数据,RxD用于接收数据,GND为信号地线,通过交叉连接实现两个芯片间的串口通信。

在这里插入图片描述

(2)RS-232标准

RS-232标准,是一种定义异步通信口的物理接口和电气特性的标准。它最初设计用于提供计算机和电话线之间调制解调器的接口,但随着时间的推移,它的应用范围已经扩展到其他各种设备之间的串行通信。
RS-232标准使用串行通信,数据按位顺序传输。通常采用DB-9或DB-25的形式,以DB-9最为常见。每个连接器都有不同的引脚分配,用于传输数据、控制信号和提供电源。

信号电平:它使用负电压表示逻辑“1”(标记),正电压表示逻辑“0”(空格)。通常,标记的电压范围在-3V到-15V之间,空格的电压范围在+3V到+15V之间。
信号线:RS-232定义了多个信号线,包括数据线(TXD、RXD)、地线(GND)、控制线(如CTS、RTS、DTR、DSR等)和定时线(如DCD、RI)。
传输速率
在这里插入图片描述

对可靠性要求不高的场合,DB-9通常采用三线制串口,仅需发送(Tx)、接收(Rx)和地(GND)三条线,即可实现全双工通信,进行最基本的数据收发传送,最高传输速率可达20kbps

(3)RS232与TTL电平区别

RS-232电平和TTL电平的主要区别在于它们的电压表示方式和适用环境。RS-232使用较高的电压水平(-3V到-15V表示逻辑“1”,+3V到+15V表示逻辑“0”),适用于较长距离和噪声较大的工业环境。而TTL使用较低的电压水平(0V到0.8V表示逻辑“0”,2.0V到5V表示逻辑“1”),适用于短距离和电子设备内部通信。由于这些差异,RS-232和TTL电平之间通常需要电平转换电路以便进行通信。

(4)"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理
当模块通过USB接口与计算机或其他USB设备连接时,CH340芯片会与主机进行通信,并模拟成一个虚拟的串行端口(COM口)。
计算机发送的数据通过USB接口到达CH340芯片,芯片将这些数据转换为TTL电平的串行数据信号。
如果需要将数据发送到使用RS-232接口的设备,CH340芯片还会将TTL电平的信号进一步转换为RS-232电平的信号。

二、标准库点亮流水灯

相关程序:

//主函数main:
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟
															//使用各个外设前必须开启时钟,否则对外设的操作无效
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;				//GPIO引脚,赋值为所有引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数
															//函数内部会自动根据结构体的参数配置相应寄存器
															//实现GPIOA的初始化
	
	/*主循环,循环体内的代码会一直循环执行*/
	while (1)
	{
		
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,PA2引脚为低电平,其他引脚均为高电平
		Delay_ms(300);				//延时300ms
		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,PA3引脚为低电平,其他引脚均为高电平
		Delay_ms(300);				//延时300ms
		GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000,PA4引脚为低电平,其他引脚均为高电平
		Delay_ms(300);				//延时300ms
		
	}
}

//delay函数:

#include "stm32f10x.h"

// @brief  微秒级延时
// @param  xus 延时时长,范围:0~233015
//@retval 无
void Delay_us(uint32_t xus)
{
	SysTick->LOAD = 72 * xus;		//设置定时器重装值
	SysTick->VAL = 0x00;			//清空当前计数值
	SysTick->CTRL = 0x00000005;		//设置时钟源为HCLK,启动定时器
	while(!(SysTick->CTRL & 0x00010000));	//等待计数到0
	SysTick->CTRL = 0x00000004;				//关闭定时器
}

// @brief  毫秒级延时
//@param  xms 延时时长,范围:0~4294967295
// @retval 无
void Delay_ms(uint32_t xms)
{
	while(xms--)
	{
		Delay_us(1000);
	}
}
 
void Delay_s(uint32_t xs)
{
	while(xs--)
	{
		Delay_ms(1000);
	}
} 

(1)实物连接图

在这里插入图片描述

(2)实践效果

在这里插入图片描述

(4)观察波形
在这里插入图片描述

三、总结
学习到了更多stm32标准库的知识。

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32CUBEIDE是一种用于开发STM32微控制器的集成开发环境。它支持多种串口通信协议,包括USART和UART。根据引用,STM32微控制器具有多个USART和UART接口。其中,USART1的时钟来源于APB2总线时钟,最大频率为72MHz,而其他四个USART和UART接口的时钟来源于APB1总线时钟,最大频率为36MHz,如引用所述。 要在STM32CUBEIDE中进行串口通信,可以使用USART和UART接口。根据引用,USART接口支持同步单向通信和半双工单线通信,并且还支持LIN、智能卡协议和IrDA SIR ENDEC规范以及调制解调器操作 (CTS/RTS)。而UART接口只支持异步传输功能,因此没有SCLK、nCTS和nRTS功能引脚,如引用所述。 要在STM32CUBEIDE中配置和使用串口通信功能,您可以按照以下步骤进行操作: 1. 打开STM32CUBEIDE集成开发环境,并创建一个新的工程或打开现有的工程。 2. 在工程中选择要使用的STM32微控制器型号,并配置时钟和引脚设置。 3. 在配置文件中找到串口配置部分,并选择要使用的USART或UART接口。 4. 根据您的需求,配置串口的参数,例如波特率、数据位数、停止位数、校验位等。 5. 在代码中编写相应的初始化函数和发送/接收函数,以实现串口通信功能。 6. 构建和烧录代码到STM32微控制器中,并连接电脑与微控制器的串口进行通信。 请注意,具体的配置和代码实现可能会根据您使用的具体STM32微控制器型号和通信需求而有所不同。因此,建议您参考相关的STM32CUBEIDE文档和参考手册,以获取更详细的指导和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [STM32F1与STM32CubeIDE快速入门-USART/UART串口通信](https://blog.csdn.net/wujuxKkoolerter/article/details/123263120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【CubeIDE】STM32 HAL库史上最详细教程(一):UART串口收发](https://blog.csdn.net/qq_42652838/article/details/107776265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值