STM32F103C8T6蓝色药丸入门 -【STM32教程】

在这个项目中,我们将快速浏览STM32F103C8T6开发板,该板基于意法半导体的ARM Cortex-M3微控制器。我将向您展示该板卡的一些重要功能,如何配置现有的Arduino环境以与该板卡一起使用,并编写第一个程序,不过没什么,是的,您猜对了,它是Blinky。因此,让我们开始吧。


在过去的十年中,Arduino成为快速原型开发,爱好项目的首选板,或者是初学者的开发板,可以快速启动他们的电子事业。但是我们都知道Arduino开发板的局限性(让我们讨论Arduino UNO,因为它是目前最流行的Arduino),即它运行缓慢,仅以16 MHz运行,内部硬件非常有限,并且没有足够的处理能力或RAM和Flash来运行基于FreeRTOS的应用程序(从技术上讲,您可以在Arduino上运行FreeRTOS,但这并不理想)。

Arduino的替代产品是基于STM32F103C8T6微控制器的开发板,通常被称为Blue Pill(矩阵参考)。该微控制器基于STMicroelectronics制造的ARM Cortex-M3体系结构。

STM32F103C8T6是一款功能非常强大的微控制器,具有32位CPU,可以轻松击败Arduino UNO。另外,您可以使用Arduino IDE轻松对该板进行编程(尽管有一些调整和其他编程器,例如USB到U(S)ART转换器)。


STM32F103C8T6开发板简要说明



下图显示了典型STM32蓝色药丸板的正面和背面。如您所见,开发板的布局非常简单,甚至可能使Arduino Nano感到困惑。

这些板的重要一点是它们非常便宜,比Arduino UNO的克隆版本便宜。我在当地的电子产品商店以约2.5美元(180卢比)的价格购买了该板。因此,它显然是一个克隆版本(可能是伪造的STM32 MCU?),并且市场上有很多该板的克隆版本。

来到Blue Pill电路板本身时,您会得到电路板和两个公头带,以便您将其焊接到电路板上(可耻的是它们没有预先焊接)。


评估板的其他功能如下:

  • 它包含四方扁平封装的主要MCU – STM32F103C8T6。

  • 重置开关–重置微控制器。

  • microUSB端口–用于串行通信和电源。

  • BOOT选择器跳线– BOOT0和BOOT1跳线,用于选择引导存储器。

  • 两个LED –用户LED和电源LED。

  • 8 MHz晶振– MCU的主时钟。

  • 32.768KHz振荡器– RTC时钟。

  • SWD接口–用于使用ST-Link进行编程和调试。

  • 3.3V稳压器(在底部)–将5V转换为3.3V,以为MCU供电。

在电路板的任一长边上,都有用于连接各种模拟,数字IO和电源相关内容的引脚。下图显示了电路板的引脚配置以及每个引脚支持的不同功能。

从上图可以看出,STM32F103C8T6 MCU的每个引脚都可以具有多种功能(但仅需选择一个)。另外,请注意,某些IO引脚可以承受5V电压,这意味着您可以在这些引脚上连接5V兼容IO,而无需担心。


STM32 Blue Pill Board的问题



如果您打算购买更便宜的版本(我们大多数人可能会购买),则必须注意一些已知的主板问题。我已经从各个论坛上获取了这些问题,并亲自面对了一些问题(与USB相关)。

  • 第一个主要问题是3.3V稳压器。尽管有些板使用了TI的真正LM1117 3.3V稳压器,但大多数便宜的开发板都带有未知制造商的小型仿冒稳压器。这些调节器没有任何热保护,很容易损坏。解决方案是,如果可以选择的话,使用外部稳压电源。

  • 接下来的两个问题与USB有关。首先,microUSB端口的焊接质量很差,如果您经常将电缆插入该端口并将其插入,那么microUSB连接器很可能会脱离电路板。您可以使用热胶覆盖连接器。

  • 与USB有关的另一个问题是使用了错误的上拉电阻。根据MCU的参考手册,必须使用1.5KΩ电阻将USB D +(名称为USBDP)拉高至3.3V。但是根据几个Blue Pill电路板的原理图,所有这些电路板都使用10KΩ电阻器。如果您打算进行USB数据传输,则可能无法获得准确的结果。如果您迫切需要解决方案,则可以焊接一个与现有10KΩ电阻并联的1.8KΩ电阻。为此,在引脚A12和3.3V引脚之间连接1.8KΩ电阻。

  • 其他已知问题包括很难按下重置按钮,将模拟电源连接到数字电源,没有用于USB的肖特基二极管保护等。


