STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令)

STM32最新是10个案例及操作 STM32系列单片机一直深受广大电子发烧友的爱好与追捧,每次出新,总是哄抢一空,基于STM32的各类实际应用也是层出不穷,一个好的资料可以帮助小白成功入门,帮助大家晋级大神行列。整理了电路城上10个精品STM32系列项目资料,带你解锁晋级之路,登上人生高峰。 1、基于STM32的双向DC-DC变换器 根据15年电赛题设计的双向DC-DC变换器,装置采用PID控制,主要功能是恒流充充电和恒压输出。充... 阅读详情

一、功能需求分析

在中断机制实现按键检测的案例之后,我们介绍串行通信,而使用串行通信的方式采用中断方式实现,即在完成发送或者接收数据后,会触发串行通信的发送和接收callback函数,执行回调函数功能。
在单片机通信方式中,通常有两种,串行通信和并行通信。
串行通信即一次只发送一位数据,多次发送完成。
并行通信即一次发送多位数据,一次完成。
下面有一张关于两种通信方式的基础知识点,概括很全面,大家可以自己理解。
在这里插入图片描述需求分析:

  1. 仿真方式,实现COM1和COM2的通信,COM2发送命令,COM1执行命令并返回结果;
  2. 接线方式,COM1连接STM32,RXD和TXD并联,STM32使用第一组串口线,PA9(TXD)PA10(RXD);PA0-PA2分别连接LED1-LED3;
  3. 通信协议:
    COM2发送字符a,LED1熄灭;
    COM2发送字符b,LED1点亮;
    COM2发送字符c,LED2熄灭;
    COM2发送字符d,LED2点亮;
    COM2发送字符e,LED3熄灭;
    COM2发送字符f,LED3点亮;

使用到的工具:

工具软件功能
Proteus绘制原理图
STM32CubeMX图形化配置生成MDK项目
MDK编写下位机代码
XCOM串口调试住手
VSPD虚拟串口驱动

用到的工具比较多,这里梳理一下思路:
本案例的功能是通过串口通信实现命令下发和命令执行以及结果反馈的功能。
具体实现选择的是通过单个字符,比如‘a’命令,点亮LED1;
但是如果想实现串口通信,需要提供两个物理串口,而且是不同PC机的,同一台PC机无法实现自己的两个串口通信。
所以,这里使用到了VSPD,它可以将一台PC的两个端口虚拟连接,实现数据收发,解决了我们硬件的限制。

在这里插入图片描述

二、Proteus绘制电路原理图

绘制电路原理图的步骤:创建画布=》芯片选型及放置=》元器件选型及放置=》连接电路=》修改元器件参数=》仿真运行。

下图为所需元器件清单,其中比较重要的是COMPIM,它可以将Proteus中的虚拟元器件连接到PC机实际的串口,这个元器件是我们实现仿真串行通信的关键。
在这里插入图片描述
下图为电路原理图。
在这里插入图片描述绘制完成后,双击COMPIM配置串行通信参数,注意,这个地方配置的参数,需要我们在CubeMX中配置相同参数,而且在串口助手测试时,也是用相同参数,即8N1+115200。
在这里插入图片描述

三、STMCubeMX 配置引脚及模式,生成代码

接下来,根据原理图绘制,创建CubeMX项目,配置引脚及工作模式,生成MDK项目代码。

创建项目,在Pinout配置模块,点击PA0,选择GPIO_Output推挽输出模式,同理,配置PA1、PA2。
在这里插入图片描述配置串口引脚及参数,PA9和PA10配置成TX和RX模式,在连接选项处,配置通信模式为asynchronous异步通信模式,8N1+115200的串口通信参数。
在这里插入图片描述

在clock单元,配置系统时钟为72MHz。
在这里插入图片描述在Project单元,填写项目名称、保存路径、IDE和版本。
在这里插入图片描述

在 code generator中,配置添加库的方式为所需库,用户代码在每次项目重新生成时保留。
在这里插入图片描述
配置完成,通过以上步骤,完成了2个LED引脚的模式配置及时钟配置,接下来,点击GENERATE,生成项目代码。
在这里插入图片描述
找到生成路径,可以看到项目目录文件。
在这里插入图片描述

四、MDK打开生成项目,编写HAL库的功能代码

从上面步骤中,生成了MDK项目。
在MDK-ARM目录中,找到项目快捷方式(.uvprojx),打开项目。
在这里插入图片描述

