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

STM32F103C8T6三串口实战:从LED控制到数据回传(附完整代码)

STM32F103C8T6三串口实战从LED控制到数据回传附完整代码在嵌入式开发中串口通信是最基础也最实用的功能之一。STM32F103C8T6作为一款性价比极高的Cortex-M3内核微控制器内置了三个独立的USART模块能够同时处理多路串口通信任务。本文将带你从硬件连接到代码实现完整掌握如何利用这三个串口实现LED控制和数据回传功能。1. 硬件准备与连接1.1 所需材料清单STM32F103C8T6最小系统板蓝色药丸开发板USB转TTL模块建议准备2-3个LED灯及限流电阻或直接使用开发板上的用户LED杜邦线若干ST-Link下载器用于程序烧录1.2 引脚连接说明STM32F103C8T6的三个串口对应引脚如下串口TX引脚RX引脚复用功能重映射USART1PA9PA10可重映射到PB6/PB7USART2PA2PA3无重映射USART3PB10PB11可重映射到PC10/PC11实际连接时需要注意TTL模块的TX接MCU的RXRX接MCU的TX共地连接必不可少若使用开发板上的LED通常连接在PC13引脚2. 开发环境搭建2.1 工具链配置推荐使用以下开发环境组合Keil MDK-ARM5.23及以上版本STM32CubeMX6.0用于初始化代码生成串口调试助手推荐使用SecureCRT或Putty2.2 工程创建步骤打开STM32CubeMX选择STM32F103C8T6型号配置时钟树将系统时钟设置为72MHz使能三个USART模块USART1异步模式波特率9600USART2异步模式波特率9600USART3异步模式波特率9600生成代码时选择MDK-ARM工具链// 示例CubeMX生成的USART初始化代码片段 void MX_USART1_UART_Init(void) { huart1.Instance USART1; huart1.Init.BaudRate 9600; huart1.Init.WordLength UART_WORDLENGTH_8B; huart1.Init.StopBits UART_STOPBITS_1; huart1.Init.Parity UART_PARITY_NONE; huart1.Init.Mode UART_MODE_TX_RX; huart1.Init.HwFlowCtl UART_HWCONTROL_NONE; huart1.Init.OverSampling UART_OVERSAMPLING_16; if (HAL_UART_Init(huart1) ! HAL_OK) { Error_Handler(); } }3. 三串口功能实现3.1 串口1数据回显功能串口1将实现最基本的回显功能即接收到什么数据就原样返回。我们使用中断方式接收数据。// 串口1中断回调函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart-Instance USART1){ // 将接收到的字符发回 HAL_UART_Transmit(huart1, rx_data, 1, 100); // 重新开启接收中断 HAL_UART_Receive_IT(huart1, rx_data, 1); } }提示在实际项目中建议添加接收超时处理和缓冲区管理避免数据丢失。3.2 串口2LED控制功能串口2将接收特定指令控制LED状态。我们定义以下协议发送ON打开LED发送OFF关闭LED其他指令返回Invalid Command// 串口2命令处理函数 void ProcessUSART2Command(uint8_t *cmd) { if(strcmp((char*)cmd, ON) 0){ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); HAL_UART_Transmit(huart2, (uint8_t*)LED ON\r\n, 8, 100); } else if(strcmp((char*)cmd, OFF) 0){ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); HAL_UART_Transmit(huart2, (uint8_t*)LED OFF\r\n, 9, 100); } else{ HAL_UART_Transmit(huart2, (uint8_t*)Invalid Command\r\n, 16, 100); } }3.3 串口3数据采集与传输串口3将模拟一个数据采集终端定期发送传感器数据这里用ADC值模拟。// 模拟数据采集任务 void DataAcquisitionTask(void) { static uint32_t adcValue 0; char buffer[50]; adcValue HAL_ADC_GetValue(hadc1); // 假设已配置ADC int len sprintf(buffer, ADC Value: %lu\r\n, adcValue); HAL_UART_Transmit(huart3, (uint8_t*)buffer, len, 100); HAL_Delay(1000); // 每秒发送一次 }4. 完整代码实现与优化4.1 工程文件结构├── Core │ ├── Src │ │ ├── main.c │ │ ├── stm32f1xx_it.c │ │ ├── usart.c │ ├── Inc │ │ ├── main.h │ │ ├── stm32f1xx_it.h │ │ ├── usart.h ├── Drivers ├── MDK-ARM4.2 关键代码片段主循环中整合三个串口的功能int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_USART2_UART_Init(); MX_USART3_UART_Init(); MX_ADC1_Init(); // 启动串口接收中断 HAL_UART_Receive_IT(huart1, usart1_rx_data, 1); HAL_UART_Receive_IT(huart2, usart2_rx_data, 1); while (1) { DataAcquisitionTask(); // 串口3数据发送 ProcessSerialCommands(); // 处理串口1和2的命令 HAL_Delay(100); } }4.3 常见问题排查无法接收数据检查TX/RX接线是否交叉连接确认波特率设置一致测量串口引脚是否有信号数据乱码检查时钟配置是否正确特别是外部晶振设置验证串口初始化参数数据位、停止位、校验位中断不触发确认NVIC中断已使能检查中断优先级设置确保中断服务函数名称正确5. 进阶应用场景5.1 多协议通信方案利用三个串口实现不同的通信协议USART1Modbus RTU协议USART2自定义二进制协议USART3JSON格式数据传输5.2 数据分流处理通过DMA实现高效数据传输减轻CPU负担// DMA串口接收配置 HAL_UART_Receive_DMA(huart1, usart1_rx_buffer, BUFFER_SIZE); HAL_UART_Receive_DMA(huart2, usart2_rx_buffer, BUFFER_SIZE);5.3 硬件流控制当传输速率较高如115200以上或距离较远时建议启用硬件流控制huart1.Init.HwFlowCtl UART_HWCONTROL_RTS_CTS;6. 性能优化技巧环形缓冲区应用typedef struct { uint8_t buffer[256]; uint16_t head; uint16_t tail; } RingBuffer;中断优先级管理给关键串口分配更高优先级避免在中断中进行耗时操作低功耗优化空闲时进入STOP模式通过串口唤醒MCU在实际项目中三串口的协同工作能力可以极大扩展STM32的应用场景。我曾在一个工业控制器项目中使用USART1连接HMIUSART2连接PLCUSART3连接无线模块三者各司其职又相互配合实现了稳定可靠的控制系统。

