嵌入式实验3串口通信--任务二USART1通信

news/2025/10/20 0:31:57/文章来源:https://www.cnblogs.com/dshuidawsud/p/19151646

1)STM32系统给上位机(win10)连续发送“hello windows!”,win10采用“串口助手”工具接收。如果STM32的连续发送之间不加延时语句,观察win10端是否出现接收数据丢失的现象。
1.1在STM32CubeMX中建立一个新的工程。

屏幕截图 2025-10-19 233408
1.2在新的工程中选择stm32f103c8t6型号。

屏幕截图 2025-10-19 233656
1.3将PA9和PA10两个引脚分别配置为USART1_TX和USART1_RX。
屏幕截图 2025-10-19 233913
1.4在左侧局域栏中的Connectivity中选中USART1,将其Mode设置为Asynchronous。

屏幕截图 2025-10-19 234242
1.5配置文件的名称和保存路径,并选择MDK_keil开发工具,选择版本v5

屏幕截图 2025-10-19 234539
1.6在左侧选项栏中选中Code Generator,并在其中的Generated Files中勾选上第一个选项,并点击右上方的GENERATE CODE生成keil5程序。

屏幕截图 2025-10-19 234824
1.7编写STM32F1xx HAL库配置文件

屏幕截图 2025-10-19 235349
1.8编写main.h头文件

屏幕截图 2025-10-19 235619
1.8编写主函数main.c文件

屏幕截图 2025-10-19 235704
1.9编译并运行编写的程序
编译成功:

屏幕截图 2025-10-19 235809
硬件连接
STM32F103C8T6 ↔ USB转串口模块
PA9 (USART1_TX) → RXD of USB-to-Serial
PA10 (USART1_RX) → TXD of USB-to-Serial
GND → GND
串口助手设置
在Windows 11的串口助手中需要设置:
波特率: 115200
数据位: 8位
停止位: 1位
校验位: 无
流控制: 无
代码详细说明

  1. 系统初始化
    HAL_Init(): 初始化HAL库
    SystemClock_Config(): 配置系统时钟为72MHz(使用8MHz HSE晶振,PLL 9倍频)
    MX_GPIO_Init(): 初始化GPIO
    MX_USART1_UART_Init(): 初始化USART1
  2. USART1配置
    波特率: 115200
    数据位: 8位
    停止位: 1位
    校验位: 无
    硬件流控制: 无
    过采样: 16倍
  3. 数据传输
    使用HAL_UART_Transmit()函数以阻塞方式发送数据
    HAL_MAX_DELAY参数确保数据完全发送完成
    发送字符串为"hello windows!\r\n"(包含换行符便于观察)
    主循环中连续发送,没有添加任何延时语句
  4. 性能特点
    由于没有延时,STM32会以最快速度连续发送数据
    发送频率取决于串口波特率和字符串长度
    理论上最大发送频率约为:115200 / (14×10) ≈ 823次/秒
    2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送。
    2.1修改STM32F1xx HAL库配置文件
    屏幕截图 2025-10-20 002127
    2.2编写中断头文件(stm32f1xx_it.h)

屏幕截图 2025-10-20 002244
2.3修改编写中断服务函数(stm32f1xx_it.c)

屏幕截图 2025-10-20 002355
2.4修改头文件(main.h)

屏幕截图 2025-10-20 002453
2.5编写主函数main.c

屏幕截图 2025-10-20 002535
2.6编译并运行程序
编译运行成功:

屏幕截图 2025-10-20 002614
硬件连接
STM32F103C8T6 ↔ USB转串口模块
PA9 (USART1_TX) → RXD of USB-to-Serial
PA10 (USART1_RX) → TXD of USB-to-Serial
GND → GND
串口助手设置
在Windows 11的串口助手中需要设置:
波特率: 115200
数据位: 8位
停止位: 1位
校验位: 无
流控制: 无
功能说明

  1. 基本功能
    STM32上电后连续发送"hello windows!"字符串
    发送之间没有延时,以最快速度连续发送
  2. 扩展功能
    暂停发送: 当上位机发送字符"#"时,STM32暂停发送"hello windows!"
    继续发送: 当上位机发送字符"*"时,STM32继续发送"hello windows!"
    状态反馈: 收到控制命令时发送相应的状态信息(可选)
  3. 实现原理
    中断接收

使用HAL_UART_Receive_IT()启动中断接收
在HAL_UART_RxCpltCallback()回调函数中处理接收到的数据
每次中断处理完成后重新启动接收中断

发送控制

使用全局变量send_enable_flag控制发送状态
主循环中检查该标志决定是否发送数据
volatile关键字确保多环境下的正确访问
代码详细说明
1. 初始化流程

  1. 系统时钟配置(72MHz)
  2. GPIO初始化
  3. USART1初始化(115200波特率,8数据位,1停止位,无校验)
  4. 启动USART1接收中断

2. 中断处理流程

  1. 接收到字符触发USART1中断
  2. 在回调函数中判断接收到的字符
  3. 根据字符修改发送使能标志
  4. 重新启动接收中断等待下一个字符