找到main.c文件,添加两部分代码。

在此之前,查阅API手册,解释下面的函数。
HAL_UART_Transmit(&huart1, (uint8_t )pCmd, len, 0xFFFF);
函数功能为发送串口数据,里面四个参数,&huart1为串口的指针, (uint8_t )pCmd发送数据数组首地址,len数据长度,超市时间0xFFFF。
在这里插入图片描述HAL_UART_Receive_IT(&huart1, (uint8_t )&Rx_Byte, 1);
函数功能为在非阻塞状态下接收串口数据,里面三个参数,串口指针,接收数组首地址,数据大小。
在这里插入图片描述1. 用户变量声明
/
Private variables ---------------------------------------------------------
/
/
USER CODE BEGIN PV /
uint8_t Rx_Byte;
uint8_t Rx_Buff[256];
uint8_t Rx_Count;
/
USER CODE END PV */
2. 串口接收中断回调函数

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	unsigned char *pCmd = NULL;
	int len = 0;
	
	UNUSED(huart);
	
	switch(Rx_Byte)
	{
		case 'a':
			pCmd = "command a\r\n";
		  len = strlen(pCmd);
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
			break;
				
		case 'b':
			pCmd = "command b\r\n";
		  len = strlen(pCmd);
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
			break;
						
		case 'c':
			pCmd = "command c\r\n";
		  len = strlen(pCmd);
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
			break;
								
		case 'd':
			pCmd = "command d\r\n";
		  len = strlen(pCmd);
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
			break;
										
		case 'e':
			pCmd = "command e\r\n";
		  len = strlen(pCmd);
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
			break;
												
		case 'f':
			pCmd = "command f\r\n";
		  len = strlen(pCmd);
			HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
			break;
												
		default:
			pCmd = "command cmd\r\n";
			len = strlen(pCmd);
			break;												
	}

	HAL_UART_Transmit(&huart1, (uint8_t *)pCmd, len, 0xFFFF);
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&Rx_Byte, 1);
}
/* USER CODE END 4 */

在这里插入图片描述在项目中勾选生成HEX选项,HEX文件就是MDK编译生成的十六进制文件,作为烧录到开发板的源程序文件使用,当然,这里我们使用仿真,在Proteus中加载HEX即可。
在这里插入图片描述点击编译程序,生成HEX文件。在编译窗口显示生成了以下信息,则编译成功,保证 0 errors再进行下一步。
在这里插入图片描述

五、运行仿真程序,调试代码

在Proteus中,双击芯片,选择加载程序路径。
01_LED\LED-MDK\MDK-ARM\LED-MDK
上面是我的项目的HEX文件目录路径。在这里插入图片描述

测试步骤略显复杂,需要一点耐心:

  1. 使用VPSD工具COM1和COM2配对,这样就可以用XCOM和Proteus来模拟两个串口了。在这里插入图片描述2. 打开XCOM串口助手,配置串口参数,打开COM2。在这里插入图片描述3. 打开Proteus,启动仿真开始测试。
    在这里插入图片描述

可以看到,六个字符发送后,会对应控制LED状态,并返回执行信息,功能正常。

代码链接:STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令)

至此,我们已经完成了STM32的串口通信案例,后面,会给大家介绍更多的功能。

HAL库中断方式进行串口通信 文章目录前言一、通过CubeMX配置项目1.设置RCC2.设置SYS3.设置USART4.设置NVIC5.创建项目二、在keil配置代码1.打开通过CubeMX生成的项目2.在main函数前定义全局变量3.在main函数中设置接收中断4.main函数中的while循环里面添加传输代码5.在main函数下面重写中断处理函数6.main函数全部代码7.编译并烧录三、效果四、参考 前言 软件版本: STM32CubeMX:6.30 KEIl:5.31 FlyMcu:0.188 SSCOM 阅读详情

相关推荐

基于STM32与Proteus的温湿度自动控制系统仿真设计全流程

嵌入式系统开发是物联网与智能控制领域的核心技术,其核心原理在于通过微控制器实时采集传感器数据,并依据预设逻辑或算法驱动执行机构,形成闭环控制。这项技术为农业自动化、环境监控等场景提供了高性价比的解决方案。本文聚焦于一个典型的工程实践案例:基于STM32微控制器和Proteus仿真平台,构建一套完整的温湿度自动控制系统。项目详细阐述了从硬件选型、电路仿真到软件编程的全过程,特别深入讲解了如何使用DHT11传感器进行数据采集,以及如何通过矩阵键盘实现人机交互与阈值设定。通过仿真验证,开发者可以在无实物硬件的情况