相关文章:

STM32F103C8T6三串口实战:从LED控制到数据回传(附完整代码)

STM32F103C8T6三串口实战:从LED控制到数据回传(附完整代码) 在嵌入式开发中,串口通信是最基础也最实用的功能之一。STM32F103C8T6作为一款性价比极高的Cortex-M3内核微控制器,内置了三个独立的USART模块,能…...

Notepad--:国产跨平台文本编辑器的终极指南

Notepad--:国产跨平台文本编辑器的终极指南 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- Notepad--是一款…...

BEMD算法在图像去噪中的应用:原理与MATLAB实现对比传统方法

BEMD算法在图像去噪中的创新实践:从原理到MATLAB工程实现 当一张珍贵的医学影像被噪声污染,或是卫星传回的遥感图片出现干扰时,传统去噪方法往往面临保真度与去噪效果的权衡困境。二维经验模态分解(BEMD)作为一种自适应信号处理方法&#xff…...

全国电赛必备!MSP430F5529的USB-OTG功能开发指南(附HID设备例程)

MSP430F5529 USB-OTG开发实战:从硬件设计到HID设备实现 1. 为什么选择MSP430F5529的USB功能? 在电子设计竞赛中,MSP430F5529因其独特的USB-OTG功能而成为众多参赛队伍的首选。这款TI的16位超低功耗MCU不仅具备常规单片机的外设资源&#xff0…...

v8go调试与内存管理终极指南:解决常见问题与内存泄漏检测

v8go调试与内存管理终极指南:解决常见问题与内存泄漏检测 【免费下载链接】v8go Execute JavaScript from Go 项目地址: https://gitcode.com/gh_mirrors/v8g/v8go v8go是一个强大的Go语言绑定库,允许开发者在Go应用程序中执行JavaScript代码。作…...

Step3-VL-10B多模态模型应用场景:教育智能助教、无障碍图像描述、设计稿分析

Step3-VL-10B多模态模型应用场景:教育智能助教、无障碍图像描述、设计稿分析 1. 引言:当AI学会“看”和“想” 你有没有遇到过这样的情况? 一位老师需要批改上百份手写作业,眼睛都看花了;一位视障朋友想了解社交媒体…...

别再瞎找了!降AIGC网站 千笔·降AI率助手 VS 笔捷Ai 专科生专属

