串口通信小试牛刀
嵌入式系统第6周作业2(暨第7周实验)一. 了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。 二. 安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务: 1、重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。 2、完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求: 1)设置波特率为115200,1位停止位,无校验位; 2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。 三. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。
目录
一、串口通信协议:RS-232
1.串口通信协议
串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。
2. RS-232
RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。1
RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。
3.RS232电平与TTL电平的区别
-
TTL电平标准:
- 输出L:<0.8V;H:>2.4V。
- 输入L:<1.2V;H:>2.0V。
- TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。
-
RS232标准:
- 逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。RS232可做到双向传输,全双工通讯,为异步数据传输方式,最高传输速率可达到20Kbps。
-
RS232电平与TTL电平的区别:
- 电平的上限和下限定义不一样,CMOS具有更大的抗噪区域。 同是5伏供电的话,ttl一般是1.7V和3.5V的样子,CMOS一般是2.2V,2.9V的样子,不准确,仅供参考。
- 电流驱动能力不一样,ttl一般提供25毫安的驱动能力,而CMOS一般在10毫安左右。
- 需要的电流输入大小也不一样,一般ttl需要2.5毫安左右,CMOS几乎不需要电流输入。
- 很多器件都是兼容TTL和CMOS的,datasheet会有说明。如果不考虑速度和性能,一般器件可以互换。但是需要注意有时候负载效应可能引起电路工作不正常,因为有些ttl电路需要下一级的输入阻抗作为负载才能正常工作。
4.USB/TTL转232模块(以CH340芯片模块为例)的工作原理
1.模块介绍
-
模块特点
CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。- 全速USB驱动,兼容USB2.0
- 硬件全双工串口,内置收发缓冲区
- 支持波特率50bps~2Mbps
- 输出TTL电平3.3V,兼容5V的IO电平
-
模块接口引脚
Symbol(符号) | Type (类型) | Deion(描述) |
---|---|---|
TXD | 输出 | 串行数据输出口 |
RXD | 输入 | 串行数据输出口 |
GND | 电源 | 接地引脚 |
3V3 | 电源 | 3.3V电源输出引脚(最高250mA) |
5V | 电源 | 3.3V电源输出引脚(最高250mA) |
DTS | 输出 | MODEM联络输出信号,请求发送 |
DTR | 输出 | MODEM联络输出信号,数据终端就绪 |
输入输出接口引脚均带有LED指示灯
电源接口引脚中,5V的接口引脚带有LED指示灯
2.模块用途
电脑USB端是USB电平,单片机的信号是TTL电平,两者的电平不同是无法进行通讯的,需要通过转换才能实现相互通讯。CH340C USB 转TTL模块就是实现USB电平与TTL电平相互转换的模块。
- USB:采用VCC、GND、D+、D-传输,电脑上的插口就是USB接口。
- TTL:一般指单片机的逻辑电平,不同单片的供电的系统TTL的电平不一样,3.3V单片的TTL电平就是:高电平3.3V(逻辑1),低电平0V(逻辑0)。
- 单片机与上位机的通讯
在调试单片机程序的时候,想了解程序的执行情况或相关信息,一般简单的做法就是用串口把信息发送给电脑,电脑接收到再通过上位机(串口调试助手)显示出来。但是单片机串口发送的信号是TTL电平,电脑能接收到的信号是USB电平,两者无法直接通讯。USB转TTL模块可以把串口发送的TTL信号转换成USB信号再发送给电脑,电脑就可以接收到单片机发送过来的信号并在上位机(串口调试助手)上显示出来。 - 单片机的ISP串口程序下载
大部分单片机都可以使用串口的方式通过相应的上位机软件来下载程序,但是电脑的USB出来的信号是USB信号,单片机是无法识别USB信号的,需要通过USB转TTL模块把USB信号转换成TTL信号才能将程序下载到单片机中。 - MODEMD的固件升级
有些MODEM可以使用串口升级固件,在模块中也引出了RTS,DTR两个MODEM信号输出接口,并带有相应的指示灯指示状态。
3.硬件设计
硬件电路设计主要介绍以CH340C芯片为核心,设计出一个USB转TTL的模块(也就是该模块)。主要包括电源的设计、功能的设计等,其中选用的器件规格型号可以参考产品手册的BOM表。- CH340C芯片引脚功能表
引脚序号 | 引脚名称 | 类型 | 引脚说明 |
---|---|---|---|
1 | GND | 电源 | 公共接地端,直接连到USB总线的地线 |
3 | RXD | 输入 | 串行数据输入 |
4 | V3 | 电源 | 在3.3V电源电源电压时连接VCC输入外部电源 ; 在5V电源电压时外接容量为0.1uF退藕电容 |
5 | D+ | USB信号 | 直接连接到USB总线的D+数据线 |
6 | D- | USB信号 | 直接连接到USB总线的D-数据线 |
7 | XI | 输入 | CH340C内部自带晶振,必须悬空 |
8 | XO | 输出 | CH340C内部自带晶振,必须悬空 |
9 | CTS# | 输入 | MODEM联络输入信号,清除发送,低(高)有效 |
10 | 输入 | 输入 | MODEM联络输入信号,数据装置就绪,低(高)有效 |
11 | RI# | 输入 | MODEM联络输入信号,振铃提示,低(高)有效 |
12 | DCD# | 输入 | MODEM联络输入信号,载波检测,低(高)有效 |
13 | DCD# | 输出 | MODEM联络输入信号,数据终端就绪,低(高)有效 |
14 | RTS# | 输出 | MODEM联络输入信号,请求发送,低(高)有效 |
15 | R232 | 电源 | 辅助RS232使能,高有效,内置下拉 |
16 | VCC | 电源 | 正电源输入端,需外接0.1uF电源退藕电容 |
- 模块的电源设计
- 在CH340C的引脚功能表中红色部分是电源相关的引脚。对于不同电压供电系统的TTL电平是不一样的,大部分的系统是5V或3.3V供电。一般5V的系统是兼容3.3V的TTL电平的,但是3.3V系统是不兼容5V的。为了是能兼容3.3V与5V的系统,模块的电源使用3.3V电源供电。
- 电脑的USB接口电源输出时5V,最大电流是500mA,在电路中为了防止意外的误操作,在5V的电源端加了一个0.5A,6V的保险丝F1,当电压超过6V或电流超过0.5A保险丝就会断开对电路进行保护。
- USB输出的电压是5V,而CH340C的芯片采用3.3V供电,为了使模块的供电为3.3V,在电路中加入了一个LDO(低压差线性稳压器)U2,它可以把5V稳压成3.3V,然后对CH340C进行供电(根据手册要求V3引脚也要接3.3V的电源)。每一个电源的输入端都会加上一个0.1uF的滤波电容。
在模块引出的接口中: - 5V:USB的电源输出,电压为5V,电流最大可达500mA
- 3V3:5V经过LDO稳压后得到的3.3V电压,电流最大可达25mA
- GND:USB的GND
- 模块的USB转TTL电路设计
在CH340C的引脚功能表中蓝色部分是信号相关的引脚,黑色部分的与设计无关的引脚,全部悬空。CH340C芯片的D-,D+与USB的D-,D+连接到一起作为USB电平的信号连接,同时引出TTL电平信号的接口TXD与RXD,还有两个MODEM输出信号接口RTS与DTR。 - 模块的指示灯电路设计
为了检测模块是否通电正常,在5V的输入端设计了一个指示灯LED1(红色),该等亮表示模块已经上电。通讯时需要了解数据的收发情况,在TXD,RXD数据接口中分别接入了LED2(蓝色),LED3(绿色)指示灯。当模块到数据时,RXD的指示灯就会亮;模块发送数据时TXD的指示灯就会亮。另外引出的RTS与DTR信号接口也设计了LED4(黄色),LED5(绿色)指示灯。
因为TXD,RXD,RTS,DTR接口都是从CH340C芯片管脚印出来的,CH340C是3.3V供电,所以设计对应的指示灯的电源应该选择3.3V。TXD与RXD在CH340C中空闲时(没有发生数据传输)是高电平的,对应的指示灯状态时灭的,只有发生数据传输时指示灯才会亮。RTS与DTR接口时CH340C的MODEM输出信号接口,对应的指示灯在用不同的上位机软件它们的亮灭是不确定的。
二、stm32CubeMX的安装
1.配置环境变量
云盘下载:这里使用了这个博客提供的云盘地址
https://blog.csdn.net/Brendon_Tan/article/details/107685563
但是需要Java环境支撑,去官网 https://www.java.com/zh_CN/download/windows-64bit.jsp下载之后遇到了的问题,搜索之后发现中文版的官网只支持32位的下载,这里需要把中文版网址的zh_CN改成en,访问英文版的官网点击download
找到
选择x64的版本
就可以安装STM32CubeMX了。
2.安装STM32CubeMX
- 打开 SetupSTM32CubeMX-6.0.0.exe 文件
- 点击 Next
- 勾选 I accpt,点击 Next
- 勾选第一个,点击 Next
- 可以自己修改安装路径,点击 Next
- Yes
- Next
- Next
- Done
- 成功
但是还需要安装依赖包
完成!
3.初始化代码
- File-New Project
- 之后会在线下载一些东西
- 选择型号STM32F103C8,选中之后点击start project
- System Core-SYS-debug-Serial Wire