当前位置: 首页 > news >正文

嵌入式系统-实验三——串口通信实验

目录

一、实验目的

二、实验要求

2.1 实验原理

2.2 实验软件

三、实验过程

3.1 代码开发

3.2 原理图设计

四、实验记录与总结

4.1 核心代码理解

4.2 实验结果

4.3 问题与想法

1、问题

2、想法

五、小结


一、实验目的

       1、掌握STM32F103串口数据接收程序设计流程;

       2、熟悉STM32固件库的基本使用。

二、实验要求

2.1 实验原理

       1、串口通信的主要方式包括查询和中断,本实验可选择其中一个方式进行实验;

       2、STM32F103R6通过串口接收数据,每接收到一个字节,立即向对方发送一个相同内容的字节,并把该字节的十六进制码显示在两位数码管上。

2.2 实验软件

       电脑、Keil uVision5软件、Proteus 8 Professional软件。

三、实验过程

3.1 代码开发

       按照书本中实验流程在Keil中完成串口查询或者中断方式实验的代码开发。

3.2 原理图设计

       在Proteus中完成原理图的设计,下图为串口通信实验原理图。

图1 串口通信实验原理图

四、实验记录与总结

4.1 核心代码理解

       根据本次实验需求,主要处理两个部分的逻辑:一是串口收发逻辑,二是收到数据解析后点亮对应数码管显示。同时,这两部分逻辑进一步细分:对于串口收发逻辑:串口配置初始化、串口发送单字节数据、串口接收单字节数据;对于数据解析与数码管显示:数码管初始化配置、数据解析、写入控制端口点亮相应LED实现数码管显示。

       整体而言,本次我使用轮询方式进行串口数据发送,使用中断方式进行串口数据接收,因此在串口配置初始化部分会涉及到串口端口配置、串口配置以及相关中断优先级配置等内容,因此必然需要创建GPIO、USART、NVIC初始化的结构体对象,用于后续相关参数配置和初始化。然后所有外设控制首先需要开启相应的时钟,控制外设工作频率使其稳定工作,本次使用的外设即GPIO和串口USART,代码如图2所示。

图2 结构体对象创建及开启时钟

       首先对串口端口进行初始化。根据提供电路原理图知本次使用的串口引脚为PA9、PA10,对应TX与RX,查看手册可知使用的为USART1。由于TX进行发送,即要不断对外输出0或1,因此PA9端口配置为推挽输出,考虑到此时PA9并非作为标准IO口,而是复用串口功能,因此最终配置为复用推挽输出,速率10MHz即可;同理,RX进行接收,即要不断等待外部输入0或1,因此PA10端口配置为浮空输入即可,串口端口核心配置代码如图3所示。

图3 串口端口核心配置代码

       其次是对串口功能进行配置。根据串口通信协议数据格式及相关要求可知,对于串口配置主要设置串口波特率、数据长度、停止位位数、收发模式、校验位、硬件流控等。因为本次实验需要同时进行收发,因此串口模式为既收又发的模式,一般使用数据长度使用8位,停止位1位,校验即奇偶校验一般也不使用,硬件流控不开启,然后波特率可通过传参手动设置,代码中对串口结构体参数配置后进行初始化即可,如图4所示。

图4 串口功能配置核心代码

       紧接着就是配置一下串口1接收中断的优先级,也就是NVIC,然后启动接收中断和串口工作。由于本次只涉及到接收中断这一个,因此对于优先级配置何值没有太大影响,所以我配置的抢占优先级和子优先级均为2,然后使能NVIC并将配置参数放入结构体初始化,最后启动串口接收中断以及串口总使能位,代码如图5所示。

图5 中断优先级配置及串口使能

       然后是数据发送部分。只需要调用串口1的发送数据函数,传入待发送的单字节数据,并等待发送完成即可,代码如图6所示。

图6 发送单字节数据

       接着是数据接收部分。本次使用接收中断,因此是当收到数据时,会触发串口1接收中断,进入中断处理程序执行相应逻辑,因此重写中断处理程序,其中逻辑即接收非空时将数据用全局变量rx_data记录,然后清除中断标志位即可。当然,我定义了一个全局接收状态标志变量isReceive,这里会被置1,进而执行接收后回显收到数据操作,代码如图7所示。

