使用ARM Cortex M架构的STM32微控制器由于其功能,成本和性能而变得越来越流行,并已在许多应用中使用。在之前的教程中,我们已经使用Arduino IDE编程了STM32F103C8。使用Arduino IDE对STM32进行编程非常简单,因为有许多库可供各种传感器执行任何任务,我们只需要在程序中添加这些库即可。这是一个简单的过程,您可能没有深入了解ARM处理器。因此,现在我们进入称为ARM编程的下一层编程。这样,我们不仅可以改善代码结构,而且可以通过不使用不必要的库来节省内存空间。
意法半导体 推出了一种名为STM32Cube MX的工具,该工具会根据外围设备和所选的STM32板生成基本代码。因此,我们无需担心基本驱动程序和外围设备的编码。此外,可以根据需要在Keil uVision中使用此生成的代码进行编辑。最后,使用STMicroelectronics的ST-Link编程器将代码刻录到STM32中。
在本教程中,我们将通过一个简单的将按钮和LED与STM32F103C8 Blue Pill板连接的简单项目,来学习如何使用Keil uVision和STM32CubeMX对STM32F103C8进行编程。我们将使用STM32Cube MX生成代码,然后使用Keil uVision编辑并将代码上传到STM32F103C8。在详细介绍之前,我们将首先了解ST-LINK编程器和STM32CubeMX软件工具。
ST-LINK V2
所述ST-LINK / V2是在电路调试器和编程为STM8和STM32微控制器系列。我们可以使用此ST-LINK将代码上传到STM32F103C8和其他STM8&STM32微控制器。单线接口模块(SWIM)和JTAG /串行线调试(SWD)接口用于与应用板上的任何STM8或STM32微控制器进行通信。由于STM32应用程序使用USB全速接口与Atollic,IAR,Keil或TASKING集成开发环境进行通信,因此我们可以使用该硬件对STM 8和STM32微控制器进行编程。
上面是意法半导体(STMicroelectronics)的ST-LINK V2加密狗的图像,该加密狗支持所有STM32 SWD调试接口,一个简单的4线接口(包括电源),快速且稳定。有多种颜色可供选择。主体由铝合金制成。它具有蓝色LED指示灯,用于观察ST-LINK的工作状态。如上图所示,引脚名称清楚地标记在外壳上。它可以与Keil软件连接,在该程序中可以将程序刷新到STM32微控制器。因此,让我们在本教程中了解如何使用该ST-LINK编程器对STM32微控制器进行编程。下图显示了ST-LINK V2模块的引脚。
注意:第一次将ST-Link与计算机连接时。我们需要安装设备驱动程序。根据您的操作系统,可以在此链接中找到设备驱动程序。
STM32CubeMX
STM32CubeMX工具是意法半导体STMCube的一部分。该软件工具可减少开发工作量,减少时间和成本,从而简化了开发过程。STM32Cube包含STM32CubeMX,这是一种图形软件配置工具,允许使用图形向导生成C初始化代码。该代码可以在各种开发环境中使用,例如keil uVision,GCC,IAR等。您可以从以下链接下载此工具。
STM32CubeMX具有以下功能
- 销冲突解决器
- 时钟树设置助手
- 功耗计算器
- 该实用程序执行MCU外围设备配置,例如GPIO引脚,USART等
- 该实用程序为中间件堆栈(如USB,TCP / IP等)执行MCU外围设备配置
所需材料
硬件
- STM32F103C8蓝色药丸板
- ST-LINK V2
- 按钮
- LED
- 面包板
- 跳线
软件
- STM32CubeMX代码生成工具(链接)
- Keil uVision 5(链接)
- ST-Link V2的驱动程序(链接)
电路图和连接
下面是使用按钮简单地将LED与STM32板连接的电路图。
ST-LINK V2和STM32F103C8之间的连接
此处,STM32 Blue Pill电路板由连接到计算机USB端口的ST-LINK供电。因此,我们无需单独为STM32供电。下表显示了ST-Link和Blue pill board之间的连接。
STM32F103C8 |
ST-Link V2 |
地线 |
地线 |
时钟 |
时钟 |
软件 |
软件 |
3V3 |
3.3伏 |
LED和按钮
当按下按钮时,LED用于指示来自蓝色药丸板的输出。LED的阳极连接到Blue Pill板的PC13引脚,阴极接地。
连接了一个按钮,为Blue Pill板的引脚PA1提供输入。我们还必须使用值为10k的上拉电阻,因为释放按钮时,该引脚可能会在没有任何输入的情况下浮动。按钮的一端接地,另一端接地至PA1引脚,并且10k的上拉电阻也连接至Blue Pill板的3.3V。
使用Keil uVision和ST-Link将程序创建并刻录到STM32中
步骤1:-首先安装ST-LINK V2的所有设备驱动程序,软件工具STM32Cube MX和Keil uVision,然后安装STM32F103C8的必要软件包。
步骤2:-第二步打开>> STM32Cube MX
步骤3:-然后点击“ 新建项目”
步骤4:-之后搜索并选择我们的微控制器STM32F103C8
步骤5:-现在出现STM32F103C8的引脚分配草图,在这里我们可以设置引脚配置。我们还可以根据我们的项目在“外围设备”部分中选择我们的引脚。
步骤6:-您也可以直接单击该引脚,然后会出现一个列表,现在选择所需的引脚配置。
步骤7:-对于我们的项目,我们选择PA1作为GPIO INPUT,选择PC13作为GPIO OUTPUT,并将SYS debug作为SERIAL WIRE,此处仅连接ST-LINK SWCLK和SWDIO引脚。选定和配置的引脚以绿色显示。您可以在下图中注意到这一点。
步骤8:-接下来, 在Configuration(配置) 选项卡下,选择GPIO,以为我们选择的引脚设置GPIO引脚配置。
步骤9:-接下来,在此引脚配置框中,我们可以为正在使用的引脚配置 用户标签 ,即用户定义的引脚名称。
步骤10:-之后,点击 Project >> Generate Code 。
步骤11:-现在出现项目设置对话框。在此框中选择您的项目名称和位置,然后选择开发环境。我们正在使用Keil,因此请选择MDK-ARMv5作为IDE。
第12步:-在 “代码生成器” 选项卡下,选择 “仅复制所需的库文件” ,然后单击“确定”。
步骤13:-现在出现代码生成对话框。选择“ 打开项目” 以在Keil uvsion中自动打开项目。
步骤14:-现在,将打开Keil uVision工具,在STM32CubeMx中使用我们生成的代码打开,带有相同的项目名称,必要的库和为我们选择的引脚配置的代码。
步骤15:-现在,我们只需要包括在按下按钮并在GPIO输入(引脚PA1)上释放按钮时在输出LED(引脚PC13)上执行某些操作的逻辑。因此,选择我们的main.c程序以包含一些代码。
步骤16:-现在将代码添加到 while(1) 循环中,请参见下图,其中我突出显示了该部分以连续运行代码。
而(1){if(HAL_GPIO_ReadPin(BUTN_GPIO_Port,BUTN_Pin)== 0)// =>按下DETECTS按钮{HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,1); //要在按下按钮时使输出变高d} else {HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,0); //当按下按钮时使输出为低}}
步骤17:-编辑完代码后,单击“调试”选项卡下的“ 目标选项” 图标,选择ST-LINK调试器
另外,单击“ 设置” 按钮,然后在“ Flash下载” 选项卡下,选中“ 重置并运行” 复选框,然后单击“确定”。
步骤18:-现在单击Rebuild(重建)图标以重建所有目标文件。
步骤19:-现在,您可以在电路连接就绪的情况下将ST-LINK插入计算机,然后单击DOWNLOAD(下载)图标或按F8键以使用已生成和编辑的代码闪烁STM32F103C8。
步骤20:-您会注意到keil uVision窗口底部的闪烁指示。
Keil编程STM32板的输出
现在,当我们按下按钮时,LED点亮,而当我们释放按钮时,LED熄灭。
程序
我们在生成的程序中添加的主要部分如下所示。下面的代码需要包含在STM32CubeMX生成的 main.c 程序的 while(1 )中。您可以返回到第15步到第17步,以了解如何将其添加到 main.c 程序中。
而(1){if(HAL_GPIO_ReadPin(BUTN_GPIO_Port,BUTN_Pin)== 0)// =>按下DETECTS按钮{HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,1); //要在按下按钮时使输出变高d} else {HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,0); //当按下按钮时使输出为低}}
最后给出的视频中也解释了创建项目和将项目上传到STM32板上的完整过程。另外,下面给出了main.c文件的完整代码,包括上面给出的代码。
此外,您可以在此处找到我们完整的STM32项目集。