完成一个STM32的USART串口通讯程序

一.相关原理

1.USART串口协议

  • UART 通用异步收发传输器(Universal AsynchronousReceiver/Transmitter),通常称作UART,是一种通用的串行异步全双工数据收发传输器(总线)。

  • UART的作用是:把“要传输的数据”在串行通信与并行通信之间转换。在嵌入式领域,作为把并行信号转成串行信号的硬件设备,UART通常被集成于MCU内部。

  • UART与USART:
    UART:universal asynchronous receiver and transmitter 通用异步收/发器,即串行异步全双工收发器。
    USART:universal synchronous asynchronous receiver and transmitter 通用同步/异步收/发器,即串行异步/同步全双工收发器。
    从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型。其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了。大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。

     UART管脚定义:TX、RX、GND; USART管脚定义:TX、RX、GND、SCLK。
    
  • UART通信协议
    1、波特率:
    此参数容易和比特率混淆,其实他们是由区别的。具体可以百度更清楚。但是我认为uart中的波特率就可以认为是比特率,即每秒传输的位数(bit)。一般选波特率都会有9600,19200,115200等选项。其实意思就是每秒传输这么多个比特位数(bit)。

    2、起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。

    3、数据位
    可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或者1的bit位。这个参数最好为8,因为如果此值为其他的值时当你传输的是ASCII值时一般解析肯定会出问题。理由很简单,一个ASCII字符值为8位,如果一帧的数据位为7,那么还有一位就是不确定的值,这样就会出错。

    4、校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。就比如传输“A”(01000001)为例。
    (1)、当为奇数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为1才能满足1的个数为奇数(奇校验)。
    (2)、当为偶数校验:”A”字符的8个bit位中有两个1,那么奇偶校验位为0才能满足1的个数为偶数(偶校验)。
    (3)、此位还可以去除,即不需要奇偶校验位。
    5、停止位:它是一帧数据的结束标志。可以是1bit、1.5bit、2bit的空闲电平。可能大家会觉得很奇怪,怎么会有1.5位~没错,确实有的。所以我在生产此uart信号时用两个波形点来表示一个bit。这个可以不必深究。。。
    6、空闲位:没有数据传输时线路上的电平状态。为逻辑1。
    7、传输方向:即数据是从高位(MSB)开始传输还是从低位(LSB)开始传输。比如传输“A”如果是MSB那么就是01000001(如图-2),如果是LSB那么就是10000010。
    8、uart传输数据顺序:刚开始传输一个起始位,接着传输数据位,接着传输校验位(可不需要此位),最后传输停止位。这样一帧的数据就传输完了。接下来接着像这样一直传送。在这里还要说一个参数。
    9、帧间隔:即传送数据的帧与帧之间的间隔大小,可以以位为计量也可以用时间(知道波特率那么位数和时间可以换算)。比如传送”A”完后,这为一帧数据,再传”B”,那么A与B之间的间隔即为帧间隔。

2.RS232电平与TTL电平的区别

TTL电平

TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑),TTL电平即TTL电路输出的电平,TTL电路的工作电压是5V,它的输出可以是高电平(3.6V)或者低电平(0.3V)。由于电平是一个连续变化的电压范围,为了用这种模拟量的电压来表示数字量的逻辑1和逻辑0,TTL电平规定:

对于输出电路:电压大于等于(≥)2.4V为逻辑1;电压小于等于(≤)0.4V为逻辑0;

对于输入电路:电压大于等于(≥)2.0V为逻辑1;电压小于等于(≤)0.8V为逻辑0;

RS232电平

RS232是美国电子工业协会于1962年发布的串行通信接口标准,RS即Recomend Standard,推荐标准,232为标示号。该标准对串行通信的物理接口及逻辑电平都做了规定。最简单的RS232通信由三条数据线组成,即TxD、RxD和GND。RS232采用负逻辑电平,即-15V-3V代表逻辑"1",+3V+15V代表逻辑"0"。这里的电平,是TxD线(或者RxD线)相对于GND的电压。

  • TTL电平和RS232电平,无论是在电压范围还是在极性上(RS232是负逻辑)都有很大的不同。显然,这两种电平是不能直接相连的。为了把单片机的TTL电平转换成RS232电平,通常我们需要一个专用的转换芯片,比如SP3232。

  • RS232是工业上常用的串口标准,无论是PLC的RS232串口模块,还是工控机的串口(COM),输出的电平都称为RS232电平。同时我们知道这些模块的内部控制单元都是单片机,其电平为TTL电平。

二.创建项目

  • 选择new project from a MCU ,新建项目,选择自己的芯片,点击start project。

在这里插入图片描述

  • 选择USERT1,Mode选择Asynchronous,设置波特率为115200、数据长度、无校验位,1位停止位。

在这里插入图片描述

  • 配置项目名称,地址,Application Structure选中basic,Toolchain/IDE选择自己的MDK版本,Code Generator中勾选生成对应.c和.h文件,最后生成代码。
    在这里插入图片描述
    在这里插入图片描述

完善项目代码

在main.c文件的weile函数中添加如下代码:

char data[]="hello windows!\n";

		HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xffff);
	
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
		
		HAL_Delay(100);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
		HAL_Delay(900);

在这里插入图片描述
配置debug
在这里插入图片描述
build之后开始编译,打开UART#1
在这里插入图片描述

效果

在这里插入图片描述
在这里插入图片描述

总结

了解了串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解了"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。
对于使用STM32CubeMX的使用更加熟悉。

参考

https://blog.csdn.net/ssj925319/article/details/111984002
https://blog.csdn.net/vic_to_ry/article/details/110451036

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值