目录

一、原理介绍

1.串口协议

2.常用协议标准

1)RS-232

2)RS-485

3.RS232、485电平与TTL电平的区别

1)RS232电平

2)RS485电平

3)TTL电平

4)RS232、485电平与TTL电平的区别

3.USB转串口

1)基本原理

2)芯片简介

3)工作原理

二、串口通信操作

1.驱动下载

2.程序编写

1)源程序

2)编译运行

3)烧录结果

三、总结


一、原理介绍

1.串口协议

串口是显控设备与信号处理板之间通信的主要接口,也是显控设备与其他设备、设备与设备之间的协议数据帧通信传输的重要接口。串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。串口通信协议是基于串口使得通信双方能够相互沟通信息的一种约定,其定义了双方遵循的协议数据帧格式和其传输方式。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。

2.常用协议标准

1)RS-232

RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。

2)RS-485

RS-485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。有了多个设备的能力,你可以使用一个单个RS-485口建立设备网络。出色抗噪和多设备能力,在工业应用中建立连向PC机的分布式设备网络、其他数据收集控制器、HMI或者其他操作时,串行连接会选择RS-485。RS-485是RS-422的超集,因此所有的RS-422设备可以被RS-485控制。RS-485可以用超过4000英尺的线进行串行通行。

3.RS232、485电平与TTL电平的区别

1)RS232电平

在RS-232-C中任何一条信号线的电压均为负逻辑关系。即:逻辑“1”为-3到-15V;逻辑“0”为+3到+15V。
RS-232-C接口连接器一般使用型号为DB-9插头座,通常插头在DCE端,插座在DTE端。PC机的RS-232口为9芯针插座。一些设备与PC机连接的RS-232接口,因为不使用对方的传送控制信号,只需要三条接口线,即“发送数据TXD”、“接收数据RXD”和“信号地GND”。RS-232传输线采用屏蔽双绞线。

2)RS485电平

RS485采用差分信号负逻辑,逻辑"1”以两线间的电压差为-(2~6)V表示;逻辑"0"以两线间的电压差为+(2~6)V表示。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL电路连接。RS-485的数据最高传输速率为10Mbps。

3)TTL电平

TTL电平信号被利用的最多是因为通常数据表示采用二进制规定,+5V等价于逻辑“1”,0V等价于逻辑“0”,这被称做TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标准技术。

4)RS232、485电平与TTL电平的区别

  1. RS232、RS485、TTL是指电平标准(电信号)
  2. TTL电平标准 是 低电平为0,高电平为1(对地,标准数字电路逻辑)。
  3. RS232电平标准 是 正电平为0,负电平为1(对地,正负6-15V皆可,甚至可以用高阻态)。
  4. RS485与RS232类似,但是采用差分信号逻辑,更适合长距离、高速传输。

3.USB转串口

1)基本原理

USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备

2)芯片简介

TXD:为了进行适当的通信,发件人(通常是其自己的发件人)必须从另一个装置接收RXD。

RXD:接收端,又称接收端,需要与另一个设备TXD进行正常通信。
在正常通信期间,TXD将永远接收该装置!

自接收:在正常通信期间,RXD从其他设备获得TXD,因此,如果它要用自己的名字接收它传输的数据,也就是说,它自己的TXD与RXD直接相连,而RXD是测试其正常发送和接收的最快和最容易的测试,如果有问题,检验首先要确定产品是否发生故障。

3)工作原理

串口发送
串口应用发送数据->USB串口驱动获取数据->驱动将数据经过USB通道发送给USB串口设备->USB串口设备接收到数据通过串口发送

串口接收
USB串口设备接收串口数据->将串口数据经过USB打包后上传给USB主机->USB串口驱动获取到通过USB上传的串口数据->驱动将数据保存在串口缓冲区提供给串口应用读取

二、串口通信操作

1.驱动下载

USB设备无法被识别需要下载驱动(CP2102 USB to UART Bridge Controller)

官网地址:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers

下载完成后根据自身情况进行驱动程序安装,USB设备九能被识别。

2.程序编写

1)源程序

uart.h

#ifndef __USART_H
#define __USART_H
#include "stm32f10x.h"
#include "stdio.h"
void MyUSART_Init(void);
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
#endif

uart.c

#include "usart.h"
void MyUSART_Init()
{/* 定义GPIO和USART的结构体 */GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* 使能GPIO和USART的时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);/* 将USART TX(A9)的GPIO设置为推挽复用模式 */GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);/* 将USART RX(A10)的GPIO设置为浮空输入模式 */GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;GPIO_Init(GPIOA,&GPIO_InitStructure);/* 配置串口 */USART_InitStructure.USART_BaudRate=115200;                                        //波特率了设置为115200USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;   //不使用硬件流控制USART_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;                      //使能接收和发送USART_InitStructure.USART_Parity=USART_Parity_No;                             //不使用奇偶校验位USART_InitStructure.USART_StopBits=USART_StopBits_1;                         //1位停止位USART_InitStructure.USART_WordLength=USART_WordLength_8b;                       //字长设置为8位USART_Init(USART1, &USART_InitStructure);                                      //初始化串口/* 使能串口 */USART_Cmd(USART1,ENABLE);}/* 发送一个字节 */
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{/* 发送一个字节数据到USART */USART_SendData(pUSARTx,ch);/* 等待发送数据寄存器为空 */while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}/* 发送字符串 */
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{unsigned int k=0;do {Usart_SendByte( pUSARTx, *(str + k) );k++;} while(*(str + k)!='\0');/* 等待发送完成 */while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET){}
}

test5.c

