目录
(一)RS-232与TTL区别和USB/TTL转232"的工作原理
串口通讯
串口通讯 (Serial Communication)是一种设备间非常常用的串行通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。 通讯协议,我们以分层的方式来理解,最基本的是把它分为物理层和协议层。物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
1.RS-232与TTL电平区别
RS-232
是现在主流的串行通信接口之一。具有信号线少、灵活的波特率选择、采用负逻辑传送等特点。
同时不足之处主要有以下四点:
1.接口的信号电平值较高,易损坏接口电路的芯片。RS232接口任何一条信号线的电压均为负逻辑关系。即:逻辑“1”为-3— -15V;逻辑“0”:+3— +15V ,噪声容限为2V。即要求接收器能识别高于+3V的信号作为逻辑“0”,低于-3V的信号作为逻辑“1”,TTL电平为5V为逻辑正,0为逻辑负 。与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。
2.传输速率较低,在异步传输时,比特率为20Kbps;因此在51CPLD开发板中,综合程序波特率只能采用19200,也是这个原因。
3.接口使用一根信号线和一根信号返回线与地线构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
4.传输距离有限,最大传输距离标准值为50英尺。
1 载波检测 DCD
2 接收数据 RXD
3 发送数据 TXD
4 数据终端准备好 DTR
5 信号地 SG
6 数据准备好 DSR
7 请求发送 RTS
8 清除发送 CTS
9 振铃提示
具体区别
1.TTL电平标准
输出 L: 《0.8V ; H:》2.4V。
输入 L: 《1.2V ; H:》2.0V
RS232标准
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V
-TTL电平信号之所以被广泛使用,原因是因为:通常我们采用二进制来表示数据。而且规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。这是计算机处理器控制的设备内部各部分之间通信的标准技术。
RS232是个人计算机上的通讯接口之一,通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25)的形态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和
COM2。RS232的电平标准为+12V为逻辑负,-12为逻辑正,TTL电平为5V为逻辑正,0为逻辑负。
2.USB转串口原理
USB主机检测到USB转串口设备插入后,首先会对设备复位,然后开始USB枚举过程。USB枚举时过程会获取设备描述符、配置描述符、接口描述符等。描述符中会包含USB设备的厂商ID,设备ID和Class类别等信息。操作系统会根据该信息为设备匹配相应的USB设备驱动。
USB虚拟串口的实现在系统上依赖于USB转串口驱动,一般由厂家直接提供,也可以使用操作系统自带的CDC类串口驱动等。驱动主要分为2个功能,其一注册USB设备驱动,完成对USB设备的控制与数据通讯,其二注册串口驱动,为串口应用层提供相应的实现方法。
(二)LED点灯实验
1.cubeMX项目设置
在part name里选择自己的芯片start project:
我的为STM32F103ZE
点击system core,SYS,在debug下选择serial wire:
时钟设置
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上:
点击相应的引脚设置输出三个,是PA4,PB9,PA0:
项目完成创建
配置好自己的路径和项目名,IDE那项改为MDK-ARM:
2.keil中编译项目
CubeMX中code generate选择生成初始化.c/.h文件后点击generate code,选择open project
系统自动打开keil
main函数 代码逻辑
SystemClock_Config();//系统时钟初始化
MX_GPIO_Init();//gpio初始化
while (1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);//PA4亮灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PA0熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);//PCA0熄灯
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);//PA4熄灯
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);//PA0亮灯
HAL_Delay(1000);//延时1s
}
build debug
运行效果如下
(三)USART串口通讯实验
USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。USART支持同步单向通信和半双工单线通信;还支持局域互连网络 LIN、智能卡(SmartCard)协议与 lrDA(红外线数据协会) SIR ENDEC规范。
USART支持使用 DMA,可实现高速数据通信。
1.CubeMX中创建新项目
选择自己的型号
RCC和USART1配置
RCC:
USART1:
项目设置
项目名、项目存放路径、使用编辑器等
Code Generate配置并生成项目:
2.keil完善代码
main函数while循环前添加
char data[] = "\nHello windows!\n";
while循环中:
HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xFFFF);
HAL_Delay(1000);
–
烧录到板中并开启串口
结果
使用野火多功能调试助手
补充:(二)-2 观察LED使用GPIO端口的输出波形
打开LED_1实验项目
1.debug设置-使用软件仿真
2.debug
选择逻辑分析
输入自己的接口 我的为A0 A4 B9
在Signal Display中修改为Bit
运行显示波形
小结
初步了解了嵌入式系统中对串口的利用和串口通信的原理,提高了对嵌入式以及STM32的学习兴趣。