初试STM32基于Arduino的使用

这篇具有很好参考价值的文章主要介绍了初试STM32基于Arduino的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初试STM32基于Arduino的使用

 

系列文章列表

一、初试STM32基于Arduino的使用

二、初试STM32基于Arduino的使用(第二集)

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

初试STM32基于Arduino的使用
STM32F030 Demo Board

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

本文我是想写得比较简单易读,如果哪里写得不够清楚,希望你能留下评论告诉我,我会马上将它完善。我不希望重复造轮子,但发现没有好用的轮子时,希望能进化出一个更为完善的轮子,以使后来可以直接使用。

目录

一、在Arduino开发环境中增加STM32

1️⃣ 添加“附加开发板管理网址”

2️⃣ 增加STM32开发板

3️⃣ 选择STM32开发板

4️⃣ 写代码测试

5️⃣ 下载

二、参考资料:

三、附录


一、在Arduino开发环境中增加STM32

1️⃣ 添加“附加开发板管理网址”

找到首选项

初试STM32基于Arduino的使用

修改附加开发管理器网址

初试STM32基于Arduino的使用

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

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

如果你好奇,可以用浏览器打开它🚀,它是长下面这个样的。具体内容就是一些板子的信息和对应的工具及所有相关代码和包的下载地址等。

初试STM32基于Arduino的使用

然后点击界面上的“好”。就完成了这一步。

2️⃣ 增加STM32开发板

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

初试STM32基于Arduino的使用

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

初试STM32基于Arduino的使用

3️⃣ 选择STM32开发板

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

初试STM32基于Arduino的使用

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

初试STM32基于Arduino的使用

4️⃣ 写代码测试

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

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

初试STM32基于Arduino的使用

得到如下代码:

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
}

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

初试STM32基于Arduino的使用

代码我改成了这样:

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就变回黑色。也就是说,如果看到是蓝色的,那表示你没有写错了。

5️⃣ 下载

1. 关于连线

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

初试STM32基于Arduino的使用

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

初试STM32基于Arduino的使用

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

初试STM32基于Arduino的使用

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

3v3 3v3
GND GND
TXD RXD
RXD TXD

2. 下载

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

初试STM32基于Arduino的使用

 这时就可以点“下载”了。

初试STM32基于Arduino的使用

 下载完成后,再将跳线跳回GND去,再按重置按钮。板子就会启动到工作状态,代码运行了。 

初试STM32基于Arduino的使用


二、参考资料:

STM32F030 DEMO BOARD — Zephyr Project Documentationhttps://docs.zephyrproject.org/2.6.0/boards/arm/stm32f030_demo/doc/index.html

三、附录

🚩对了,你在修改“附加开发管理器网址”时,不知道有没有遇到问题。我因为用了旧的地址,最后导致Arduino的IDE打不开了。我通过cmd.exe,然后手工运动Arduino里的Arduino_debug.exe看到了报错信息,发现报这个错。

java.io.FileNotFoundException: C:\Users\Eric.Li\AppData\Local\Arduino15 (拒绝访问。)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at cc.arduino.contributions.packages.ContributionsIndexer.parseIndex(ContributionsIndexer.java:234)
        at cc.arduino.contributions.packages.ContributionsIndexer.mergeContributions(ContributionsIndexer.java:179)
        at cc.arduino.contributions.packages.ContributionsIndexer.parseIndex(ContributionsIndexer.java:116)
        at processing.app.BaseNoGui.initPackages(BaseNoGui.java:483)
        at processing.app.Base.<init>(Base.java:272)
        at processing.app.Base.main(Base.java:150)

初试STM32基于Arduino的使用

然后在网上查了,然后做了如下操作。文章来源地址https://www.toymoban.com/news/detail-437210.html

  • 有兄弟将这个"Arduino15“目录给删除掉了就好了。我试了将这个目录修改名字(Arduino15改为Arduino15X),有效的,Arduino的IDE能打开了。
  • 但是我觉得这种做法不科学,所以我进入目录看,发现Arduino的IDE重新创建了Arduino15这个目录,而里面只有一个"preferences.txt"文件。
  • 我用这个文件覆盖我原来那个目录(Arduino15X),又将新目录(Arduino15)删除,再将原来那个目录(Arduino15X)修改名字变回Arduino15,一切工作正常。
  • 那其实问题就很明确了,就是”preferences.txt“文件里有错。
  • 修复操作就是将最新加的内容,也就是开发板管理器地址去掉就好了。
