天南地北客
发表于: 2018-11-30 20:41:05 | 显示全部楼层

使用ARM Cortex-M架构的STM32微控制器现在变得越来越流行,并且由于其功能、成本和性能而被用于许多应用中。我们在之前的教程中使用Arduino IDE对STM32F103C8进行了编程。使用Arduino IDE编程STM32非常简单,因为有许多库可供各种传感器执行任何任务,我们只需要在程序中添加这些库。这是一个简单的过程,您可能无法深入了解ARM处理器。所以现在我们进入了一个名为ARM编程的下一级编程。通过这种方式,我们不仅可以改进代码结构,还可以通过不使用不必要的库来节省内存空间。


意法半导体(ST)推出了一款名为STM32Cube MX的工具,可根据外设和选定的STM32开发板生成基本代码。因此,我们不需要担心基本驱动程序和外围设备的代码。此外,这个生成的代码可以在Keil uVision中根据需要进行编辑。最后,使用STMicroelectronics的ST-Link编程器将代码烧录到STM32中。


在本篇文章中,我们将学习如何使用Keil uVision和STM32CubeMX对STM32F103C8微控制器进行编程,方法是将按钮和LED与STM32F103C8 Blue Pill板连接起来。我们将使用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集成开发环境进行通信,因此我们可以使用此硬件对STM8和STM32微控制器进行编程。

ST-LINK-V2-in-Circuit-Debugger-and-Programmer.jpg


以上是意法半导体ST-LINK V2编程器的图片,支持全系列STM32 SWD调试接口,简单的4线接口(包括电源),快速稳定。它有多种颜色可供选择。外壳由铝合金制成。它有一个蓝色LED指示,因为它用于观察ST-LINK的工作状态。正如我们在上图所示,外壳上的引脚名称已清楚标记。它可以与Keil软件连接,可以将程序闪存到STM32微控制器。因此,让我们在本篇文章中看到这个ST-LINK编程器如何用于编程STM32微控制器。下图显示了ST-LINK V2模块的引脚。

ST-LINK-V2-Pinout.png

注意:首次将ST-Link与计算机连接时。我们需要安装设备驱动程序。根据您的操作系统,可以在此链接中找到设备驱动程序。


STM32CubeMX

STM32CubeMX工具是STMCube的一部分。该软件工具通过减少开发工作量、时间和成本,使开发变得简单。 STM32Cube包括STM32CubeMX,它是一种图形化软件配置工具,允许使用图形向导生成C初始化代码。该代码可用于各种开发环境,如keil uVision、GCC、IAR等。您可以从以下链接下载此工具。


STM32CubeMX具有以下功能

●    Pin out-conflict解决方案

●    时钟树设置助手

●    功耗计算器

●    执行MCU外设配置的实用程序,如GPIO引脚、USART等

●    一种实用程序,用于为USB,TCP / IP等中间件堆栈执行MCU外设配置


所需的组件

●    STM32F103C8开发板

●    ST-LINK V2编程器、

●    按钮

●    LED指示灯

●    面包板

●    跳线