STM32F103C8T6 MCU的亮点



既然我们已经对Blue Pill板有了一些了解,那么让我们现在了解板核心的一些重要功能,即STM32F103C8T6微控制器。如前所述,该MCU包含一个ARM 32位Cortex – M3 CPU内核,最大频率为72 MHz。

现在让我们看看在Blue Pill板上实现的该MCU的一些规格。

  • 内存:包含64 KB的闪存和20 KB的SRAM

  • GPIO引脚– 32个具有外部中断功能

  • 计时器– 3个16位计时器,1个16位PWM计时器

  • PWM引脚– 15

  • 模拟– 10通道12位ADC

  • I2C – 2个I2C外围设备

  • USART – 3个具有硬件控制的USART外围设备

  • SPI – 2个SPI外围设备

  • 其他外设– USB 2.0全速,CAN 2.0B

这些是其中的一些亮点,如果您想了解有关外围设备的更多详细信息,则必须参考数据手册和参考手册(强烈建议)。

作为一个额外的主题,让我以STM32F103C8T6为例告诉您STM32 MCU中使用的命名约定。MCU名称中的每个字母表示一个特殊特征。


如何使用BOOT引脚?



如前所述,MCU的BOOT0和BOOT1引脚用于选择启动的存储器。下图显示了基于这些引脚的引导空间的三个不同选项。

当BOOT0和BOOT1引脚均为LOW时,则内部闪存用作主引导空间;而当BOOT0为HIGH而BOOT1为LOW时,系统存储器则用作主引导空间。这两个选项对我们很重要。

要将代码上传到MCU的闪存,必须选择系统内存作为主引导空间。这样做的原因是系统存储器包含嵌入式引导加载程序,该加载程序由意法半导体在生产过程中自行编程。

通过引导进入系统内存,即引导加载程序ROM,您可以使用USART1串行接口通过应用程序对闪存进行重新编程。

(1)总线结构:MCS-51的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据。由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在PIC系列单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别位12、14、16位。

程序上传到闪存后,您可以将BOOT0切换回低电平,以便从下一次复位或加电起,MCU将从闪存启动。如果您注意到这两种情况,即选择闪存和选择系统存储器作为引导空间,则BOOT1引脚为LOW。只有BOOT0在LOW(闪存)和HIGH(系统存储器)之间切换。

为了方便起见,让我们将这些BOOT选项称为编程模式和操作模式。对于编程模式,BOOT0引脚设为高电平;对于工作模式,BOOT0引脚设为低电平(默认)。在两种模式下,BOOT1引脚均保持低电平。


项目的硬件要求



由于这是我们的介绍部分,而我们要做的就是使LED闪烁(该光已经存在于板上),因此就项目和MCU而言,我们不需要太多硬件。

但是,为了对微控制器编程,我们需要一个USB到串行转换器模块,例如FTDI板(或类似的东西)。如BOOT引脚部分所述,可以使用单片机的USART1引脚访问引导加载程序以对闪存进行编程。为了使MCU与USART1通信,我们需要一个USB到串行转换器。

因此,所需组件的最终清单是:

  • 基于STM32F103C8T6的STM32 Blue Pill开发板

  • USB到串行转换器模块(例如,FTDI编程器)

  • 连接线

  • 具有Windows OS和Internet连接的PC或笔记本电脑

注意:我没有FTDI风格的编程器,但是有较旧的USB到串行转换器。只要具有VCC(5V),GND,RX和TX引脚,就可以使用任何USB到串行转换器模块。


连线



为了便于表示,我在Fritzing软件中使用FTDI(如USB到串行转换器)来显示连接。

连接应如下所示:

配置Arduino IDE以编程STM32F103C8T6 Blue Pill

我确定您的PC(或笔记本电脑)上已经安装了Arduino IDE。如果不是,请先安装它。之后,打开Arduino IDE并选择File-> Preferences。您会找到一个名为“其他板管理器URL”的选项卡。复制以下链接并将其粘贴到此处。https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json 

如果本节中已有一些URL,则可以通过用逗号分隔它们来添加更多URL。如果您使用过ESP8266开发板,那么您可能已经熟悉此过程。添加URL后,单击“确定”。

现在,转到“工具”->“板”->“板管理器...”选项,然后搜索“ stm32”。您将得到类似“ STM32 Cores by STMicroelectronics”的结果。安装最新版本。在准备本教程时,最新版本为1.8.0。

