STM32串口通信编程

重庆交通大学信息科学与工程学院

《嵌入式系统基础A》课程

实验报告(2)

班 级: 物联网工程2002

姓名-学号 : 徐权-632007060327

实验项目名称: STM32串口通信编程

实验项目性质: 设计性

实验所属课程: 《嵌入式系统基础A》

实验室(中心): 南岸校区语音大楼

指 导 教 师 : 娄路

完成时间: 2021 10 22

一、实验内容和任务

  1. 了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。

  2. 安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务:

    (1)重做上一个LED流水灯作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。

    (2)完成一个STM32的USART串口通讯程序(查询方式即可,暂不要求采用中断方式),要求:1)设置波特率为115200,1位停止位,无校验位;2)STM32系统给上位机(win10)连续发送"hello windows!"。win10采用"串口助手"工具接收。

  3. 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析其正确与否。

    参考网址:

    https://blog.csdn.net/qq_43279579/article/details/112213196

    搭建STM32开发环境------STM32CubeMX,Keil5

    https://blog.csdn.net/qq_43279579/article/details/112233696

    STM32实现LED闪烁------基于HAL库

    https://blog.csdn.net/ssj925319/article/details/111984002

    基于 MDK 创建 STM32 汇编程序:串口输出 Hello world

    https://blog.csdn.net/vic_to_ry/article/details/110451036

二、实验要求

1. 分组要求:每个学生独立完成,即1人1组。

2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。

3.项目代码上传github,同时把项目完整打包为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.安装stm32CubeMX
在这里插入图片描述
3.安装HAL库
(1)打开安装好的STMCubeMX
在这里插入图片描述
(2)点击HELP->Manage embedded software packages :

(3)会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功
在这里插入图片描述
在这里插入图片描述
4.创建项目并配置
在这里插入图片描述

选择芯片:
在这里插入图片描述

RCC配置:
在这里插入图片描述

USART1配置:
在这里插入图片描述

配置项目名、项目存放路径、使用编辑器、HAL库所使用的版本:
在这里插入图片描述

Code Generate配置:
在这里插入图片描述
生成代码并打开项目:
在这里插入图片描述
代码:
在main.c的while循环上面写入以下代码:

char data[] = "\nHello world!\n";

在while循环中写入以下代码

HAL_UART_Transmit(&huart1, (uint8_t *)data, 15, 0xFFFF);
HAL_Delay(1000);

在这里插入图片描述
点击
在这里插入图片描述
烧录在这里插入图片描述
打开串口调试助手,开启串口,成功:
在这里插入图片描述

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,和第2题中串口输出波形,并分析其正确与否。
第一题:
在这里插入图片描述
第二题在这里插入图片描述
非常正确
总结:根据本次实验 我学会了如何正确使用hex库,然后也学会了如何使用软件仿真逻辑分析仪功能观察管脚的时序波形来动态跟踪调试和定位代码故障点,分析代码正确与否

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值