weixin_30667649的博客 660

基于STM32与Proteus的无叶风扇台灯仿真项目全流程解析

嵌入式系统开发中,仿真技术是验证硬件电路与软件逻辑的关键环节,它能有效降低开发成本与风险。其核心原理在于通过软件模拟微控制器、外围电路及通信模块的协同工作,实现虚拟环境下的功能验证。这一技术对于学习PWM控制、I2C通信、UART串口等基础外设驱动具有重要价值,广泛应用于智能家居、物联网设备的前期方案验证。本文以“无叶风扇台灯”这一具体应用场景为例,详细展示了如何利用Proteus软件与STM32F103C8微控制器,从原理图绘制、代码编写到联合调试的完整仿真流程,其中涉及OLED显示驱动与蓝牙控制等关键技

weixin_30567225的博客 391

基于STM32与Proteus的嵌入式系统全流程开发实战:无叶风扇台灯仿真项目

嵌入式系统开发是连接硬件与软件的核心技术领域,其核心在于通过微控制器(MCU)协调管理各类外设,实现特定功能。其工作原理涉及GPIO控制、定时器/PWM输出、ADC采样、I2C/UART通信等多种底层接口的协同。掌握这项技术对于实现智能硬件、物联网设备至关重要,其应用场景广泛覆盖智能家居、工业控制与消费电子。本文聚焦于一个综合性实战案例——无叶风扇台灯仿真系统,旨在解决学习者从孤立模块练习到**嵌入式系统开发全流程实战**的过渡难题。项目以**STM32F103C8**为核心,在**Proteus仿真软件*

weixin_33937913的博客 339

stm32使用HAL库配置串口中断收发数据(保姆级教程)

先尝试一下简单的串口发送数据,就只用这个函数就足够了,编译运行一下下载到stm32里,打开串口助手,选择串口号还有波特率等参数(这个助手就叫串口调试助手,微软商店可以直接下载,没有的同学,我会在文章末尾放上网盘链接)现象就是一直发送Hello World这是直接使用串口发送数据,并没有用到中断提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

qq_52062938的博客 5万+

用 Proteus 仿真 STM32 PWM 驱动 LED 呼吸灯:一个案例搞懂定时器配置

本文详细介绍了如何使用Proteus仿真STM32 PWM驱动LED呼吸灯,从定时器配置到灯光渐变的全流程解析。通过STM32F103R6的定时器内部配置,结合Proteus仿真工具,实现高效的PWM应用,帮助开发者快速掌握嵌入式开发中的PWM技术。

weixin_30919571的博客 191

基于Proteus与STM32的嵌入式系统仿真开发实战指南

在嵌入式系统开发中,仿真技术是验证硬件设计和软件逻辑的关键环节,它能有效降低开发成本、缩短调试周期。其核心原理是通过软件模拟目标硬件的行为,使开发者能在虚拟环境中运行和测试代码。这项技术的价值在于,它允许工程师在物理原型制作前,就对系统功能、算法和软硬件协同工作进行充分验证,从而规避了因设计缺陷导致的反复修改。在工业控制、智能设备等应用场景中,仿真技术尤其适用于单片机系统的前期验证。本文以STM32单片机为核心,结合Proteus仿真软件,通过一个具体的状态监测系统实例,详细拆解了从电路设计、程序编写到联合

a359798678的博客 770

STM32F103通过HAL库实现串口中断收发数据(手把手一起做)

本文使用STM32F103C8T6芯片,利用cubemx配置了串口通讯代码,并手把手进行了串口通讯实验,包含串口数据的收发,串口中断收发。并介绍了一些基本原理和库函数

Jin_Apple的博客 2万+

基于STM32与Proteus的汽车盲区监测系统仿真设计全流程

嵌入式系统开发是连接硬件与软件的核心技术领域,其原理在于通过微控制器(如STM32)实时采集传感器数据,并执行控制逻辑。这项技术的价值在于能够构建高可靠性、实时响应的智能设备,广泛应用于工业控制、汽车电子和物联网等领域。在汽车电子应用场景中,盲区监测系统(BSD)是提升驾驶安全的关键辅助功能,它依赖于传感器测距与实时报警机制。本文聚焦于利用**STM32单片机**和**Proteus仿真软件**,从零构建一个完整的盲区监测虚拟原型。内容涵盖系统框架设计、传感器信号处理、分级报警逻辑实现,以及在Proteus

