【嵌入式基础】串口通信操作实例

这篇具有很好参考价值的文章主要介绍了【嵌入式基础】串口通信操作实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要介绍流水灯实验和串口通信的实验过程,对串口协议和RS-232标准,RS232电平与TTL电平的区别,以及"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理这些知识也有了一定的涉及。

目录

一、了解串口协议以及"USB/TTL转232"模块的工作原理

1、串口协议

2、RS-232标准

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

4、“USB/TTL转232”模块的工作原理

二、基于stm32CubeMX,配合Keil,重做流水灯程序并且实现串口通信

1、重做流水灯程序

 2、完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式)

(1)题目要求

(2)USART概述

(3)实验环境准备

 (4)HAL库实现

3、逻辑分析仪观察时序波形和输出波形

(1)要求

(2)观察GPIO端口输出波形

(3)观察串口输出波形

 三、总结

四、参考文献


一、了解串口协议以及"USB/TTL转232"模块的工作原理

1、串口协议

串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。

按照数据的传输方向,串口通信分为:

  1. 单工:数据传输只支持数据在一个方向上传输;
  2. 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口;
  3. 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。

按照通信方式,分为

  1. 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。
  2. 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。

在同步通信中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通信中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。

在异步通信中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通信中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

总结:在同步通信中,数据信号所传输的内容绝大部分是有效数据,而异步通信中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。

2、RS-232标准

RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。

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


一、主体不同
1、TTL232:晶体管-晶体管逻辑集成电路。
2、RS232:数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准。
二、数字含义不同
1、TTL232:TTL232的0是用0v表示。1是用5V表示。
2、RS232:0是用+3V–+15V表示,1是用-3V—15V表示。
三、传输不同
1、TTL232:是以某个固定的速率去传输的,但是可以传输多个bit
2、RS232:以固定的某个速率(1200bps,9600bps,115200bps等),一次只能只传输一个bit

4、“USB/TTL转232”模块的工作原理

1、模块特点
CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。

  1. 全速USB驱动,兼容USB2.0
  2. 硬件全双工串口,内置收发缓冲区
  3. 支持波特率50bps~2Mbps
  4. 输出TTL电平3.3V,兼容5V的IO电平

2、模块接口引脚 

【嵌入式基础】串口通信操作实例

 3、模块用途

电脑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信号再发送给电脑,电脑就可以接收到单片机发送过来的信号并在上位机(串口调试助手)上显示出来。
4、硬件介绍

【嵌入式基础】串口通信操作实例

 文章来源地址https://www.toymoban.com/news/detail-427484.html

在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的滤波电容。
 

模块的USB转TTL电路设计

在CH340C的引脚功能表中蓝色部分是信号相关的引脚,黑色部分的与设计无关的引脚,全部悬空。CH340C芯片的D-,D+与USB的D-,D+连接到一起作为USB电平的信号连接,同时引出TTL电平信号的接口TXD与RXD,还有两个MODEM输出信号接口RTS与DTR。

二、基于stm32CubeMX,配合Keil,重做流水灯程序并且实现串口通信

1、重做流水灯程序

可以参考之前的博客内容,改变一下引脚位置,重做LED流水灯:https://blog.csdn.net/Xicun1984/article/details/127308398?spm=1001.2014.3001.5502

 这里简单描述一下基于HAL库的流水灯实验:

当我们在HAL库中将所有的基础配置设置好之后,点击生成工程,打开Keil文件,找到主函数的位置,将主函数的while循环部分改为这次的设置好的引脚代码:

	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
	  HAL_Delay(1000);
 
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
	  HAL_Delay(1000);
	  
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);
	  HAL_Delay(1000);

接下来编译,烧录到STM32芯片之中

【嵌入式基础】串口通信操作实例

 流水灯点亮情况:

【嵌入式基础】串口通信操作实例

 2、完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式)

(1)题目要求

完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:

1)设置波特率为115200,1位停止位,无校验位;

2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

(2)USART概述

通用同步/异步串行接收/发送器
USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。

主要特点如下:

  1. 全双工操作(相互独立的接收数据和发送数据);
  2. 同步操作时,可主机时钟同步,也可从机时钟同步;
  3. 独立的高精度波特率发生器,不占用定时/计数器;
  4. 支持5、6、7、8和9位数据位,1或2位停止位的串行数据帧结构;
  5. 由硬件支持的奇偶校验位发生和检验;
  6. 数据溢出检测;
  7. 帧错误检测;
  8. 包括错误起始位的检测噪声滤波器和数字低通滤波器;
  9. 三个完全独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;
  10. 支持多机通信模式;
  11. 支持倍速异步通信模式。

 USART配置