这将需要一些时间,因为它将下载并安装一些必要的文件和工具。(我之所以说是因为,您必须从意法半导体(STMicroelectronics)下载另一种工具才能使它起作用。)

现在,您可以从工具->板->通用STM32F1系列中选择板。一旦选择了该板,一堆选项将显示在下方,以自定义板类型。第一个重要选项是“主板部件号”。确保选择“ BluePill F103C8”。

其他重要选项是“ U(S)ART支持”,将其设置为“ Enabled(通用(串行)”)和“上载方法”,将其设置为“ STM32CubeProgrammer(串行)”。您可以将其余选项保留为默认值。


下载STM32CubeProgrammer


在上面的步骤中,我们选择“ STM32CubeProgrammer(串行)”作为上传方法,但是问题是,Boards Manager没有下载并安装此工具。因此,我们必须手动安装它。为此,请使用以下链接转到由意法半导体提供的官方STM32CubeProgrammer下载页面。

STM32CubeProgrammer(https://www.st.com/en/development-tools/stm32cubeprog.html  ),长按二维码直接进入:

单击获取软件选项,它将带您登录/注册页面。建议您使用有效的电子邮件ID向STMicroelectronics注册。注册后,您可以登录并下载该软件。

将下载一个大型zip文件(对于2.3.0版,大约为164 MB)。解压缩该zip文件,您将获得一个Windows exe文件,名称为“ SetupSTM32CubeProgrammer-2.3.0”。双击并继续安装。

确保安装目录是默认目录,并且不要更改任何内容。它可能会要求您许可为ST-Link安装一些驱动程序。您可以授予必要的权限。

安装完成后,请确保在路径“ C:\ Program Files \ STMicroelectronics \ STM32Cube \ STM32CubeProgrammer \ bin”中具有“ STM32_Programmer_CLI” exe文件。如果存在,那么您很好。

注意:它可以是上述路径中的程序文件或程序文件(x86)。

这就完成了Arduino IDE的软件设置,以对STM32 Blue Pill进行编程。让我们继续编写一个用于使LED闪烁的小程序,然后将其上传到我们的STM32F103C8T6蓝色药丸板。


STM32F103C8T6蓝色药丸板的Blinky程序


确保已按照上一节中的说明对Arduino IDE进行了必要的更改(选择正确的开发板等)。完成后,如前所述在FTDI编程器(即USB到串行转换器)和STM32板之间建立连接。

现在,在将FTDI连接到PC之前,请确保STM32 Blue Pill Board处于“编程模式”,即将BOOT0引脚连接至HIGH。之后,将FTDI连接到PC或笔记本电脑。COM端口将分配给程序员,并在Arduino IDE中选择相同的COM端口。

编写Blinky程序,如下所示。它类似于Arduino Blinky草图,但是如果使用LED_BUILTIN,我将PC13用作LED连接到MCU的那个引脚。

代码

之后,您可以单击“上载”,IDE将开始编译代码。编译需要一些时间。

编译成功后,它将自动调用STM32CubeProgrammer工具。如果一切顺利,IDE将成功对STM32开发板进行编程。

它将自动重置MCU,您会注意到LED闪烁。别忘了将BOOT0引脚移回LOW位置,以便下次启动电路板时,它将开始运行先前上传的程序。


结论


这是一篇有关STM32 Blue Pill Board入门即STM32F103C8T6的冗长教程。我已经讨论了开发板的一些重要功能,MCU的亮点,开发板的已知问题以及如何修复它们,配置Arduino IDE,下载必要的工具,在Arduino Ide上为STM32编写我们的第一个程序并最终上传该程序并看到LED闪烁。

别人就建议他去学个技术吧,感觉现在嵌入式,单片机很流行,前景也很好,而且工资也算是挺高的,他心动了,但是觉得这么大了,学出来也不小了,而且又没底,学出来单片机好找工作吗?不好找怎么办?其实这也是很多人的想法。

生成海报
点赞 0

创世纪

单片机学习,电子制作DIY学习与分享,各种新鲜的,有趣的,好玩的,一起来吧!机器人、无人机、树莓派/Raspberry Pi、arduino、极客、创客等

相关推荐

基于Arduino的显示测量环境数据设计

题目: 基于Arduino的显示测量环境数据设计 目录 基于Arduino的显示测量环境数据设计... 3 第一章 课题任务... 4 1.1课题任务... 4 1.2任务分工... 4 1.3设计条件... 4 第