board=uno

/***********干掉下面这行就可以了***********/

boardsmanager.additional.urls=https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/main/package_stmicroelectronics_index.json

/****************************************/

build.verbose=false
build.warn_data_percentage=75
cache.enable=true
compiler.cache_core=true
compiler.warning_level=none
console=true
console.auto_clear=true
console.error.file=stderr.txt
console.length=500
console.lines=4
console.output.file=stdout.txt
editor.antialias=true
editor.auto_close_braces=true
editor.caret.blink=true
editor.code_folding=true
editor.divider.size=2
editor.external=false
editor.font=Monospaced,plain,12
editor.indent=true
editor.invalid=false
editor.keys.alternative_cut_copy_paste=true
editor.keys.home_and_end_beginning_end_of_doc=false
editor.keys.shift_backspace_is_delete=true
editor.languages.current=
editor.linenumbers=true
editor.save_on_verify=true
editor.tabs.expand=true
editor.tabs.size=2
editor.update_extension=true
editor.window.height.default=600
editor.window.height.min=290
editor.window.width.default=500
editor.window.width.min=400
export.applet.separate_jar_files=false
export.application.fullscreen=false
export.application.platform=true
export.application.stop=true
export.delete_target_folder=true
gui.scale=auto
ide.accessible=true
last.folder=C:\Users\Eric.Li\Desktop\Temp\stm32test\stm32test.ino
last.ide.1.8.19.daterun=1649298830
last.ide.1.8.19.hardwarepath=C:\Program Files (x86)\Arduino\hardware
last.screen.height=1080
last.screen.width=1920
last.sketch.count=2
last.sketch.default.location=760,290,500,600,414,0
last.sketch.default.path=C:\Users\Eric.Li\Desktop\Temp\stm32test\stm32test.ino
last.sketch0.location=650,240,500,600,-1,0
last.sketch0.path=C:\Program Files (x86)\Arduino\examples\01.Basics\Blink\Blink.ino
last.sketch1.location=-8,-8,1936,1056,870,6
last.sketch1.path=C:\Users\Eric.Li\Desktop\Temp\stm32test\stm32test.ino
platform.auto_file_type_associations=true
preferences.readonly=false
preproc.color_datatype=true
preproc.enhanced_casting=true
preproc.imports.list=java.applet.*,java.awt.Dimension,java.awt.Frame,java.awt.event.MouseEvent,java.awt.event.KeyEvent,java.awt.event.FocusEvent,java.awt.Image,java.io.*,java.net.*,java.text.*,java.util.*,java.util.zip.*,java.util.regex.*
preproc.output_parse_tree=false
preproc.save_build_files=false
preproc.substitute_floats=true
preproc.substitute_unicode=true
preproc.web_colors=true
programmer=arduino:avrispmkii
proxy.manual.hostname=
proxy.manual.password=
proxy.manual.port=
proxy.manual.type=HTTP
proxy.manual.username=
proxy.pac.url=
proxy.type=auto
recent.sketches=C:\Program Files (x86)\Arduino\examples\01.Basics\Blink\Blink.ino,C:\Users\Eric.Li\Desktop\Temp\stm32test\stm32test.ino
run.display=1
run.options=
run.options.memory=false
run.options.memory.initial=64
run.options.memory.maximum=256
run.present.bgcolor=#666666
run.present.exclusive=false
run.present.stop.color=#cccccc
serial.databits=8
serial.debug_rate=9600
serial.line_ending=1
serial.parity=N
serial.stopbits=1
sketchbook.path=C:\Users\Eric.Li\Documents\Arduino
software=ARDUINO
target_package=arduino
target_platform=avr
theme.file=
update.check=true
update.id=2142332045165484339
update.last=1649297850467
upload.using=bootloader
upload.verbose=false
upload.verify=true