●    STM32CubeMX代码生成工具(链接

●    Keil uVision 5(链接

●    ST-Link V2的驱动程序(链接


电路图和连接

下面是使用按钮简单地将LED与STM32开发板连接的电路图。

Circuit-Diagram-for-Programming-STM32F103C8-using-Keil-uVision-and-STM32CubeMX.png


ST-LINK V2和STM32F103C8之间的连接

这里的STM32 Blue Pill开发板由ST-LINK供电,ST-LINK连接到计算机的USB端口。所以我们不需要单独为STM32供电。下表显示了ST-Link和Blue Pill开发板之间的连接。

STM32F103C8
ST-Link V2
GND
GND
SWCLK
SWCLK
SWDIO
SWDIO
3V3
3.3V

LED和按钮

当按下按钮时,LED用于指示开发板的输出。 LED的阳极连接到Blue Pill板的引脚PC13,阴极接地。


按钮连接到开发板的输入引脚PA1。我们还必须使用10k的上拉电阻,因为当释放按钮时,引脚可能在没有任何输入的情况下浮动。按钮的一端接地,另一端接到引脚PA1,上拉电阻10k也连接到Blue Pill开发板的3.3V。

Circuit-Hardware-for-Programming-STM32F103C8-using-Keil-uVision-and-STM32CubeMX.jpg

跳转到指定楼层
天南地北客
发表于: 2018-11-30 21:07:18 | 显示全部楼层

使用Keil uVision和ST-Link创建程序并将其烧录到STM32中

第1步: - 首先安装ST-LINK V2的所有设备驱动程序,软件工具STM32Cube MX和Keil uVision,并为STM32F103C8安装必要的软件包。

第2步: - 第二步是打开STM32Cube MX

第3步: - 然后单击“ New Project

Open -STM32Cube-MX.png


第4步: - 搜索并选择我们的微控制器STM32F103C8

Choose-STM32F103C8-for-Programming.png

第5步: - 现在出现STM32F103C8的引脚示意图,这里我们可以设置引脚配置。我们也可以根据我们的项目在外围设备部分选择我们的引脚。

STM32F103C8-Pinout.png

第6步: - 您也可以直接单击引脚并显示一个列表,现在选择所需的引脚配置。

Select-Pin-Configuration-for-STM32F103C8-in-STM32CubeMX.png

第7步: - 对于我们的项目,我们选择PA1作为GPIO INPUT,PC13作为GPIO OUTPUT和SYS调试作为SERIAL WIRE,这里只连接ST-LINK SWCLK和SWDIO引脚。所选和配置的引脚显示为绿色。您可以在下面的图像中注意到。

Selected-IO-Configuration-for-STM32F103C8-in-STM32CubeMX.png

第8步: - 接下来在Configuration选项卡下,选择GPIO以设置我们选择的引脚的GPIO引脚配置。

Select-the-Selected-Pins-in-Configuration-tab-of-STM32CubeMX.png

第9步: - 接下来在此引脚配置框中,我们可以为我们正在使用的引脚配置用户标签,即用户定义的引脚名称。

Configure-User-Label-in-STM32CubeMX.png

第10步: - 之后单击Project >> Generate Code

Generate-Code-for-Programming-STM32F103C8-using-STM32CubeMX.png

第11步: - 现在出现项目设置对话框。在此框中选择您的项目名称和位置,然后选择开发环境。我们正在使用Keil,因此选择MDK-ARMv5作为IDE。

Select-MDK-ARMv5-a- IDE-in-Keiluvision.png

第12步: - 在Code Generator选项卡下,单击Next,选择仅复制必要的库文件,然后单击OK。

Copy-necessary-Library-files-for-Programming-STM32F103C8.png

第13步: - 现在出现代码生成对话框。选择Open Project以自动打开项目Keil uvsion中生成的代码。

Open-the-Generated-code-for-Programming-STM32F103C8_0.png

第14步: - 现在Keil uVision工具打开,我们在STM32CubeMx中生成的代码具有相同的项目名称,其中包含为我们选择的引脚配置的必要库和代码。

Generated-Code-in-Keiluvision-for-Programming-STM32F103C.png

第15步: - 现在我们只需要在按下按钮并在GPIO输入(引脚PA1)上释放时,在输出LED(引脚PC13)上包含逻辑以执行某些操作。所以选择我们的main.c程序来包含一些代码。

Edit-main-Code-for-Programming-STM32F103C8.png

第16步: - 现在在while(1)循环中添加代码,请参阅下面的图像,其中我突出显示该部分以连续运行代码。

  1. while (1)
  2. {
  3.   if(HAL_GPIO_ReadPin(BUTN_GPIO_Port,BUTN_Pin)==0) //=> DETECTS Button is Pressed
  4. {         
  5.     HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,1); //To make output high when button pressesd
  6. }

  7. else
  8. {
  9.     HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,0); //To make output Low when button de pressed
  10. }
  11. }
复制代码

Edit-Code-for-GPIO-pin-of-STM32F103C8.png


第17步: - 完成代码编辑后,单击调试选项卡下的选项目标图标选择ST-LINK Debugger

Select-ST-Link-Debugger.png

此外,单击“设置”按钮,然后在“Flash下载”选项卡下,选中“重置并运行”复选框,然后单击“确定”。

Set-up-for-Programming-STM32F103C8-using-KeiluVision.png

第18步: - 现在单击Rebuild图标以重建所有目标文件。

Rebuild-all-target-files-for-Programming-STM32F103C8.png

第19步: - 现在您可以将ST-LINK插入计算机并准备好电路连接,然后单击DOWNLOAD图标或按F8以使用您生成和编辑的代码刷新STM32F103C8。

Flash-STM32F103C8.png

第20步: - 您可以注意到keil uVision窗口底部的闪烁指示。

Flashing-STM32F103C8-using-KeiluVision.png

Keil编写STM32开发板的输出

现在,当我们按下按钮时,LED亮起,当我们松开时,LED熄灭。

Testing-Keil-Programmed-STM32-Board.jpg


程序

我们在生成的程序中添加的主要部分如下所示。下面的代码需要包含在STM32CubeMX生成的main.c程序的while(1)中。您可以返回第15步到第17步,了解如何在main.c程序中添加它。

  1. while (1)
  2. {
  3.   if(HAL_GPIO_ReadPin(BUTN_GPIO_Port,BUTN_Pin)==0) //=> DETECTS Button is Pressed
  4. {         
  5.     HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,1); //To make output high when button pressesd
  6. }

  7. else
  8. {
  9.     HAL_GPIO_WritePin(LEDOUT_GPIO_Port,LEDOUT_Pin,0); //To make output Low when button de pressed
  10. }
  11. }
复制代码

以上就是本篇文章的全部内容。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 28 | 回复: 50



手机版|

GMT+8, 2024-4-16 18:13 , Processed in 0.148752 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表