APP下载

基于CubeMx软件的STM32单片机仿真实验方法

2024-01-02郭海如李幼凤武云云胡绪龙

湖北工程学院学报 2023年6期
关键词:字符中断串口

孔 霞,郭海如,李幼凤,万 兴,武云云,胡绪龙

(湖北工程学院 计算机与信息科学学院,湖北 孝感 432000)

Proteus 软件[1-3]是英国 Labcenter electronics 公司研发的 EDA工具软件,由 ISIS(原理图设计与仿真平台)、高级布线和编辑软件平台(advanced routing and editing software,ARES)组成,能够在计算机上完成从原理图设计、 电路分析与仿真、单片机代码调试与仿真、系统测试与功能验证到 PCB 板生成的完整电子产品研发过程。Proteus 是目前唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真软件进行三合一的一个设计平台,它支持多种处理器类型。在编译方面,Proteus支持IAR、Keil和MPLAB等多种编译器。传统的单片机仿真实验平台结合使用 Proteus 软件和Keil 软件[4-6],该方法可以设计多种类型的实验项目,扩展普通实验箱无法完成的大型综合实验项目,降低实验室的建设和维护成本。然而,该方法在实践项目开发过程中涉及到很多汇编语言文件,项目开发文件的零散建立方式繁琐且容易出错。本文在传统的 Proteus和Keil 仿真实验平台中加入CubeMx软件[7-8],该软件用图形化方法生成工程项目的初始化程序文件,可以避免大量的程序初始化工作,大量减少了用户的进行单片机开发、创新的工作量。该方法可以使单片机的应用、开发和设计过程避免汇编语言的参与,对初学者更加友好,降低了单片机开发和设计的门槛。

本文的STM32单片机仿真实验方法摒弃用汇编语言开发单片机的理念,在基于 Proteus和Keil 的仿真实验平台中引入 CubeMx,利用图形化方法生成工程项目的初始化 C 程序文件。CubeMx 是一款图形化软件设置工具,使用图形化向导来生成 C 初始化代码文件,用户仅需编写具体案例所需的子函数即可,能够减少用户的编程工作量、规范各个部件的初始化过程以及流程。新方法可以引导用户快速入门和上手,在开发过程中可以规范项目初始化文件以及开发流程,帮助用户更加流畅、有规划地进行单片机的开发和设计。因此,笔者所在学校线上、线下混合式单片机课程线上课程拟采用Proteus、Keil 和CubeMx软件仿真STM32[7-13]系列单片机,并以全国大学生蓝桥杯竞赛、智能汽车竞赛为着力点(嵌入式竞赛以STM32 单片机作为考核对象),该实验仿真与后续实物实践所实现的功能完全一致,仿真实验与实践实验环环相扣,可以逐步增强工程实践要求,提升同学动手、动脑能力,扩展学生的视野,能够大胆创新。这种模式的仿真、实践实验相结合侧重实践和创新能力的开发,为相关的学科竞赛创新做了很好的铺垫。

1 基于CubeMx软件的仿真

利用Proteus、Keil和CubeMx软件,设计并实现了一种新的单片机仿真方法。其中,Proteus是普遍适用的EDA工具,是集电路仿真、PCB设计和虚拟模型为一体的设计平台。CubeMX是一款图形化软件设置工具,允许使用图形化向导来生成C初始化代码,用户仅需编写一些具体案例所需的子函数即可,它能够减少和规范各个部件的初始化过程以及流程。本文以串口通信实验为实例,阐述CubeMX、Keil和Proteus在STM32系列单片机实验实践中的应用,具体对STM32F103R6款芯片进行系统的仿真和程序设计。本文实例可以直接应用于蓝桥杯竞赛中,也可以推广到单片机到其他应用领域。

2 具体的特色实验案例设计

以“STM32串口”实验为例,介绍如何使用CubeMX配置STM32串口操作初始化文件。然后根据实验设计完成相关的程序编码,并在Proteus中进行仿真运行和验证,完成线上仿真实验后用户能够通过实物焊接电板进行蓝桥杯竞赛和智能汽车竞赛的创新实践。STM32串口实验中,通过通过虚拟串口软件连接Proteus中的STM32和串口助手,编码从STM32发送信息,在串口助手上查看接收字符;在串口助手中发送字符串到开发板,在LCD中显示相应的字符串信息。

2.1 仿真电路设计

这里实例选择STM32芯片型号:STM32F103R6,串口实验原理图如图1所示。硬件部分由PA2、PA3引脚作为系统的外部中断线,PB8、PB9、PB10、PB11和PB12作为LCD显示输出线,完成字符的传输和显示。

2.2 软件设计和配置

在总体的原理设计之后,建立项目工程所需的流程化和规范化的项目文件,就是以下所述的步骤 1和步骤 2实现的内容。步骤 3是具体串口收发信息时对每个字符进行实时处理的流程和实施方法、设置说明。软件仿真设计的总体流程图如图2所示,具体实施步骤、设置内容见步骤 3中的1) ~ 6)。

图2 总体流程图

步骤1 CubeMX配置。在实验配置中,LCD液晶屏需要加载驱动文件,时钟源选择内部高速时钟,除了串口配置之外,其他配置和Proteus和Keil 中的LED灯实验配置一致。具体如下:1)启动CubeMX软件,新建工程并命名;2)依据原理图中的处理器,选择型号为STM32F103R6的处理器;3)配置时钟源及端口在时钟树选择内部晶振作为高效时钟;4)配置串口USART2,波特率设为19200,数据流向设为发送信号和接收信号,同时配置中断分组和串口中断优先级,将UASRT2全域中断的优先级设为1;5)设置工程输出配置参数,自动生成代码,打开建好的工程文件,进入工程后打开main函数所在的文件夹。