到了这里,关于初试STM32基于Arduino的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ARDUINO STM32 SSD1306

    STM32F103XX系列SPI接口位置 在ARUDINO 下,(不需要设置引脚功能,不需要开启时钟设置,ARDUINO已经帮我们处理了) stm32f103c6t6 flash不足,不足以运行U8G2,产生错误(STM32F103C8T6 FLASH ram足够,直接运行示列) 改用U8X8,后将字体改为u8x8_font_artosserif8_n ,可以简单程序 使用U8X8可以显示

    2024年02月10日
    浏览(36)
  • 【FreeRTOS】Arduino开发STM32

    Vscode 、platformio、arduino、STM32F103C8T6、USB-TTL 引脚连接:STM32直接设置为烧录模式即可,烧录完成后会自动运行程序。     注意事项:每次上传程序前,需要按一下复位键。 platformio.ini文件配置 添加相关库函数 测试程序:板载LED闪烁,同时进行串口输出  vTaskStartScheduler()的作

    2024年02月15日
    浏览(38)
  • Arduino借助STM32Duino开发STM32教程-(2023年8月)

    目前,网络上大多数的讲述arduino开发stm32的教程都存在一定的问题(缺少一些关键步骤),以至于会产生误导,本人是看着这些教程一路走来的,通过我的相关搜索,而整理出的一套较为完善的教程。 前往官网下载Arduino IDE并安装,这里推荐Arduino IDE 2,有丰富的代码补全功能

    2024年02月08日
    浏览(35)
  • arduino、STM32和树莓派了解

    一、arduino 1、什么是arduino Arduino是一款便捷灵活、方便上手的开源电子原型平台。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序        arduino是一类单片机、开发板

    2024年02月03日
    浏览(34)
  • Arduino、STM32、树莓派的对比

    Arduino使用C/C++,STM32最常使用C语言,树莓派支持多种编程语言,但最常使用python。 Arduino开发难度和学习难度较低,开发者只需要通过简单学习,了解各个引脚和函数的作用,便可利用它开发出各种出色的项目。 STM32需要更深入的理解和掌握,通常需要具备一定的编程和电子

    2024年02月07日
    浏览(36)
  • 关于Arduino、STM32、树莓派的介绍与区别

    Arduino: Arduino开发板本着让用户简单使用而且开源的设计理念,具有灵活便捷、入手门槛低、同时具有丰富接口、多功能、易扩展等优点,因此在电子设计领域应用较广。目前市场上Arduino开发板的种类非常多,如Arduino UNO/UNO R3,Arduino101/Intel Curie,Arduino Micro,Arduino Ethernet,

    2024年02月01日
    浏览(47)
  • Vscode platformio Arduino开发STM32,点灯+串口调试

    1.工具 USB-TTL(非常便宜,几块钱) STM32F103C8T6(几块钱) 2.引脚连线 USB-TTL STM32 TX PA10 RX PA9 VCC 3.3V GND GND 注意事项: 跳线帽位置:BOOT0接高电平(1),BOOT1接低电平(0) 每次上传程序前需要按一下复位键(之后,跳线帽的位置不需要改变,程序即可正常运行),否则会可能出现下面这种情

    2024年02月11日
    浏览(49)
  • 舵机,模拟舵机,数字舵机(arduino,stm32f103代码开源)

     舵机是一种常见的伺服电机,主要用来控制角度的变化。常见的sg90舵机组成结构如下: 舵机组成图 ​ sg90是模拟舵机,除了模拟舵机外,还有数字舵机,他们的控制区别如下 模拟舵机和数字舵机的控制区别  模拟舵机和数字舵机的机械结构一样;硬件方面数字舵机多了一

    2024年02月05日
    浏览(56)
  • 基于stm32与串口通信的freeMaster使用

            从安装驱动程序FMASTERSCIDRV.exe的安装路径上获取源码,如图1所示。其中src_common文件夹里放着串行通信通用的驱动源码,将其全部复制到自己项目的文件中。src_platforms文件夹里放着与硬件平台相关的示例源代码,如图3、4所示,我们选择基于Arm® Cortex®-A、Cortex-R和

    2024年02月09日
    浏览(93)
  • 基于STM32的土壤湿度传感器使用

    最近在学习中用到了ADC数据采集这里使用的硬件模块为土壤湿度传感器,下面为土壤传感器相关的使用方法和代码介绍。 1、土壤湿度传感器实物图 土壤湿度传感器一共有4个引脚分别为: GND VCC DO AO,在本次实验中使用的为A0模拟引脚,因此在单片机资源上需要使用到ADC,模

    2024年02月12日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包