购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 设计

实例:LED的驱动和控制

本节将通过一个LED驱动和控制实例来说明基于这些软件开发STM32G0系列MCU应用的基本设计流程。

1.3.1 生成简单的工程

该实验使用ST公司提供的STM32G0 Nucleo开发板,在开发板上有一个LED连接到STM32G0 MCU的PA5引脚上。

该设计的目标是使用STM32CubeMX软件工具生成一个简单的工程,主要步骤如下。

(1)在Windows 10操作系统桌面上,找到并用鼠标左键双击STM32CubeMX图标,打开STM32CubeMX软件工具。

(2)如图1.23所示,在STM32CubeMX主界面中,单击Start My project from MCU标题下的ACCESS TO MCU SELECTOR按钮。

图1.23 STM32CubeMX主界面

(3)弹出New Project from a MCU/MPU界面,如图1.24所示。在该界面左侧MCU/MPU Filters窗口中的Part Number标题右侧的文本框内输入STM32G071RB。在右侧窗口底部显示两个相关的器件系列,一个是STM32G071RBIx,另一个是STM32G071RBTx。

图1.24 New Project from a MCU/MPU界面

在该设计中,双击STM32G071RBTx选项。

(4)出现Pinout & Configuration界面,如图1.25所示。在该图右下角黑框内的文本框中输入PA5,图中用箭头所指的芯片引脚位置高亮闪烁显示,这表示PA5引脚在该芯片上的位置。

图1.25 Pinout & Configuration界面

(5)如图1.26所示,鼠标左键单击高亮闪烁显示的PA5引脚,出现浮动菜单。在浮动菜单中,选择GPIO_Output选项,该选项表示将PA5引脚设置为输出模式。

图1.26 设置引脚PA5的驱动模式

(6)如图1.27所示,单击Project Manager标签。在该标签界面中,按如下内容设置参数。

图1.27 Project Manager标签界面

①Project Name:LED_Control(用户可以自己给工程命名不同的名字)。

②Project Location:F:\STM32G0_example\example_2_1(用户可以通过单击Browse按钮,选择使用不同的工程路径)。

③Application Structure:Basic.

④Toolchain Folder Location:F:\STM32G0_example\example_2_1\LED_Control\(根据前面设置的工程路径和工程名字默认生成)。

⑤Toolchain/IDE:MDK-ARM.

⑥Min Version:V5.27.

(7)单击图1.27右上角的GENERATE CODE按钮。

(8)等到生成代码的过程结束后,弹出Code Generation界面,如图1.28所示。

图1.28 Code Generation界面

(9)单击图1.28中的Open Project按钮,将启动KeilμVision集成开发环境。

1.3.2 添加设计代码

在Keil μVision集成开发环境中,添加和修改设计代码,以实现对LED的驱动和控制。本节也将就所涉及的一些知识点进行简要说明。

(1)如图1.29所示,在KeilμVision集成开发环境左侧Project窗口中,以树状结构给出了工程(LED_Control)的软件代码组成结构。

图1.29 KeilμVision集成开发环境主界面

①在子目录Application/MDK-ARM中,包含一个名字为startup_stm32g071xx.s的文件。该文件是使用纯粹的汇编语言所编写的启动引导代码。在该代码中,给出了向量表的位置和定义说明。对于该段代码将在本书后面章节进行详细说明。

注: 这段代码充分说明了汇编语言的重要性,嵌入式系统的启动引导代码都需要使用汇编语言编写,为什么C语言不能代替汇编语言来充当这个角色呢?因为C语言是跨平台的语言,对嵌入式系统底层硬件的控制能力较弱,也就是说,C语言的很多语法无法与底层硬件的驱动和配置直接对应,因此必须通过汇编语言对底层进行初始化。

②在子目录Application/User中,包含main.c文件,该文件是整个工程的主文件;stm32g0xx_it.c,该文件提供了异常句柄的框架,在不同异常句柄框架内,用户可以添加定制的异常事件处理代码;stm32g0xx_hal_msp.c文件,该文件提供了对主堆栈指针的初始化操作代码。