步骤2 工程移植。将LCD的驱动文件“lcd.c”、“lcd.h”和“ascii.h”复制到工程相关的文件夹,将其中的.c文件加载到工程中。

步骤3 编程实现。

1) 在main.c源程序文件中的添加预处理命令包含LCD相关的头文件,进行LCD初始化,具体参照图3,其中第108行代码开启串口接收中断,用户可以在所建工程的main.c目录下找到相应的头文件。第109行代码是用户自己编写所需传送的字符的函数,用户可依据需要编写和修改该函数,但是应当有等待发送完成、检查字符结束标志等。

图3 LCD初始化设置程序

2) 建立编写所需发送信息的函数,如图3所示,第109行代码是用户自己编写所需传送的字符的函数的调用,通过调用该函数实现数据的发送,用户可依据需要编写和修改该函数,但是应当有“等待发送完成”、“检查字符串结束标志”等。

等待接收完成可以通过判断全局变量标志位RXOVER 实现,接收完成后,标志位RXOVER需要在main函数中清零,以便下次使用,核心代码如下。

/* USER CODE BEGIN WHILE */

while (1)

{if(RXOVER==1) //接收是否完成

{ LCD_Disp_Strings(LCD_PAGE6, 5, (uint8_t*)USART_RXBUF, 15, BACK_REVERSE);

/清空接收缓冲区

RXOVER=0; //清除接收标志

HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);//使能接收中断

}

/* USER CODE END WHILE */

3) 编写中断服务程序,串口的接收相关函数查找方法如上所述,实例中,中断文件中变量的定义和服务程序如图4所示。

图4 中断文件变量的定义与中断服务程序

接收字符完成时,需要在中断服务程序中对RXOVER置“1”,接收中断服务程序流程如图5所示,中断服务程序核心代码如下。

图5 接收中断服务程序流程图

/* USER CODE BEGIN USART2_IRQn 1 */

HAL_UART_Receive_IT(&huart2,(uint8_t *)aRxBuffer,1);//串口接收,每次接收1位

if(接收完成)

{ RXCUNT=0;//接收缓冲区字节数清“0”

RXOVER=1;// 接收完成标志位置“1”;

}

else

{ 接收字符;

++RXCUNT; //接收缓冲区字节数+1

}

/* USER CODE END USART2_IRQn 1 */

4) 编译链接,编译链接之后,已经将.hex文件加载到Proteus中,还需要设置其中的串口和终端波特率为19200。

5) 安装虚拟串口,增加虚拟串口。

6) 打开串口助手,选择端口号并设置波特率为19200,串口打开后,指示灯变为红色。

3 仿真实验结果与讨论

仿真实验运行后,能够在虚拟终端接收到编程需要发送的字符。实例仿真中,输入单个字符6次后,液晶屏能够看到接收到的5个字符(输入的最后一个是终止符),结果如图6所示。

图6 虚拟仿真实验结果显示

案例处理字符串时采用单个字符处理方式,可以尝试直接采用字符串的方式进行串口发送接收。

参考代码如下:

uint8_t rx[100];

char str[40];

sprintf(str, "Welcome to HBEU ");

HAL_UART_Transmit(&huart2,(unsigned char *)str, strlen(str), 50);

HAL_Delay(500);

HAL_UART_Receive_IT(&huart2, rx, 5);

4 结语

本文采用Proteus、Keil和CubeMx相结合,避免了和汇编语言在开发单片机时的直接应用,并且利用CubeMX图形化方法使整个单片机的开发过程规范化、流程化,用户只需要对应不同的案例实践编写相关的C源程序就可以完成整个单片机的开发和实现。本文将Proteus、Keil和CubeMx相结合进行STM32仿真引入单片机实验课堂在全国属于首创,笔者所在学校相应的“单片机原理及应用”线上、线下混合课程也已经上线。该方法的线上课程采用标准库,帮助深入理解驱动程序原理,Proteus、Keil和CubeMx仿真与后续实物实践所实现的功能能够做到完全一致,仿真与实践环环相扣,互为补充,这种新的仿真方法响应国家工程认证教育号召,加强工程训练,提升大学生创新、创造能力。

本文的仿真实验方法降低了单片机开发的门槛,使得单片机的开发更加规范、易操作且易理解,激发了广大学生群体的兴趣,使得单片机的创新、创造变得更加简易。本文通过STM32串口实验实例具体展示了Proteus、Keil和CubeMx的STM32系列单片机仿真实验的单片机外围硬件设计(文中主要是LCD)、软件设计、设置和仿真调试的整个过程。在实践过程中,基于Proteus、Keil和CubeMx的STM32系列单片机实验在线上、线下混合课程中取得了较好的效果和反响,使低年级学生和非本专业学生能动手实际编程完成实践任务,还可以利用所学知识进行创新性的设计和开发,参加全国蓝桥杯竞赛、智能汽车竞赛。该仿真系统已经在为笔者所在学校参加蓝桥杯竞赛、智能汽车竞赛服务,学校获得了蓝桥杯全国 “优胜学校”荣誉称号,时至今日学生赢得智能车全国总决赛特等奖2项,全国总决赛一等奖7项,相信在未来越来越多的学科竞赛中我们能够取得越来越好的竞赛成绩。

猜你喜欢

字符中断串口
寻找更强的字符映射管理器
浅谈AB PLC串口跟RFID传感器的通讯应用
字符代表几
一种USB接口字符液晶控制器设计
消失的殖民村庄和神秘字符
跟踪导练(二)(5)
千里移防,卫勤保障不中断
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
基于并行控制的FPGA多串口拓展实现