图7 中断接收数据

       接着是数据回显与数据解析并显示。前面提到我使用了接收状态标志isReceive变量,即当isReceive置1时执行回显逻辑,然后对状态位清零避免无休止进入。

       在解析数据前,先准备好数码管显示0-9、A-F的共阳极字段码(也就是各个数字对应输入相应LED控制端口的0或1组合),使用数组按照数字顺序存储,便于建立显示数字与输入相应端口端口电平的映射关系。然后定义变量display_word记录解析得到的16位二进制。

       由于需求为显示发送的8位二进制的16进制数,因此我的逻辑为截断接收的16进制数为两个单独的4位二进制数,也就是我要分别显示在两个数码管的十进制数值。又因为显示在数码管上也就是点亮对应的LED,而两个数码管一共恰好16个LED,根据电路连接可知恰好使用了GPIOB的全部端口,因此只需要将这俩数值对应的8位字段码进行顺序拼接后写入GPIOB的所有端口位即可,具体就是把分离的两个数值作为数码管字段码数组索引得到的对应8位二进制,然后放在高8位写入的就左移8位并与另外8位二进制进行位或即可拼接完成,然后存在display_word中,最后使用GPIO_Write函数写入即可,代码如图8所示。

图8 数据接收与解析显示

4.2 实验结果

       在keil中编译代码完成后,将生成的,hex文件加载到protesu8.9中电路图的32芯片中,然后运行即可。对电脑端的串口助手设置好波特率9600(与程序设置波特率一致),然后设置收发数据格式为16进制后,发送数据可得如图9效果。

图9 程序运行结果

4.3 问题与想法

1、问题

       (1)在进行proteus仿真串口收发时,收发数据出现乱码;

       (2)发送数据后接收不到。

2、想法

       (1)根据书上所述以及查询资料得知,proteus仿真stm32串口通信时需要手动配置一下系统初始化函数的时钟源,使用HIS内部时钟源8MHz,并根据proteus中对32芯片设置的时钟频率修改相应分频系数。

       (2)就本次实验而言,发送数据前一定要检查串口助手收发的数据格式是否改成了16进制发送或接收,否则直接发送十六进制数会当成多字节数据或错误数据发生,导致单片机端接收单字节数据出错。


五、小结

       通过本次串口通信实验,我熟练掌握了 STM32F103 串口接收程序的设计流程,深入理解了查询与中断两种通信方式的应用场景,能灵活运用轮询发送、中断接收的组合模式实现数据交互。

       同时,我熟悉了 STM32 固件库中 GPIO、USART、NVIC 等核心外设的配置方法,掌握了串口初始化、波特率设置、中断优先级配置等关键步骤。在解决 Proteus 仿真乱码、数据接收失败等问题的过程中,学会了排查时钟源配置、数据格式设置等常见故障,提升了问题解决能力。

       此外,通过代码编写与原理图设计的结合,加深了对嵌入式系统硬件与软件协同工作的理解,为后续复杂嵌入式项目开发奠定了坚实基础。


http://www.dtcms.com/a/609378.html

相关文章:

  • 2025cesium进阶教程|Cesium 天气特效实现:从 ShaderToy 移植下雪效果的完整方案
  • 数据库 - SQL
  • 单页网站seo怎么做秦皇岛高端网站设计
  • 做网商必备网站手机百度关键词优化
  • python实现电脑手势识别截图
  • openEuler 全场景操作系统下 cpolar 内网穿透的价值深挖与协同优化
  • 为什么选择威洛博直线模组——从 3C、新能源、半导体到医疗的大致解析
  • 利用ArcPy批量检查管线隐患点与周边设施距离的实现方案
  • 【ZeroRange WebRTC】Amazon Kinesis Video Streams WebRTC SDK 音视频传输技术分析
  • 政务机关数字化办公核心系统
  • 盐城做网站企业新增网站推广教程
  • 衡东建设局网站公司内部交流 网站模板
  • 自己做网站要买什么在网站制作前需要有哪些前期策划工作
  • RAG系统学习之——RAG技术详解与实战指南
  • ASC学习笔记0014:手动添加一个新的属性集
  • 通过手机远程操控电脑,一步步学习便捷方法
  • 【AI学习-comfyUI学习-Segment Anything分割+实时图像裁剪-各个部分学习-第九节2】
  • [Linux]学习笔记系列 -- [kernel[params
  • AI 多模态全栈应用项目描述
  • SpringMVC(2)学习
  • 面向智能教育的生成式AI个性化学习内容生成研究
  • C语言编程代码编译 | 学习如何高效编译和调试C语言程序
  • 多模态学习与多模态模型
  • 网站建设费的税率网页设计制作用什么软件
  • Flutter Material 3设计语言详解
  • 天猫魔盒M19_晶晨S912H当贝桌面线刷机包_adb开启
  • 长沙seo优化排名东营优化网站
  • Python 编程实战 · 实用工具与库 — Flask 基础入门
  • supOS工厂操作系统 | 像“拼乐高”一样做数据分析
  • 青岛营销型网站推广wordpress doc导入