③Drivers/STM32G0xx_HAL_Driver文件夹,该文件夹下的文件提供了对STM32G071 MCU内部集成外设控制器的操作的应用程序接口(Application Program Interface,API)函数。当用户根据MCU的不同应用场景编写应用程序代码时,可以直接调用这些API函数,应用程序开发人员并不需要知道底层外设控制器的更多细节,这样显著提高了应用程序代码的编写效率。

④Drivers/CMSIS文件夹,该文件夹内包含system_stm32g0xx.c文件,该文件提供了系统初始化函数,用于主程序的调用。CMSIS是Arm提供的Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard,CMSIS)。在本书后续章节中将详细介绍CMSIS。

(2)双击图1.29左侧Project窗口中的main.c文件,打开该文件。定位到该文件的第94行,如图1.30所示。将在符号“{”和/*USER CODE END WHILE*/之间添加设计代码。

图1.30 要添加代码的位置

(3)添加下面两行设计代码。

添加完设计代码后的结果如图1.31所示。

图1.31 添加完设计代码后的结果

注: (1)必须将用户代码添加到/*USER CODE BEGIN WHILE*/和/*USER CODE END WHILE*/的区域,该区域为添加用户代码而保留。

(2)当添加代码的时候,会弹出提示框来帮助用户加快代码的添加速度,以及帮助用户查找所需要的函数。

1.3.3 编译和下载设计

本节对设计进行编译,并下载设计到硬件上进行验证,主要步骤如下。

(1)在KeilμVision主界面主菜单下,选择Project->Build Target或者选择Rebuild all target files,对设计进行编译。在Build Output窗口中,显示了对设计进行编译过程的信息,如图1.32所示。当对设计进行成功编译后,在Build Output窗口中显示下面的信息:

图1.32 对设计进行编译过程的信息

(2)在KeilμVision主界面主菜单下,选择Debug->Start/Stop Debug Session,或者在主界面的工具栏中单击 按钮。

(3)弹出ST-LINK Firmware Update界面,如图1.33所示。在该界面中,提示“Old ST-LINK firmware detected.Do you want to upgrade it?”信息(检测旧的ST-LINK固件。你是不是想更新它?)

(4)单击Yes按钮,退出ST-LINK Firmware Upgrade界面。

(5)弹出ST-Link Upgrade界面,如图1.34所示。在该界面中,先单击左上角的Device Connect按钮,然后再单击右下角的Yes>>>>按钮,开始更新ST-LINK固件程序。

图1.33 ST-LINK Firmware Upgrade界面

图1.34 ST-LINK Upgrade界面

(6)当更新完固件后,弹出ST-Link Upgrade界面。在该界面中,提示upgrade is successful信息。

(7)单击确定按钮,退出ST-Link Upgrade界面。

(8)退出图1.34所示的界面。

(9)重新执行步骤(2),进入调试器界面。

注: 关于该调试的使用方法,本书后续章节将详细介绍。

(10)在调试界面主菜单中,选择Debug->Run开始运行程序。

(11)在KeilμVision主界面主菜单下,再次选择Debug->Start/Stop Debug Session,退出调试器界面。

(12)在Keil μVision主界面主菜单下,选择Flash->Download,将该设计下载到STM32G071 MCU内的Flash存储器中。

(13)按STM32G0 Nucleo开发板上的RESET按钮。

思考与练习1.5:当执行完步骤(10)后观察STM32G0 Nucleo开发板上LED的变化情况,当执行完步骤(13)后观察STM32G0 Nucleo开发板上LED的变化情况。

思考与练习1.6:通过简单的分析过程,说明ST应用工程的程序架构,这种架构为应用程序的开发所带来的好处。

思考与练习1.7:尝试在main.c文件中修改控制LED的代码,以改变LED的闪烁效果。 vW/c2PwsiiapcTBSsguOQoL0WifDy0HlTgNKI7nNy1F71nCRIJSkehSLUWMcPo0v

点击中间区域
呼出菜单
上一章
目录
下一章
×