3. 主循环流程

  1. 检查发送使能标志
  2. 如果允许发送,则发送"hello windows!"
  3. 如果不允许发送,则跳过发送操作
  4. 循环执行,无额外延时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[SSH] sftp 基于SSH的交互式文件传输工具

[SSH] sftp 基于SSH的交互式文件传输工具$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 背景1.1 简介1.2 sftp 与 ftp 的对比1.3 sftp 与 scp 适用场…

java.math 包详解

java.math 包详解java.math 包是 Java 提供的用于高精度数学计算的工具包,主要包含两个核心类:BigInteger 和 BigDecimal。这些类用于处理超出基本数据类型范围的数值运算。 1. BigInteger 类BigInteger 用于表示任意…

Drive Snapshot

Drive SnapshotAcronis True ImageATI老版本非常棒

Python接入A股level2千档盘口和逐笔委托

Python接入A股level2千档盘口和逐笔委托本文将以实际的代码实践为例,探讨如何通过一套集成了A股基础行情、Level-2高速行情WebSocket接口、量化交易接口与金融数据库的服务,来系统性地解决这些问题。你将看到如何用简…

20232319 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动…

刷题日记—洛谷循环题单

1.数学思想在算法题中的应用: 2.回文数的判定:

学号 2025-2026-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实践目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动…

为什么需要学习变异的算法?

对,“金标准得到的时间很长” 是一个非常现实且关键的点,尤其在临床或产品落地场景中,时间成本本身就是限制模型迭代和优化的瓶颈。✅ 补充第6点(在你这个设定下):障碍类别 具体原因 影响金标准延迟 金标准(如S…

今天搞了新的回归,不显著

今天搞了新的回归,可能被解释变量的度量存在问题,也可能是解释变量有毛病,总之回归结果跟预期的正好相反,甚至反的很显著,这也太恶心了。

shell编程学习笔记005之until循环

until循环语句各种用法探索语法: until 条件 do执行; done

shell编程学习笔记006之select循环

select循环语句各种用法探索语法: select 变量 in "列表" dolist done说明: select可以显示带编号的菜单,选择并执行不同的功能。 select是死循环,可以通过break语句终止循环,也可以使用Ctrl+D或Ctrl+C…

burpsuite抓取小程序公众号数据包-cnblog

burpsuite抓取小程序 公众号https数据包 burpsuite官网下载 https://portswigger.net/burp破解工具 通过网盘分享的文件:burp破解工具.zip 链接: https://pan.baidu.com/s/1An6ebL2LdM3VvFhJSRf4Zg?pwd=8888 提取码…

2026 NOI 做题记录(七)

推荐阅读:E、G、X、AA、AEContest Link \(\text{By DaiRuiChen007}\)A. [QOJ833] Cells Blocking (4) Problem Link 首先任意取出一条路径,上面至少有一个点被删除。 只保留同时能到达 \((1,1),(n,m)\) 的点,那么按…

关于本学期我的编码规范与数学之美第一章观后感 - C

一、规范 在阅读了大型公司公开的编码规范文章后,以下是我总结出的自己应当遵守的编码规范: 1.文件与命名规范 1)文件与命名规范 文件名、源文件后缀用 .cpp,头文件用 .h 命名用小写字母 + 下划线(蛇形命名) 2)…

GPT/Claude中转API部署实战指南_一文读懂AI聚合架构

GPT/Claude中转API部署实战指南_一文读懂AI聚合架构GPT/Claude 中转站技术架构详解 随着 AI 模型(如 OpenAI 的 GPT 系列和 Anthropic 的 Claude)在全球范围内的广泛应用,跨区域访问、稳定性保障和高并发请求处理成…

esp8266模块开发准备工作

文档:NodeMCU Documentation 涉及软件:构建固件 通过在线构建网站构建固件(方式一) NodeMCU custom builds勾选要使用的库,然后设置好邮件地址(部分地址可能不支持),然后点击开始构建即可,完成后构建结果会发…

线程--线程生命周期、Synchronized

四、线程的生命周期 JDK 中用 Thread.State 枚举代表了线程的几种状态NEW:尚未启动对啊线程处于此状态 RUNNABLE:在Java虚拟机中执行的线程处于此状态(可运行状态,但不一定马上running,什么时候运行需要看操作系统…

C#中Yolo开发环境

在C#中进行Yolo部署,需要安装以下第三方库。OpenCVSharp选择目前最稳定的4.6版本。

CF1918F Caterpillar on a Tree

题目大意: 有一棵 \(n\) 个节点的树,你初始在 \(1\) 节点,每次你可以选择以下某一步。移到与 \(x\) 相邻的点,花费 \(1\) 的时间。 移到 \(1\),不花费时间。 第二种操作最多执行 \(k\) 次,求最小遍历完整棵树的时…

tryhackme-预安全-网络如何工作-DNS 详细信息-09

tryhackme-Pre Security-How The Web Works-DNS in Detail 房间地址:https://tryhackme.com/room/dnsindetail 这是网络安全入门的基础模块的计算机科学基础知识:DNS in Detail(DNS 详细信息),序号 01 表示第一篇…