重庆交通大学信息科学与工程学院
《嵌入式系统基础 A》课程
实验报告
**班 级: 物联网工程 2101 **
**姓名-学号 : 江欣朋-632007060322 **
实验项目名称: STM32 简单串口通信
**实验项目性质: 设计性 **
**实验所属课程: 《嵌入式系统基础 A》 **
**实验室(中心): 南岸校区语音大楼 **
**指 导 教 师 : 娄路 **
完成时间: 2023 年 11 月 2 日
一、实验内容和任务
1.了解串口协议和 RS-232 标准,以及 RS232 电平与 TTL 电平的区别;了解"USB/TTL 转 232"模块(以 CH340 芯片模块为例)的工作原理。
2.安装 stm32CubeMX,配合 Keil,使用 HAL 库(或标准库)方式,设置 USART1 波特率为 115200,1 位停止位,无校验位,完成下列任务:1)STM32 系统给上位机(win10)连续发送“hello windows!”。win10 采用“串口助手”工具接收。2)在完成以上任务基础,继续扩展功能:当上位机给 stm32 发送一个字符“#”后,stm32 暂停发送“hello windows!”;发送一个字符“*”后,stm32 继续发送;参考网址:STM32 串口通信 USART 学习笔记https://www.pianshen.com/article/8285571527/基于 MDK 创建 STM32 汇编程序:串口输出 Hello worldhttps://blog.csdn.net/vic_to_ry/article/details/110451036
3.在没有示波器条件下,可以使用 Keil 的软件仿真逻辑分析仪功能观察串口输出波形,并分析时序状态正确与否,计算波特率实际为多少。
参考:https://blog.csdn.net/qq_47281915/article/details/121024427https://blog.csdn.net/qq_47281915/article/details/121053903https://www.cnblogs.com/breezy-ye/articles/12157442.html https://blog.csdn.net/as480133937/article/details/104827639/
二、实验要求
1. 分组要求:每个学生独立完成,即 1 人 1 组。
2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。
3.把项目完整打包为 zip 文件,与实验报告(Markdown 源码及 PDF 文件)、作业博客地址一起提交到学习通。
三. 实验过程介绍 (此处可以填博客内容)
一. 了解串口协议和 RS-232 标准,以及 RS232 电平与 TTL 电平的区别;了解"USB/TTL 转 232"模块(以 CH340 芯片模块为例)的工作原理。
1.)串口协议: 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单、便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通 讯方式输出调试信息。
2.)RS-232: RS-232 标准接口(又称 EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(EIA)联合贝尔系统公司、调制解调厂家及计算机终端生产厂家于 1970 年共同制定,其全名是“数据终端设备( DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。
3.)RS232 电平与 TTL 电平的区别: 1.电平的上限和下限定义不一样,CMOS 具有更大的抗噪区域。 同是 5 伏供电的话,ttl 一般是 1.7V 和 3.5V 的样子,CMOS 一般是 2.2V,2.9V 的样子,不准确,仅供参考。
2.电流驱动能力不一样,ttl 一般提供 25 毫安的驱动能力,而 CMOS 一般在 10 毫安左右。
3.需要的电流输入大小也不一样,一般 ttl 需要 2.5 毫安左右,CMOS 几乎不需要电流输入。
4.很多器件都是兼容 TTL 和 CMOS 的,datasheet 会有说明。如果不考虑速度和性能,一般器件可以互换。但是需要注意有时候负载效应可能引起电路工作不正常,因为有些 ttl 电路需要下一级的输入阻抗作为负载才能正常工作。
5.TTL 电路和 CMOS 电路的逻辑电平 VOH: 逻辑电平 1 的输出电压 VOL: 逻辑电平 0 的输出电压 VIH : 逻辑电平 1 的输入电压 VIH : 逻辑电平 0 的输入电压
6.TTL 和 CMOS 的逻辑电平转换 CMOS 电平能驱动 TTL 电平 TTL 电平不能驱动 CMOS 电平,需加上拉电阻。
4.)了解"USB/TTL 转 232"模块(以 CH340 芯片模块为例)的工作原理 USB 主机检测到 USB 转串口设备插入后,首先会对设备复位,然后开始 USB 枚举过程。USB 枚举时过程会获取设备描述符、配置描述符、接口描述符等。描述符中会包含 USB 设备的厂商 ID,设备 ID 和 Class 类别等信息。操作系统会根据该信息为设备匹配相应的 USB 设备驱动。
USB 虚拟串口的实现在系统上依赖于 USB 转串口驱动,一般由厂家直接提供,也可以使用操作系统自带的 CDC 类串口驱动等。驱动主要分为 2 个功能,其一注册 USB 设备驱动,完成对 USB 设备的控制与数据通讯,其二注册串口驱动,为串口应用层提供相应的实现方法。
二.安装 stm32CubeMX,配合 Keil,分别尝试使用寄存器地址方式(汇编或 C,不限) 和 HAL 库这两种方式,完成下列任务:
(1)重做上一个 LED 流水灯作业,即用 GPIO 端口完成 3 只 LED 红绿灯的周期闪烁。 (2)完成一个 STM32 的 USART 串口通讯程序(查询方式即可,暂不要求采用中断方式),要求: 1)设置波特率为 115200,1 位停止位,无校验位; 2)STM32 系统给上位机(win10)连续发送"hello windows!"。win10 采用"串口助手"工具接收。
1.实验工具:
STM32CubeMX KEIL5 mcuisp STM32F103C8T6 的最小核心板
2.安装 stm32CubeMX3.安装 HAL 库 (1)打开安装好的 STMCubeMX
(2)点击 HELP->Manage embedded software packages :
(3)会跳出来一个选择型号界面 勾选上你要安装的 HAL 库, 点击“Install Now” 直到安装成功
4.创建项目并配置
选择芯片:
RCC 配置:
USART1 配置:
USART1 配置:
配置项目名、项目存放路径、使用编辑器、HAL 库所使用的版本:
Code Generate 配置:
生成代码并打开项目:
代码: 在 main.c 的 while 循环上面写入以下代码:
在 while 循环中写入以下代码
烧录
打开串口调试助手,开启串口,成功:
打开串口调试助手,开启串口,成功:
在没有示波器条件下,可以使用 Keil 的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第 1 题中 3 个 GPIO 端口的输出波形,和第 2 题中串口输出波形,并分析其正确与否。 第一题:
第二题
非常正确
总结:本次实验,我们进行了一次简单的串口通信实验,在实验中,我学会了如何正确的使用 hex 库,也学会了如何使用软件仿真逻辑分析仪功能观察管脚的时序波形来动态跟踪调试和定位代码故障点,来分析代码的正确与否,这次实验让我收获良多,希望在之后的实验也能越来越熟练的进行。