#include "stm32f10x.h"
#include "usart.h"
u16 USART_RX_STA=0;                            //接收状态标记
static u16 fac_ms = 0;
void delay_init(void);
void delay_ms(u16 nms);
int main(void)
{   MyUSART_Init();delay_init();while(1){Usart_SendString( USART1,"hello windows!\r\n");delay_ms(500);}
}void delay_init()
{SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);fac_ms = (u16)(SystemCoreClock/8000);
}void delay_ms(u16 nms)
{                 u32 temp;        SysTick->LOAD=(u32)nms*fac_ms;               //时间加载(SysTick->LOAD为24bit)SysTick->VAL =0x00;                           //清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数  do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));       //等待时间到达   SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器SysTick->VAL =0X00;                          //清空计数器
}

2)编译运行

3)烧录结果

三、总结

通过这次学习对串口通信有了一定的了解,加深了对STM32的使用与理解,在工程建立方面更加得心应手,对串行协议有了基本的认识,烧录运行也得到一定的提升。

串口通信-STM32的USART串口通讯程序相关推荐

  1. STM32的USART串口通讯程序(查询方式)

    STM32的USART串口通讯程序(查询方式) 文章目录 STM32的USART串口通讯程序(查询方式) 一.USART介绍 1.异步通信: 2.同步通信: 二.CubeMX创建项目 1.点击ACCE ...

  2. 在 stm32CubeMX下生成程序完成流水灯以及完成STM32的USART串口通讯程序实现STM32系统给上位机(win10)连续发送“hello windows”

    目录 一.STM32CubeMX简介及安装 二.利用STM32CubeMX生成代码 1.创建项目 2.配置芯片 3.导出项目 ​ 三.Keil中补充代码完善功能 四.在Keil中观察实验波形 五.US ...

  3. 了解串口协议,及完成STM32的USART串口通讯程序,并用keil观察波形

    文章目录 前言 一.串口协议 1.RS-232 2.485标准 二.RS-232.485和TTL电平 1.RS-232电平 2.485 3.TTL电平 4.区别 三.USB/TTL转232 1.CH3 ...

  4. STM32的USART串口通讯程序

    文章目录 一.STM32 USART串口通信 1.串口通信简介 1.1.物理层 1.2.协议层 2.STM32 的 USART 简介 二.STM32的USART串口通讯程序 1.创建项目 2.添加.s ...

  5. STM32的USART串口通信小程序

    文章目录 前言 一.串口协议和RS-232.485标准 1.串口通信协议的概念 2.常用协议 2.1 RS-232 2.2 RS-485 3.RS232.485电平与TTL电平的区别 二.STM32的 ...

  6. 【嵌入式系统开发11】串口通讯“小试牛刀”——完成一个STM32的USART串口通讯程序

    本文目的是主要介绍通过STM32F103C8T6完成一个STM32的USART串口通讯程序,在没有示波器条件下,使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形. 文章目录 前言 (一)需求分析 ...

  7. STM32的USART串口通讯

    STM32的USART串口通讯 STM32的USART串口通讯 一,寄存器与固件库 二,STM32的串口通讯准备工作 三,操作步骤 一,寄存器与固件库 基于寄存器与基于固件库的stm32 LED流水灯 ...

  8. stm32串口通信(初学者对于串口通信的理解)

    stm32串口通信(初学者对于串口通信的理解) 标签: stm32串口通信单片机 2015-01-24 10:12 987人阅读 评论(0) 收藏 举报  分类: stm32 版权声明:本文为博主原创 ...

  9. stm32中断方式的串口通信——上位机控制串口收发

    文章目录 前言 一.什么是串口通信 二.什么是中断--STM32 1.中断的概念 2.STM32下NVIC的介绍 3.中断优先级的介绍 4.外部中断的介绍 三.串口通信keil工程文件 1.新建工程模 ...

最新文章

  1. Object.create()和Object.assign()
  2. 医院管理制度【第一辑】2010年11月12日
  3. java nio 应用场景_BIO、NIO、AIO简述及应用场景
  4. P2831-愤怒的小鸟【状压dp】
  5. 一位跟我一样疑惑的同学~
  6. slow log php,善用php-fpm的慢执行日志slow log,分析php性能问题
  7. Centos7 -bash: ifconfig : command not found
  8. php5.6获取文件名,PHP 5.6:headers_sent间歇性地返回true,空文件名和第0行
  9. InnoDB配置文件复习
  10. 使用select和show命令查看mysql数据库系统信息
  11. url的地址循环怎么写_电子邮件地址怎么写
  12. 5、自写<VBA函数>关于字体与单元格颜色、大小的函数
  13. c语言线性表-顺序表(完整版)
  14. 短视频搬运软件:抖音批量解析下载一个作者所有视频
  15. dot com过时了,个性域名“钱”景看好
  16. 计算机组装配置(CPU 后面的字母 有U,H,Y,HQ,M 怎么区别?)
  17. 数据结构与算法笔记:抽象思维之转换视角,提炼共性(分书和八皇后问题算法重构)
  18. 【程序源代码】微信小程序商城管理系统(Java后台+微信小程序)最新版
  19. vmware虚拟机安装win7_vmware虚拟机中安装mac Catalina10.15
  20. 利用sklearn库决策树模型对iris数据多分类并进行评估

热门文章

  1. Hdu 1247 Hat's Words(Trie树)
  2. Open3D Delaunay三角剖分(三维)
  3. Ecel 粘贴图片并调整大小,移到底层
  4. 那年少年时,你在做什么呢
  5. H.264编码四种画质级别
  6. C#一个DataSet中存入多个DataTable的方法
  7. python中的多态和鸭子模型
  8. excel冻结窗口怎么设置_Excel表格技巧—怎么给表格设置密码
  9. 频率选择性衰落和快衰落有什么区别?
  10. 充分挖掘信访大数据的价值