weixin_34050519的博客 426

基于proteus和CubeMx的联合温度检测控制仿真系统——微控个人项目

本文以西安电子科技大学通信工程学院大二年级微控课程个人项目为背景,针对基于proteus和cubemx的联合温度控制仿真系统进行手把手教学,包括相关软件如proteus、cubemx,VSPD的下载安装。

yxt230791的博客 3151

从零构建蓝牙防丢器:STM32/51单片机+HC-05模块实战指南

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心在于通过微控制器(MCU)执行特定程序,驱动外围电路与传感器,实现智能化控制。其工作原理涉及硬件接口通信、实时信号处理与低功耗管理。这项技术的价值在于能将抽象算法转化为具体的物理交互,是物联网终端设备的基石。在智能家居、穿戴设备及物品追踪等应用场景中,嵌入式技术发挥着关键作用。本文聚焦于一个典型的嵌入式物联网应用——蓝牙防丢器,详细阐述了如何利用**STM32单片机**与**HC-05蓝牙模块**,从硬件电路设计、软件编程到手机APP联调,完成一个具备

weixin_33946020的博客 512

STM32最新的10个案例及操作

这个案例演示了如何使用STM32微控制器的GPIO(通用输入/输出)引脚和外部按键来控制LED灯的亮灭。这个案例展示了如何使用STM32的UART(通用异步收发器)模块进行串口通信。以下是STM32最新的10个案例及操作。使用按键控制LED灯。

JeeVue的博客 861

基于STM32与Proteus的无叶风扇台灯智能控制系统仿真实践

嵌入式系统是现代智能设备的核心,其通过微控制器协调传感器、执行器与通信模块,实现自动化控制。PWM(脉宽调制)技术是嵌入式开发中的关键,通过调节信号占空比,可精确控制电机转速与LED亮度,广泛应用于电机驱动与调光场景。结合I2C、UART等通信协议,系统能高效连接显示屏、蓝牙等外设,构建稳定的人机交互与远程控制能力。在智能家居领域,这种集成风扇与照明功能的设备,体现了嵌入式技术在节能、舒适与互联方面的价值。本文以STM32F103C8微控制器和Proteus仿真平台为例,详细解析如何通过PWM控制与多协议通

weixin_30814329的博客 322

基于STM32 HAL库的篮球计时记分器:从Proteus仿真到Keil实战开发

在嵌入式系统开发中,微控制器(MCU)通过GPIO、定时器和中断等核心外设与外部器件交互,是实现智能设备控制的基础。其工作原理在于MCU执行预设程序,循环扫描输入、处理数据并驱动输出,从而构建稳定可靠的嵌入式应用。这项技术的价值在于将抽象的逻辑控制转化为具体的物理交互,广泛应用于工业控制、智能家居和消费电子等领域。本文聚焦于一个典型的嵌入式综合应用场景——体育比赛计时记分系统,详细阐述了如何利用STM32的HAL库驱动LCD显示屏和矩阵键盘,并借助Proteus仿真工具在硬件设计前期验证方案可行性。通过模块

weixin_30595035的博客 391

基于Proteus的STM32嵌入式系统仿真实践:无叶风扇台灯项目全流程解析

嵌入式系统开发中,仿真技术是一种在软件层面模拟硬件行为的预验证方法,其核心原理是通过虚拟环境复现目标硬件的逻辑与电气特性。这项技术的核心价值在于能大幅降低早期开发阶段的试错成本,提供可控、可重复的调试环境,尤其适用于多模块联调与极端条件测试。在工程实践中,仿真常与STM32、Proteus、Keil等工具链结合,用于验证GPIO控制、通信协议和外设驱动等基础功能逻辑。本文以“无叶风扇台灯”这一综合性项目为具体应用场景,详细演示了从电路搭建、固件开发到联合仿真的完整流程,涵盖了OLED显示、蓝牙通信等常见嵌入

weixin_34306593的博客 404

基于STM32 HAL库的篮球计时记分器:从硬件驱动到状态机设计的嵌入式实战

