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

Aily Blockly 辅助 STM32 开发教程2

Aily Blockly 辅助 STM32 开发教程2

第 7 章:串口通信

7.1 串口基础

UART/USART(通用异步收发器)是最常用的串行通信接口,可用于:

  • 与电脑通信(调试打印)
  • 与其他模块通信(蓝牙、WiFi、GPS 等)

STM32F103 有 3 个 USART 接口:

串口TX 引脚RX 引脚
USART1PA9PA10
USART2PA2PA3
USART3PB10PB11

常用参数配置:

  • 波特率:9600 / 115200 / 921600 bps
  • 数据位:8 位
  • 停止位:1 位
  • 校验位:无

7.2 Hello World —— 串口打印

硬件连接

使用 USB-TTL 模块连接 USART1:

STM32F103 USB-TTL 模块 PA9 ────────► RX PA10 ◄──────── TX GND ──────── GND

⚠️ 注意:TX 接 RX,RX 接 TX,交叉连接。

图形化程序
当启动时 ├─ 初始化串口 USART1,波特率 115200 └─ 永远重复 ├─ 串口发送文本 USART1: "Hello STM32!\r\n" └─ 延时 1000 毫秒
查看串口输出
  1. 将 USB-TTL 模块插入电脑
  2. 打开串口调试助手(如 Serial Monitor、PuTTY、串口助手等)
  3. 选择对应的 COM 端口
  4. 设置波特率 115200,数据位 8,停止位 1,无校验
  5. 打开串口,观察输出

预期输出:

Hello STM32! Hello STM32! Hello STM32! ...

7.3 串口控制 LED

通过电脑发送指令控制 LED 状态。

积木程序
当启动时 ├─ 初始化引脚 PC13 为 推挽输出 ├─ 初始化串口 USART1,波特率 115200 └─ 永远重复 ├─ 如果 串口有数据 USART1 │ ├─ 定义变量 cmd = 串口读取字符 USART1 │ ├─ 如果 cmd = '1' │ │ └─ 设置引脚 PC13 为 低电平 │ ├─ 如果 cmd = '0' │ │ └─ 设置引脚 PC13 为 高电平 │ └─ 如果 cmd = 's' │ └─ 串口发送文本 USART1: "LED 状态: " + 读取引脚 PC13 + "\r\n" └─ 延时 10 毫秒
测试方法

在串口调试助手中发送字符:

  • 发送1→ LED 点亮
  • 发送0→ LED 熄灭
  • 发送s→ 返回当前 LED 状态

7.4 串口中断接收

使用中断方式接收串口数据,避免轮询占用 CPU。

定义变量 rx_buffer = "" // 接收缓冲区 定义变量 rx_done = false // 接收完成标志 定义函数 USART1_接收中断(char_data) ├─ 如果 char_data != '\n' │ └─ rx_buffer = rx_buffer + char_data └─ 否则 └─ rx_done = true 当启动时 ├─ 初始化串口 USART1,波特率 115200,启用接收中断 └─ 永远重复 ├─ 如果 rx_done = true │ ├─ 串口发送文本 USART1: "收到: " + rx_buffer + "\r\n" │ ├─ rx_buffer = "" │ └─ rx_done = false └─ 延时 10 毫秒

第 8 章:中断与事件响应

8.1 什么是中断?

中断是单片机中一种重要的机制:当某个事件(如引脚电平变化、定时器溢出、串口收到数据)发生时,CPU 暂停当前执行的程序,转而去执行"中断服务函数",处理完后再回到原来的程序继续执行。

中断的优势:

  • 实时响应:事件发生立即处理
  • 💤节省 CPU:主程序可以做其他事甚至休眠
  • 🔄并行处理:"看起来"同时做多件事

8.2 外部中断(EXTI)

STM32 的每个 GPIO 引脚都可以配置为外部中断源,支持:

  • 上升沿触发(低电平→高电平)
  • 下降沿触发(高电平→低电平)
  • 双边沿触发(任意跳变)
实验:按键触发中断
定义变量 count = 0 定义函数 EXTI_PA0_中断处理 └─ count = count + 1 当启动时 ├─ 初始化引脚 PC13 为 推挽输出 ├─ 初始化引脚 PA0 为 输入下拉,下降沿中断
http://www.cnnetsun.cn/news/3544179.html

相关文章:

  • Markdown-Edit高级功能揭秘:实时预览、主题定制与图片拖拽上传
  • 【74LS151三人表决+153全减器+183串行进位加法器+32编码器】2024-12-12
  • 【206】图书管理系统
  • 解决问题:Vscode 自动更新不匹配远程服务器版本
  • co-wechat-api完全指南:如何用Node.js快速对接微信公共平台API
  • M2N2 解读
  • 颠覆性无线传输革命:3DS FBI Link让你的Mac变身3DS游戏智能管家
  • 11年数字化长跑:MTC荣获泰昆集团三十周年“智库功勋”称号
  • 论文降重技巧有哪些?2026年10个实测有效的方法,第7个效率最高
  • C++语言算法教程——递归
  • Ionic Angular Cordova Seed:快速构建跨平台移动应用的终极起点
  • 都在吹 Agent 自主执行,为什么你的项目上线第一天就崩盘?
  • 江波龙往事
  • ArLazyPreload源码剖析:理解延迟加载的实现原理
  • 深度解析ActivityPub:构建去中心化社交网络的联邦协议架构
  • 企业大脑到底是什么跟知识库有什么本质区别
  • 【2024最硬核AI测试方案】:基于CodeWhisperer+RAG的精准单元测试生成,实测覆盖率提升83.6%
  • K8s:自动化部署、扩缩容和管理容器化应用
  • 基于 Hashcat 的企业密码强度合规性审计与防御实战
  • Camera驱动开发与应用开发中的零拷贝与DMA
  • 家电清洗培训课程类别、培训方式及费用情况究竟有哪些
  • 通信工程零项目经验转行数据分析
  • 为什么MissingDrawer是TextMate开发者必备插件:功能对比分析
  • git-pr-release与GitHub Actions集成:自动化CI/CD发布流程的终极指南
  • 阿里云面试官问:AI 客服测到什么程度,才敢放给真用户?
  • 做漫剧分镜时,可以先用扣子把人物和剧情线整理出来
  • 小程序毕设选题推荐:基于 Android 的便民在线医疗服务平台 互联网在线诊疗预约服务系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • React Native Photo Browser 主题定制:打造个性化图片浏览器
  • GPT-5.6 在后端工程任务中的表现:基于接口、异常处理和数据结构的实测
  • GraphRAG 别急着上:先把图谱血缘理清,比调大模型重要十倍