烟雨蒙蒙520 发表于 2022-11-17 16:55

初试STM32基于Arduino的使用


Arduino的板子虽然有国内的兼容板子,但最终价格也要在40+(意大利原产的就要100+了)。

烟雨蒙蒙520 发表于 2022-11-17 23:06

虽然也已经不贵了,但是如果一个方案里用的板子多了,整体成本也是在那里的。况且谁又不希望用最低的价格做最多的事呢?就在儿子4年级时,他们的信息课开始在学习Arduino的简单开发。当时学校发了2块Arduino Uno,这没有毛病。但又过了一个学期,换了一个供应商,发过来的是长这样的板子。

烟雨蒙蒙520 发表于 2022-11-17 23:13

但是其实当时老师并没有让他们直接在上面编程的,而是老师已经写好代码,固定了输入和输出口,学生只要根据需要换输入和输出的模块就可以实现很多功能了。而我的确上网查了一下,STM32是可以基于Arduino来写代码的,但是因为老师的这种操作,所以我就没有机会接触到是怎么用Arduino来编写STM32的代码了。这事一放就放下几年。最近在搞那个乘车方案,要用到3个端,特别是用户手持端是要人手一个的。它需要做到体积小,成本低。这就让我重新想起STM32了。

烟雨蒙蒙520 发表于 2022-11-17 23:14

在Arduino开发环境中增加STM32
1️⃣ 添加“附加开发板管理网址”

找到“首选项”

修改“附加开发管理器网址”

链接是这个,直接拷贝进去就行。这个是比较新的,一些兄弟分享的网址因为是过去分享的,已经无效的,所以请使用我分享的这个。有助于避坑。(如果你修改完这个后发现Arduino启动不了了,请看本文最后的解决方法。)

https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/main/package_stmicroelectronics_index.json

烟雨蒙蒙520 发表于 2022-11-17 23:14

如果你好奇,可以用浏览器打开它

烟雨蒙蒙520 发表于 2022-11-17 23:21

增加STM32开发板

在“工具”=>"开发板:XXX"里找到“开发板管理器”

烟雨蒙蒙520 发表于 2022-11-17 23:23

然后选择“贡献”,找到STM32 MCU based boards,将它安装就行了。我这里因为已经安装了,所以“安装”按钮是灰的。安装过程需要点时间, 国内连Github有点慢,如果你有加速的方式的话这时可以拿出来用了。

烟雨蒙蒙520 发表于 2022-11-17 23:24

选择STM32开发板

安装完后,你就可以在这里选择你的开发板了。我的是STM32F0系列,所以选择了Generic STM32F0 Series。

烟雨蒙蒙520 发表于 2022-11-17 23:26

记得选择STM32CubeProgrammer(Serial),这是我们通过UART(也就是TX, RX方式连接)的上传方式。

烟雨蒙蒙520 发表于 2022-11-17 23:27

写代码测试

到这里我们就可以写代码试一试了。

我从Arduino的示例中找到了"Blink"这个示例。

烟雨蒙蒙520 发表于 2022-11-17 23:29

得到如下代码:

    void setup() {
      // initialize digital pin LED_BUILTIN as an output.
      pinMode(LED_BUILTIN, OUTPUT);
    }
   
    // the loop function runs over and over again forever
    void loop() {
      digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1000);                     // wait for a second
      digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);                     // wait for a second
    }

烟雨蒙蒙520 发表于 2022-11-17 23:30

如果你细心看,这里的“LED_BUILTIN”是蓝色的。但是STM32是不支持这个宏定义的,那我要怎么操作STM32的各个PIN呢?我找了很多文章,发现原来其实使用起来很简单,看下图,你要用到哪个PIN,直接用哪个PIN的名字就行了。比如我用的是PA4,代码里面直接用PA4就行了。另外,如果你细心看,你会发现下图中用绿色圈出来的LED灯其实就是有2根深色的线连着PA4的。所以我们只要设置PA4的电平,就能让这个LED灯亮起来。

烟雨蒙蒙520 发表于 2022-11-17 23:32

烟雨蒙蒙520 发表于 2022-11-17 23:33

代码我改成了这样:

    void setup() {
      // initialize digital pin LED_BUILTIN as an output.
      pinMode(PA4, OUTPUT);
    }
   
    // the loop function runs over and over again forever
    void loop() {
      digitalWrite(PA4, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1000);                     // wait for a second
      digitalWrite(PA4, LOW);    // turn the LED off by making the voltage LOW
      delay(1000);                     // wait for a second
    }

* 注意,观察,当你选择了STM32的板子后,这个代码里的“PA4”会变成蓝色。而如果你选回Arduino Uno,那PA4就变回黑色。也就是说,如果看到是蓝色的,那表示你没有写错了

烟雨蒙蒙520 发表于 2022-11-17 23:34

下载

1. 关于连线

接下来就是要下载了。还记得我一开篇说我之前曾经不得要领吗?问题就在这里。我根据使用Arduino的经验,想当然地连上了MicroUSB线,但发现电脑找不到我的STM32F030。我一直以为这块板子时间长了,坏掉了。然后另一篇文章中,我提到新买的那块Arduino Nano不能用(其实是选错芯片类型了),我以为是USB控制器坏了,所以我用USB转TTL(下图这个东西)来连它,发现原来这样也是可以正常使用的。所以啦,我在想,那这个STM32应该是USB控制器坏了,我用USB转TTL不就好了?

烟雨蒙蒙520 发表于 2022-11-17 23:36

连上后,发现可以正常下载代码了。你猜怎么着?我又查了一下STM32F030 Demo Board的文档。发现人家就写着"Power only"。为我的无知感到汗颜

烟雨蒙蒙520 发表于 2022-11-17 23:37

连线方式如下,因为没有找到Fritzing的对应STM32的部件,所以直接拍照。(有STM32的Fritzing部件的同学请分享给我一下。先谢过!

烟雨蒙蒙520 发表于 2022-11-17 23:39

具体连法如下。其实习惯了的话都知道,看到Tx和Rx,只要反着对连就能跟模块通信了。我一个做软件的觉得这种方式很无敌啊。

烟雨蒙蒙520 发表于 2022-11-17 23:40

下载 这时准备要点击Arduino的下载,但在此之前,记得让板子启动到bootloader模式。就是将板子上的跳线跳到3v3的位置然后接通电源(跳完按“重置按钮”效果也一样)。

烟雨蒙蒙520 发表于 2022-11-17 23:40

页: [1] 2
查看完整版本: 初试STM32基于Arduino的使用