在AI技术迅速发展的今天,越来越多的学生开始借助AI工具辅助论文写作,提升效率与质量。然而,随着学术审查标准的不断提高,AI生成内容的痕迹越来越容易被识别,论文中的“AIGC率”问题也日益凸显。许多学生在完成初稿后&a…...

Wan2.2-T2V-A5B快速上手:无需复杂配置,一键生成你的第一个AI视频

Wan2.2-T2V-A5B快速上手:无需复杂配置,一键生成你的第一个AI视频 1. 为什么选择Wan2.2-T2V-A5B 在短视频内容创作爆发的时代,快速生成高质量视频内容已经成为刚需。Wan2.2-T2V-A5B作为一款轻量级文本到视频生成模型,凭借其50亿参…...

Python实战:5分钟搞定TTF转图片(附FontForge避坑指南)

Python字体处理实战:从TTF到图片的高效转换与避坑指南 在UI设计、游戏开发或自动化测试领域,字体处理是每个开发者迟早要面对的课题。想象一下这样的场景:你需要将一套精美的中文字体快速转换为图片序列用于HUD界面设计,或者为自动…...

QNAP TS-231P实战:用Docker快速搭建Aria2下载服务器(含远程访问技巧)

QNAP TS-231P实战:用Docker容器化部署Aria2全功能下载中心 在数字化资源日益丰富的今天,一个稳定高效的下载解决方案已成为许多技术爱好者的刚需。QNAP TS-231P作为一款高性价比的NAS设备,结合Docker的轻量化容器技术,能够快速搭…...

pgModeler插件开发教程:如何扩展你的数据库建模工具功能

pgModeler插件开发教程:如何扩展你的数据库建模工具功能 【免费下载链接】pgmodeler Open-source data modeling tool designed for PostgreSQL. No more typing DDL commands. Let pgModeler do the work for you! 项目地址: https://gitcode.com/gh_mirrors/pg/…...

tao-8k多场景落地:科研基金申报书智能查重、技术路线图语义相似度分析

tao-8k多场景落地:科研基金申报书智能查重、技术路线图语义相似度分析 1. 引言:当科研遇上AI查重新方案 科研工作者们经常面临这样的困扰:辛辛苦苦写好的基金申报书,怎么确保没有无意中与已有成果重复?技术路线图的创…...

ChatGLM3-6B生成质量评估:对比原版模型的语义连贯性提升

ChatGLM3-6B生成质量评估:对比原版模型的语义连贯性提升 1. 引言:从“能回答”到“会聊天”的跨越 如果你用过早期的对话模型,可能有过这样的体验:你问一个问题,它答得还行;你再追问一句,它要…...

Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM、CNN五模型时序预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Qwen3.5-35B-A3B-AWQ-4bit企业落地:银行柜面业务凭证图智能填单、证券开户材料图要素抽取

Qwen3.5-35B-A3B-AWQ-4bit企业落地:银行柜面业务凭证图智能填单、证券开户材料图要素抽取 1. 金融场景下的多模态AI应用价值 在银行柜面和证券开户业务中,每天需要处理大量纸质凭证和开户材料。传统人工录入方式存在效率低、错误率高、成本高等问题。Q…...

3个颠覆性设计:Screenbox如何重新定义Windows媒体播放体验

3个颠覆性设计:Screenbox如何重新定义Windows媒体播放体验 【免费下载链接】Screenbox LibVLC-based media player for the Universal Windows Platform 项目地址: https://gitcode.com/gh_mirrors/sc/Screenbox 在数字媒体消费日益碎片化的今天,…...

5分钟玩转Qwen3-Reranker-0.6B:快速搭建智能问答排序服务

5分钟玩转Qwen3-Reranker-0.6B:快速搭建智能问答排序服务 1. 引言:为什么需要文本重排序? 想象一下,当你向智能客服提问时,系统可能会返回多个相关答案。如何确定哪个答案最符合你的需求?这就是文本重排序…...

大语言模型微调技术:从“全参数“到“高效微调“的进化之路

如何让千亿参数的AI模型"学会"你的专属任务?本文带你读懂大模型微调的核心技术。一、为什么需要"微调"? 想象一下:你招聘了一位博学多才的博士(预训练大模型),他读过海量书籍&#xff…...

v8go快速入门:10分钟学会在Go中执行JavaScript代码

v8go快速入门:10分钟学会在Go中执行JavaScript代码 【免费下载链接】v8go Execute JavaScript from Go 项目地址: https://gitcode.com/gh_mirrors/v8g/v8go v8go是一个强大的开源项目,它允许开发者在Go语言中无缝执行JavaScript代码。通过v8go&a…...

