文章目录
前言一、串口协议1.RS-2322.485标准二、RS-232、485和TTL电平1.RS-232电平2.4853.TTL电平4.区别三、USB/TTL转2321.CH3402.发送接收3.USB转RS-232四、完成一个STM32的USART串口通讯程序1.题目要求2.准备工作3.CH340驱动安装五、实验过程及结果1.创建工程2.程序写入及编译3.Stm32最小核心板运行3.1 用flymcu进行烧录3.2 用串口调试助手查看六、用Keil观察串口波形1.环境搭建2.波形分析总结前言
此文章主要了解:
1、串口协议和RS-232、485标准,以及RS232、485电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理
2、完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:
1)设置波特率为115200,1位停止位,无校验位;
2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
三. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。
一、串口协议
串口是显控设备与信号处理板之间通信的主要接口,也是显控设备与其他设备、设备与设备之间的协议数据帧通信传输的重要接口。
串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。串口通信协议是基于串口使得通信双方能够相互沟通信息的一种约定,其定义了双方遵循的协议数据帧格式和其传输方式。
在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
1.RS-232
RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(Electronic Industry Association,EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。
在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯。RS-232-C接口(又称EIARS-232-C)是目前最常用的一种串行通讯接口。(“RS-232-C”中的“-C”只不过表示RS-232的版本,所以与“RS-232”简称是一样的)。
2.485标准
智能仪表随着80年代初单片机技术的成熟而发展起来,世界仪表市场基本被智能仪表所垄断,这归结于企业信息化的需要,而企业在仪表选型时其中的一个必要条件就是要具有联网通信接口。最初是数据模拟信号输出简单过程量,后来仪表接口是RS232接口,这种接口可以实现点对点的通信方式,但这种方式不能实现联网功能,随后出现的RS485解决了这个问题。
RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。
RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。
RS-485标准专门弥补RS-232通讯距离短、速率低等缺点而产生。RS-485标准只规定了平衡发送器和接收器的特性。而没有规定接插件、传输电缆和应用层通讯协议。 RS-485有两线制和四线制两种接线,四线制只能实现点对点的通讯方式,现很少采用,多采用两线制接线方式。这种接线方式为总线式拓朴结构在同一总线上最多可以挂线32–128个结点。在RS-485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。通讯协议采用按照设备地址查询的方式,其通讯的效率很低,不适合高速传输系统。一般速率不超过19200bps。波特率为9600Bps、1200Bps。RS-485标准的最大传输距离约为1219米,最大传输速率为10Mbps。
二、RS-232、485和TTL电平
1.RS-232电平
和串口一样,每一个byte,都有起始位和停止位。起始位1,停止位0,但注意是反逻辑。每个byte,是从低位向高位逐位传输,也就是LSB先传,依次传输到MSB。
全双工(逻辑1:-15V–5V 逻辑0:+3V–+15V)。是电子工业协会制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应“0”,-3V~-15V对应“1”。RS232 的逻辑电平和TTL 不一样但是协议是一样的。
2.485
RS485:A,B信号之间正电平在+2+6V表示“0”;A,B信号之间负电平在-2-6V表示“1”;使能端起作用和其他状态时为高阻态
RS485:半双工这里的电平指AB两线间的电压差。RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,即通过AB两根线的电压差作为电平信号。差分信号能有效地抵御外界因素的干扰,因为干扰对两根线影响是一样的,两根线的电压差不变,信号传递也就不会受干扰。与TTL、RS232只能一对一连接不同,RS-485在总线上是允许连接多达128个收发器。
3.TTL电平
TTL:输出高电平>2.4V,低电平<0.4V;输入高电平>=2.0V,输入低电平<=0.8V,噪声容限是0.4V。
TTL :全双工 (5V系统,逻辑1: 2.4V–5V 逻辑0: 0V–0.5V)。TTL指双极型三极管逻辑电路,市面上很多“USB转TTL”模块,实际上是“USB转TTL电平的串口”模块。这种信号0对应0V,1对应3.3V或者5V,与单片机、SOC的IO电平兼容。我们进行串口通信的时候从单片机直接出来的基本上都是TTL电平。
4.区别
RS232、RS485、TTL是指电平标准(电信号)TTL电平标准 是 低电平为0,高电平为1(对地,标准数字电路逻辑)。RS232电平标准 是 正电平为0,负电平为1(对地,正负6-15V皆可,甚至可以用高阻态)。RS485与RS232类似,但是采用差分信号逻辑,更适合长距离、高速传输。三、USB/TTL转232
这里我们以CH340为例
1.CH340
CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。
在串口方式下,CH340 提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB 总线。在红外方式下,CH340 外加红外收发器即可构成USB 红外线适配器,实现SIR 红外线通讯。
USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备
2.发送接收
串口发送
串口应用发送数据->USB串口驱动获取数据->驱动将数据经过USB通道发送给USB串口设备->USB串口设备接收到数据通过串口发送
串口接收
USB串口设备接收串口数据->将串口数据经过USB打包后上传给USB主机->USB串口驱动获取到通过USB上传的串口数据->驱动将数据保存在串口缓冲区提供给串口应用读取
3.USB转RS-232
USB转串口模块可以使用5V、3V3电压供电,需要将跳线帽进行安装。
可以对USB转串口模块进行测试,将USB的电压引脚用跳帽接上,然后将RXD和TXD两个引脚用跳帽或者杜邦线接上。然后打开串口终端,点击“手动发送”或者“自动发送”,如果在接收区可以接收到数据,说明USB转串口模块工作正常,否则需要检查接线是否正确、电路板元器件是否损坏。
VCC接线是为了单片机供电,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串口的TXD引脚与单片机的RXD引脚相连,两者的GND引脚直接相连。
四、完成一个STM32的USART串口通讯程序
1.题目要求
设置波特率为115200,1位停止位,无校验位;STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。2.准备工作
硬件准备
STM32F103C8T6最小核心板
USB转TTL
软件准备
CH340驱动
串口调试助手
Keil uVision5
3.CH340驱动安装
点开从网上找到的exe文件,进行安装。
点击安装,显示驱动安装成功(如果安装失败,可能是以前安装过,点击卸载后在安装就可以了)
驱动安装成功后,我们即可将STM32核心板和USB连线,然后插上电脑
转接口选择:GND、RXD、TXD、3V3
STM32核心板选取端口:GND、3v3、A9、A10
对应连接:GND-GND;3V3-3V3;RXD-A9;TXD-A10
五、实验过程及结果
1.创建工程
这里我们选择用STM32CubeMx来创建工程
点开STM32CubeMx,然后点击ACCESS TO MCU SELECTOR
选择STM32F103C8,然后点击Start Project
选择Connectivity下的USART1,然后Mode选择Asynchronous.
然后选择NVIC Settings,勾选Enabled
点开Project Manager下的Project,选择自己的名字和路径,然后将IDE改成MDK-ARM,后面改成V5
然后点击Code Generator,如下进行勾选,然后点击右上角的GENERATE CODE
2.程序写入及编译
在STM32CubeMx中选择open project则会跳到keil,我们将在keil中写入代码
在main.c程序文件中的定义后,新加一句定义需要给上位机发送的消息
uint8_t hello[20]="hello windows!\n"
;
然后在main.c中定义一个延时函数,来设置发送的时间间隔
void Delay_wxc( volatile unsigned int t){unsigned int i;while(t--)for (i=0;i<800;i++);}
在main函数中的while循环中调用查询,并调用延时函数
while (1){HAL_UART_Transmit(&huart1,hello,20,100000);Delay_wxc(3500); //这里每个人电脑不一样发送的间隔时延需要自己调整尝试/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}
这些都弄完后,即可进行编译
这里编译完成,0 error和0 warning
如果发现出现
*** Target ‘chuankou’ uses ARM-Compiler ‘Default Compiler Version 5’ which is not available.
*** Please review the installed ARM Compiler Versions:
‘Manage Project Items - Folders/Extensions’ to manage ARM Compiler Versions.
‘Options for Target - Target’ to select an ARM Compiler Version for the target.
*** Rebuild aborted.
则是需要点开小魔法棒,将ARM Compiler改成V6.18即可成功编译
3.Stm32最小核心板运行
3.1 用flymcu进行烧录
先将板子按照上面连接好,插上电脑,然后打开flymcu
选择之前编译后生成的hex文件,然后搜索串口找到我们的串口
然后将STM32最小核心板上的boot0置1,boot1置0
然后按下板子上的复位按钮,点击flymcu的开始编程
3.2 用串口调试助手查看
将booto和boot1重新置为0,然后按下复位按钮
打开串口调试助手,查看环境
点击打开串口,即可收到“hello windows!",运行结果正确
六、用Keil观察串口波形
1.环境搭建
点击小魔法棒,找到debug,在下面勾选Use Simlator和Run to main(),然后将两个Dialog Dll分别改成DARMSTM.DLL和TARMSTIM.DLL,然后将两者后面的Parameter改成-pSTM32F103C8
.
环境搭建完成后,点击调试按钮,然后选择逻辑分析仪。
逻辑分析仪窗口跳出来后,点击Set up,然后点击右上角红叉旁边的正方形
添加一个USART1_SR的地址,然后将模式改为git,最后点击close(只有点了close才会保存)
2.波形分析
点击run按钮或者按F5
我们在一个间隔里放一个参照,在下一个地方观察
发现低电平持续时间约为86.875 us
同时观察到高电平持续时间约为3.5 us
重做上一个LED流水灯作业,直接按照上一个博客一步一步做即可
上一次博客
总结
此文章主要了解了一些串口协议和RS-232、485标准,以及RS232、485电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理,并依靠STM32cubemx完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。并使用keil观察波形。
参考链接:
/ssj925319/article/details/111984002
/vic_to_ry/article/details/110451036
/qq_43279579/article/details/112233696
/qq_43279579/article/details/112213196
如果觉得《了解串口协议 及完成STM32的USART串口通讯程序 并用keil观察波形》对你有帮助,请点赞、收藏,并留下你的观点哦!