STM32在只有一个中断的情况下,仍然需要配置优先级,其作用是使能某条中断的触发通道。STM32的中断有至多两个层次,分别是抢占优先级(主优先级)和子优先级(从优先级),而整个优先级设置参数的长度为4位,因此需要首先划分抢占优先级位数和子优先级位数,通过NVIC_PriorityGroupConfig()实现;
特定设备的中断优先级NVIC的属性包含在结构体NVIC_InitTypeDef中,其中字段NVIC_IRQChannel包含了设备的中断向量,保存在启动代码中;字段NVIC_IRQChannelPreemptionPriority为主优先级,NVIC_IRQChannelSubPriority为从优先级,取值的范围应根据位数划分的情况而定;最后NVIC_IRQChannelCmd字段是是否使能,一般置为ENABLE。最后通过NVIC_Init()来使能这一中断向量。

(3)实验环境准备

STM32F103C8T6最小核心板
USB转TTL
CH340驱动(USB串口驱动)_XP_WIN7共用
串口调试助手flymcu

【嵌入式基础】串口通信操作实例

【嵌入式基础】串口通信操作实例

 (4)HAL库实现

1、打开STM32CubeMX,选择新建工程:

【嵌入式基础】串口通信操作实例

 选择芯片STM32F103C8,启动工程

【嵌入式基础】串口通信操作实例

 System Core-RCC-High Speed Clock-Crystal/Ceramic Resonator

【嵌入式基础】串口通信操作实例

 A->Z-USART1-Asynchronous

 【嵌入式基础】串口通信操作实例

 接下来在Clock Condigiguration中勾选PLLCLK:

【嵌入式基础】串口通信操作实例

 新建文件名

【嵌入式基础】串口通信操作实例

 【嵌入式基础】串口通信操作实例

 接下来就是生成代码,并且打开文件夹和Keil文件

【嵌入式基础】串口通信操作实例

 找到并打开main.c函数,打开,将以下的代码添加到while循环之中:

char data[]="hello windows!\n";
HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xffff);
HAL_Delay(1000);

【嵌入式基础】串口通信操作实例

 编译运行生成hex文件:

【嵌入式基础】串口通信操作实例

 借用flymcu烧录运行:

【嵌入式基础】串口通信操作实例

 调试结果:

【嵌入式基础】串口通信操作实例

 说明代码运行成功,实现了串口通信。

3、逻辑分析仪观察时序波形和输出波形

(1)要求

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

(2)观察GPIO端口输出波形

打开LED流水灯的keil文件,进行仿真设置

点击“魔方棒”,打开工程设置,在debug中修改以下设置。

【嵌入式基础】串口通信操作实例

 设置完成后,开启调试模式,打开逻辑分析仪

【嵌入式基础】串口通信操作实例

打开逻辑分析仪之后在左下角命令行输入dir vtreg命令,查看有哪些引脚可以被检测。

【嵌入式基础】串口通信操作实例

 接下来在逻辑分析仪中添加要观察的引脚端口,可以使用上述方法找到并添加,本文推荐下面的方法,直接以 PORTX >> X 的形式输入,内容取决于代码中定义的管脚:

【嵌入式基础】串口通信操作实例

 注意设置Display Type类型为Bit,颜色设置按照自己喜欢。

运行程序一段时间,当逻辑分析仪上呈现出明显的波形时,停止运行:

【嵌入式基础】串口通信操作实例

 根据实验结果可得:每次变化时间基本接近1s,与预设时间差不多。

(3)观察串口输出波形

打开串口通信keil文件

设置仿真环境:

【嵌入式基础】串口通信操作实例

 添加端口

【嵌入式基础】串口通信操作实例

全速运行一段时间后停止,得到以下的波形图。

【嵌入式基础】串口通信操作实例 观察每次变化的时间,其实只有0.92s,并没有实际定义的1000ms。

 三、总结

这次实验综合学习了流水灯实验和串口通信,对串口协议和RS-232标准,RS232电平与TTL电平的区别,以及"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理这些知识也有了一定的了解,而且我发现HAL库提供的可视化界面大大提高了编程效率,无需再利用代码去配置管脚了,效果很好,受益匪浅。

四、参考文献

https://blog.csdn.net/zjszd/article/details/120933702
https://blog.csdn.net/junseven164/article/details/120807138
https://blog.csdn.net/as480133937/article/details/98885316
https://blog.csdn.net/as480133937/article/details/98947162
https://blog.csdn.net/vic_to_ry/article/details/110451036

 