在嵌入式系统开发中,GPIO控制、定时器中断与状态机设计是构建实时控制系统的核心技术基础。GPIO负责与外部设备进行数字信号交互,是单片机感知与控制物理世界的基础接口。定时器通过精准的时钟中断,为系统提供毫秒级的时间基准,是实现多任务调度与实时控制的关键。状态机则是一种高效的软件设计模式,通过定义有限的状态和状态间的转移条件,能够清晰、可靠地管理复杂系统的运行逻辑,尤其适用于具有多种工作模式的设备控制。这些技术的工程价值在于,它们共同构成了嵌入式设备响应外部事件、处理并发任务并保持稳定运行的基石,广泛应用于

weixin_33980459的博客 404

STM32篮球计时器实战:Proteus仿真到Keil实机全流程

嵌入式实时计时系统是单片机工程中的典型高精度应用场景,其核心在于中断响应、外设时序与状态机设计的协同优化。HAL库虽简化开发,但在高实时性需求下易因SysTick管理缺陷和阻塞延时引发计时漂移;Proteus仿真则常因忽略LCD写入脉宽、按键扫描竞争等硬件时序细节导致功能失真。本文围绕篮球计时器这一具象载体,深入解析STM32F103平台下HAL库定制化改造、Proteus时序建模、中断优先级防死锁配置及状态机健壮设计等关键技术路径,覆盖从仿真验证、代码移植到PCB焊接调试的完整工程闭环,为嵌入式计时类项目

weixin_34387468的博客 421

STM32与Proteus仿真:构建观光车状态监测系统的虚拟原型

嵌入式系统开发中,仿真技术是验证设计可行性的关键环节。其原理在于通过软件模拟硬件行为,构建虚拟原型,从而在无需物理硬件的情况下,对系统逻辑、代码和交互进行测试。这项技术的核心价值在于能显著降低开发成本、缩短周期,并支持快速迭代,尤其适用于算法验证和教学演示。在工程实践中,基于ARM Cortex-M内核的STM32系列单片机因其丰富生态成为主流选择,而Proteus作为成熟的混合模式仿真软件,能有效模拟包括ADC采集、UART通信在内的多种外设交互。本案例聚焦于一个典型的嵌入式应用场景——观光车状态监测系统

weixin_33860528的博客 418

【全解析 | PTA】浙大版《Python 程序设计》题目集-第一章

Python浙大版PTA题解

wzhh_的博客 5526

STM32智能盆栽灌溉系统:从Proteus仿真到实物制作全流程

嵌入式系统通过微控制器(如STM32)作为核心,结合传感器与执行器,实现对物理世界的感知与控制。其基本原理是采集环境数据,经过逻辑处理后驱动执行机构动作,从而构建自动化系统。这种技术广泛应用于物联网、智能家居和工业控制领域,其核心价值在于将软件逻辑与硬件电路紧密结合,实现高效、可靠的本地或远程控制。一个典型的应用场景是智能农业与环境监控,例如自动灌溉系统。本文以STM32单片机和Proteus仿真软件为核心,详细解析如何设计并实现一个完整的智能盆栽灌溉系统。该系统利用土壤湿度传感器进行数据采集,通过STM3

weixin_34192816的博客 299

DP83848以太网PHY芯片:自动协商与MII/RMII接口实战解析

以太网物理层(PHY)芯片是嵌入式网络通信的核心,负责数字信号与模拟信号的转换,其稳定性和兼容性直接影响系统性能。其工作原理基于IEEE标准,通过管理接口(MDC/MDIO)配置内部寄存器,实现链路速率、双工模式等关键参数的设定。这项技术的核心价值在于为工业控制、汽车电子等严苛环境提供可靠、自适应的网络连接。在实际应用中,PHY芯片通过自动协商(Auto-Negotiation)功能与对端设备智能匹配最佳通信模式,极大提升了产品的易用性。同时,其支持的MII与RMII接口为硬件设计提供了灵活性,前者是标准并

weixin_29189987的博客 374

多视图学习 (Multi-View Learning)

多视角/多视图学习(Multi-view learning)是陶大成提出的一个研究方向。我们都知道,在机器学习中样本可以用不同的特征(如图片可以用LBP、SIFT等特征)来表示,或者从不同的角度进行观察(如从前后左右观察一个对象),甚至是采用不同的传感器来观测(如RGB摄像头,Depth摄像头),这些不同的观测手段、角度或特征在多视角学习中称为“视角”。多视角学习通过对不同的视角进行统一分析和研究,希望能够得到更好的分类或聚类等等的效果。

CarpeDiem 3万+
上一篇: STM32-04基于HAL库(CubeMX+MDK+Proteus)中断案例(按键中断扫描)
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值