EasyAnimateV5-7b-zh-InP开源镜像优势:Magvit压缩率提升与生成质量平衡点

EasyAnimateV5-7b-zh-InP开源镜像优势:Magvit压缩率提升与生成质量平衡点 1. 模型核心能力解析 EasyAnimateV5-7b-zh-InP是一个专门针对图像到视频转换任务的7B参数模型,它在视频生成领域展现出了独特的技术优势。与传统的文本生成视频或视频控制类模型…...

是什么在重塑餐厅的感官契约,威力声吸顶音响用实力助力餐饮生意

餐饮空间的同质化困局里,聪明的经营者已开始向头顶借力。当装修风格可以复制,菜品可以被模仿,唯有五感交织的氛围体验,成为无法被抄袭的竞争壁垒。声音,正是这壁垒中最隐秘而锋利的一角。声景叙事,一米宽处…...

RAG 深度解读:检索增强生成如何改变人工智能

人工智能 (AI) 每年都在变得越来越复杂。像 GPT-4 或 GPT-5 这样的大型语言模型 (LLM) 可以回答问题、撰写论文、总结内容,甚至编写代码。但这些模型存在局限性: 他们可能不知道最新的事件,因为他们的训练数据是固定的。他们有时会产生幻觉&a…...

Qwen-Image-2512像素艺术生成指南:开源LoRA模型免配置部署全流程

Qwen-Image-2512像素艺术生成指南:开源LoRA模型免配置部署全流程 1. 引言:当大模型遇见像素艺术 还记得小时候玩红白机时,那些由一个个方块组成的游戏世界吗?马里奥、塞尔达、魂斗罗……那些经典的像素画面,承载了一…...

Graph sketching技术解析:UNICORN如何用200KB内存实现APT检测

Graph Sketching技术解析:UNICORN如何用200KB内存实现APT检测 在网络安全领域,高级持续性威胁(APT)检测一直是个棘手难题。传统方法要么依赖已知特征库(面对零日漏洞束手无策),要么需要消耗大量…...

Youtu-VL-4B-InstructGPU利用率提升:通过batch_size=2+prefill优化,吞吐翻倍实测

Youtu-VL-4B-Instruct GPU利用率提升:通过batch_size2prefill优化,吞吐翻倍实测 1. 从单张到两张,一次简单的改变带来巨大收益 如果你正在使用腾讯优图开源的Youtu-VL-4B-Instruct模型,大概率会遇到这样一个问题:GPU…...

Anything to RealCharacters 2.5D转真人引擎部署教程:解决常见CUDA内存溢出报错指南

Anything to RealCharacters 2.5D转真人引擎部署教程:解决常见CUDA内存溢出报错指南 1. 项目概述 Anything to RealCharacters是一款专为RTX 4090显卡优化的2.5D转真人图像转换系统。基于通义千问Qwen-Image-Edit-2511底座和专属写实权重,能够将卡通、…...

思科路由器IKEv2与IPSec隧道配置实战:从基础到高可用部署

1. IKEv2与IPSec隧道基础概念 IKEv2(Internet Key Exchange version 2)是新一代密钥交换协议,相比IKEv1在稳定性、安全性和连接速度上有显著提升。它通过两次交换(共4个消息)就能完成密钥协商,特别适合移动…...

实战指南:KeilC51与MDK无缝切换的完整配置流程

1. 为什么需要KeilC51与MDK共存? 作为一个从8051单片机转到STM32开发的工程师,我深刻理解同时维护两套开发环境的痛苦。以前我的电脑桌面上总是躺着两个Keil图标,一个蓝色(C51),一个绿色(MDK&am…...

基于DamoFD-0.5G的智能家居人脸识别系统

基于DamoFD-0.5G的智能家居人脸识别系统 1. 引言 想象一下这样的场景:你下班回家,门锁自动识别你的面容并解锁,灯光自动调节到你喜欢的亮度,空调调整到舒适的温度,音响开始播放你最爱的音乐。这不是科幻电影&#xf…...

RVC模型JavaScript前端交互开发:实时语音变声Web应用

RVC模型JavaScript前端交互开发:实时语音变声Web应用 1. 引言:当变声器遇上浏览器 你有没有想过,在网页里点开一个链接,对着麦克风说几句话,就能立刻听到自己变成卡通人物、机器人甚至电影角色的声音?这听…...