到了这里,关于【嵌入式基础】串口通信操作实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式学习-STM32F103-USART串口通信】

    4-1 基本流程 4-2 整体代码 4-2-1 main.c 4-2-2 Serial.c 4-2-3 Serial.h 5-1 查询 5-2 中断 5-3 整体代码 5-3-1 main.c 5-3-2 Serial.c 5-3-3 Serial.h 6-1 使用状态机接收数据包的思路 6-2 串口收发HEX数据包 6-2-1 main.c 6-2-2 Serial.c 6-2-3 Serial.h 6-3串口收发文本数据包 6-3-1 main.c 6-3-2 Serial.c 6-3-3 Serial.h 全双工:打

    2024年02月15日
    浏览(61)
  • 嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信

    大概学完这三种通信后,之后就先去学系统移植,其他的先暂时放下 串口全称叫做串行接口,通常也叫做 COM 接口。 UART:(Universal Asynchronous Receiver/Trasmitter)通用异步串行收发器。 USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行收发器,相比 UART多了

    2024年02月07日
    浏览(78)
  • 【嵌入式知识08】STM32的USART串口通信,给上位机连续发送Hello Windows!

    本文主要介绍串口协议和RS-232、485标准,以及RS232、485电平与TTL电平的区别,了解\\\"USB/TTL转232\\\"模块的工作原理;并完成一个STM32的USART串口通讯程序。   串口通信(Serial Communication)的概念非常简单,串口按位(bit)发送和接收字节的通信方式。尽管比按字节(byte)的并行通信

    2024年02月13日
    浏览(50)
  • 【嵌入式学习】网络通信基础-项目篇:简单UDP聊天室

    源码已在GitHub开源:0clock/LearnEmbed-projects/chat 客户端功能: 上线发送登录的用户名[yes] 发送消息和接收消息[yes] quit退出 服务器端功能: 统计用户上线信息,放入链表中[yes] 接收用户信息并给其他用户发送消息[yes] 服务器也支持给所有用户群发消息[yes] 接收下线提醒

    2024年01月25日
    浏览(62)
  • BL302嵌入式ARM控制器进行SQLite3数据库操作的实例演示

    本文主要讲述了在钡铼技术BL302嵌入式arm控制器上运行 SQLite3 数据库的命令示例。SQLite3 是一个轻型的嵌入式数据库,不需要安装数据库服务器进程,占用资源低且处理速度快。 首先,需要将对应版本的 SQLite3 文件复制到设备的 /usr/ 目录下,并解压缩。然后进入 /usr/lib 目录,

    2024年02月14日
    浏览(48)
  • 嵌入式系统设计师考试笔记之操作系统基础复习笔记二

    目录 3、任务管理 (1)嵌入式操作系统的任务管理可以分为 (2)进程 (3)线程 (4)任务 (5)任务的创建与中止 (6)任务的状态任务有三中基本状态: (7)任务控制块 TCB (8)任务的切换 (9)任务的调度 (10)实时系统调度 (11)任务互斥 (12)信号量 (13)任务同

    2024年02月08日
    浏览(54)
  • 嵌入式Linux应用开发笔记:串口

    串口(UART)是嵌入式设备中比较常用的功能。这篇文章将记录下应用程序中串口操作相关内容。 这篇文章中内容均在下面的开发板上进行测试: 《新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)》 这篇文章是在下面文章基础上进行的: 《新唐NUC980使用记录(5.10.y内核)

    2024年02月09日
    浏览(50)
  • 嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)

    目录 前言 一、sqlite概念和特性 二、sqlite安装 三、sqlite3数据类型  四、sqlite数据库约束 五、sqlite常用命令  六、SQL语句(增删改查) 七、sqlite使用实例(教学管理数据库) 总结 数据在实际工作中应用非常广泛,数据库的产品也比较多,oracle、DB2、SQL2000、mySQL;基于嵌入式

    2024年02月08日
    浏览(55)
  • AI嵌入式K210项目(5)-串口通讯

    串口通讯是平时大家进行调试最常用的方法,嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART)即可以满足这些要求,它能够灵活地与外部设备进行全双工数据交换,那么本章我们来了解下,本节课主要学习K210的串口通讯。 串

    2024年01月16日
    浏览(60)
  • 嵌入式Linux开发实操(八):UART串口开发

    串口可以说是非常好用的一个接口,它同USB、CAN、I2C、SPI等接口一样,为SOC/MCU构建了丰富的接口功能。那么在嵌入式linux中又是如何搭建和使用UART接口的呢? 一、Console接口即ttyS0 ttyS0通常做为u-boot(bootloader的一种,像是Windows的BIOS),它需要一个交互界面,一般使用ttyS0,即可

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包