STM32串口通信小试

#一、串口通信介绍
##1、串口通信
串口在嵌入式系统当中是一类重要的数据通信接口,其本质功能是作为 CPU 和串行设备间的编码转换器。当数据从 CPU 经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。
串口通讯是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。
##2、串口通信的几种标准
###(1)、R232标准
MAX232芯片是专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。MAX232芯片的作用是将单片机输出的TTL电平转换成PC机能接收的232电平或将PC机输出的232电平转换成单片机能接收的TTL电平。
MAX232芯片适用电路图:(来源于百度)
在这里插入图片描述

###(2)、R485标准
SP3485芯片是+3.3V低功耗半双工收发器,适用于RS-485和RS-422串行协议。
SP3485应用电路图如下:
在这里插入图片描述

##3、RS232、485电平与TTL电平的区别
RS-232
1、 在RS-232-C中任何一条信号线的电压均为负逻辑关系。
即:逻辑“1”为-3到-15V;逻辑“0”为+3到+15V。

2、 RS-232-C接口连接器一般使用型号为DB-9插头座,通常插头在DCE端,插座在DTE端。PC机的RS-232口为9芯针插座。一些设备与PC机连接的RS-232接口,因为不使用对方的传送控制信号,只需要三条接口线,即“发送数据TXD”、“接收数据RXD”和“信号地GND”。RS-232传输线采用屏蔽双绞线。
RS-485
RS485采用差分信号负逻辑.
逻辑"1"以两线间的电压差为-(2~6)V表示
逻辑"0"以两线间的电压差为+(2~6)V表示。
接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL电路连接。RS-485的数据最高传输速率为10Mbps。

TTL
TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。
##4、CH340芯片介绍
CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。
在串口方式下,CH340 提供常用的MODEM联络信号。
在红外方式下,CH340 外加红外收发器即可构成USB 红外线适配器。
#二、串口通信小试前准备
##1、硬件准备
STM32F103C8T6最小核心板
USB转TTL
##2、软件及驱动准备
CH340驱动(USB串口驱动)_XP_WIN7共用
串口调试助手XCOM V2.3
CH340驱动
注:CH340驱动安装后在电脑设备管理器查找有无com端口,有即代表安装成功。
#三、串口通信小试代码编写:
代码1:
ustart.c

void uart_init(u32 pclk2,u32 bound)
{  	 
	float temp;
	u16 mantissa;
	u16 fraction;	   
	temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
	mantissa=temp;				 //得到整数部分
	fraction=(temp-mantissa)*16; //得到小数部分	 
    mantissa<<=4;
	mantissa+=fraction; 
	RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
	RCC->APB2ENR|=1<<14;  //使能串口时钟 
	GPIOA->CRH&=0XFFFFF00F;//IO状态设置
	GPIOA->CRH|=0X000008B0;//IO状态设置 
	RCC->APB2RSTR|=1<<14;   //复位串口1
	RCC->APB2RSTR&=~(1<<14);//停止复位	   	   
	//波特率设置
 	USART1->BRR=mantissa; // 波特率设置	 
	USART1->CR1|=0X200C;  //1位停止,无校验位.
#if EN_USART1_RX		  //如果使能了接收
	//使能接收中断 
	USART1->CR1|=1<<5;    //接收缓冲区非空中断使能	    	
	MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级 
#endif
}

代码2:test.c

#include "sys.h"
#include "usart.h"		
#include "delay.h"	 
int main(void)
{				 
	u16 t; u16 len; u16 times=0;
	Stm32_Clock_Init(9);	//系统时钟设置
	delay_init(72);	  		//延时初始化
	uart_init(72,115200); 	//串口初始化为115200
  	while(1)
	{
		if(USART_RX_STA&0x8000)
		{ 
			len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度
			printf("\r\n Hello Windows! \r\n\r\n");
			for(t=0;t<len;t++)
			{
				USART1->DR=USART_RX_BUF[t];
				while((USART1->SR&0X40)==0);//等待发送结束
			}
			printf("\r\n\r\n");//插入换行
			USART_RX_STA=0;
		}else
		{
			times++;
			if(times%200==0)printf("Hello Windows!\r\n"); 
			delay_ms(10); 
		}
	}	 
} 

代码编写后进行调试编译,无误后进行烧录:
在这里插入图片描述
然后用XCOM观查串口输出:
在这里插入图片描述
观察输出成功小试结束。

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于STM32和CH340之间的串口通信,您可以按照以下步骤进行操作: 1. 首先,确保您已经将CH340 USB转串口模块正确连接到STM32开发板上。将CH340的TXD引脚连接到STM32的RX引脚,将CH340的RXD引脚连接到STM32的TX引脚,同时将它们的地线(GND)连接在一起。 2. 接下来,您需要使用适当的库函数或驱动程序来初始化STM32串口功能并配置串口参数。根据您使用的开发环境或编程语言,具体的配置过程可能会有所不同。 - 如果您使用的是ST官方提供的CubeMX软件,可以通过添加USART外设并进行相应的配置来初始化串口。 - 如果您使用的是标准库函数(如HAL库),可以使用对应的函数(如`HAL_UART_Init()`)来初始化串口。 - 如果您使用的是其他第三方库或编程语言(如STM32duino),请参考相关文档或示例代码进行配置。 3. 在配置完串口后,您可以使用相应的发送接收函数来进行数据传输。具体的函数名称和用法将取决于您所选择的开发环境和库函数。 - 在标准库函数中,您可以使用`HAL_UART_Transmit()`和`HAL_UART_Receive()`等函数来发送接收数据。 - 在其他库或编程语言中,可能会有不同的函数名称和用法,请参考相关文档或示例代码。 4. 最后,在STM32上编写相应的程序,以实现您想要的串口通信功能。您可以编写发送接收数据的代码,并根据需要进行数据处理和响应。 需要注意的是,在进行串口通信时,还需要确保STM32和CH340之间的波特率(Baud rate)设置一致,以确保数据的正确传输。 希望以上信息能对您有所帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值