最近在淘宝上看到NUCLEO-F411RE能兼容Arduino,于是入手一块玩玩。于是查找资料搭建化境和做相关实验。断断续续花了好几天,总结一下,供其他人少走弯路。

在Arduino里兼容stm32(NUCLEO-F411RE),第一步是搭建环境然后让板子亮起闪烁灯。

一、Arduino环境搭建:由于网络等等原因,不能用Arduino IDE在线开发板管理器下载的请根据参考(1)进行操作。(建议通读参考(1)文章再操作)

参考(1)https://blog.csdn.net/sinat_41690014/article/details/105456572?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control

若网络好,就很方便。跳过参考(1),直接就可以实现环境搭建。在环境搭建过程就是巨坑,网络问题下载不了。看到了参考(1)文章才解决,在此感谢他。

对于NUCLEO-F411RE不了解,可以看看补充知识阅读:【ST开发板评测】Nucleo-F411RE开箱报告(参考(2)https://blog.csdn.net/whik1194/article/details/90295910)里面还有简介和Nucleo-F411RE相关资料下载。

第二个坑:win10的新电脑CH340驱动安装不了,win10安装CH340失败解决过程及解决(https://blog.csdn.net/js_xiaocainiao/article/details/88662362)

后来直接用STLink,发现可以不用装CH340的驱动。很多的Arduino的板子用的都是CH340芯片下载程序。所以还得装。

二、搭建完环境,开始闪烁灯之旅。

利用Arduino IDE对stm32板子NUCLEO-F411RE进行闪烁灯(LD2对应NUCLEO-F411RE的PA5引脚)程序下载,下载是通过板子上的STLink直接在arudinio里下载程序。

直接用Arduino自带的闪烁灯例程,把引脚改成PA5就可以了(NUCLEO-F411RE文档里有提到是PA5,文档在参考(2)里可以下载)。

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

到此NUCLEO-F411RE告一段落,发现STM32F103C8T6小蓝板(STM32 BluePill)也可以用Arduino IDE进行下载和闪烁灯以及OLED液晶显示,于是开始STM32F103C8T6之旅。

上图一张:

三、Arduion IDE下的STM32F103C8T6小蓝板(STM32 BluePill)闪烁灯以和IIC的0.96寸OLED 液晶显示之旅以及mini USB直接下载(无需STLink和USB转TTL设备进行下载)

(1)利用STLink(手头有)在ArduinoIDE下对stm32STM32F103C8T6小板子进行下载闪烁灯程序:

利用自带的闪烁示例,需要把引脚改成PC13(根据前面的引脚图可以看到LED连的是PC13),程序如下:

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

板子的相关设置如下图设置即可成功,无需端口设置,Arduino就能识别设备。

(2)STM32F103C8T6在Arduino IDE下用IIC的0.96寸OLED液晶显示

可以阅读参考(3):

https://blog.csdn.net/weixin_44762306/article/details/90443122

https://my.oschina.net/hechunc/blog/4288934

https://www.stmcu.org.cn/module/forum/thread-618559-1-9.html

OLED液晶显示踩了好多坑(第三个坑:u8g2的库下载不了,已上传csdn,可下载U8g2-2.28.10.zip,地址:https://download.csdn.net/download/veteran412/14153542),由于不能用自带的库管理进行下载,改用迅雷下载:https://downloads.arduino.cc/libraries/github.com/olikraus/U8g2-2.28.10.zip 下载完后解压放到\libraries下即可。或者通过加载库的方式找到下载的zip库文件:

剩下操作可以参考https://blog.csdn.net/weixin_44762306/article/details/90443122

注意连线为:oled的SCL连PB6, oled的SDA连PB7

整个程序如下:

/*STM32F103C8T6*/
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE);void setup(void) {u8g2.begin();u8g2.enableUTF8Print();
}
void loop(void) {u8g2.setFont(u8g2_font_6x13_tf);u8g2.setFontDirection(0);u8g2.clearBuffer();u8g2.setCursor(25, 12);u8g2.print("STM32 ARDUINO");u8g2.setCursor(0, 26);u8g2.print("123456789012345678901");u8g2.setCursor(0, 38);u8g2.print("Hello OLED Wrold!");u8g2.setCursor(0, 50);u8g2.print("Welcome to STMduino.");u8g2.setCursor(0, 62);u8g2.print("See you later!");u8g2.drawFrame(0, 0, 128, 16);u8g2.sendBuffer();delay(1000);
}

(3)利用U8g2库在Arduino下的STM32F103C8T6的汉字显示,介绍两种不同的显示方式。

3.1方法一

参考:https://my.oschina.net/hechunc/blog/4288934

U8g2库的自带例程:

去掉U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);前面的注释如下图:

下载成功即可显示:

下载前选择板子(选择Generic STM32F103C6,否则又是一个坑):

如果选了“Generic STM32F103C6/fake STM32F103C8”编译出错,提示如下:(跟ROM有关,猜想是大小超了)

‘rodata’ will not fit in region `rom'。

全部错误提示如下:

c:/users/��/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: C:\Users\��\AppData\Local\Temp\arduino_build_152514/hanzi2.ino.elf section `.rodata' will not fit in region `rom'

c:/users/��/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/../lib/gcc/arm-none-eabi/4.8.3/../../../../arm-none-eabi/bin/ld.exe: region `rom' overflowed by 16528 bytes

collect2.exe: error: ld returned 1 exit status

"Wire.h" 对应多个库

已使用: C:\Program Files (x86)\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Wire

未使用:C:\Program Files (x86)\Arduino\hardware\Arduino_STM32\STM32F1\libraries\WireSlave

exit status 1

查看STM32F103C8T6数据手册看到flash有64k。

显示汉字程序如下:

#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endifU8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);void setup(void) {u8g2.begin();u8g2.enableUTF8Print();   // enable UTF8 support for the Arduino print() function
}void loop(void) {u8g2.setFont(u8g2_font_unifont_t_chinese2);  // use chinese2 for all the glyphs of "你好世界"u8g2.setFontDirection(0);u8g2.firstPage();do {u8g2.setCursor(0, 15);u8g2.print("Hello World!");u8g2.setCursor(0, 40);u8g2.print("你好世界");   // Chinese "Hello World" } while ( u8g2.nextPage() );delay(1000);
}

3.2 方法二:

参考:https://blog.csdn.net/weixin_44762306/article/details/90443122

在参考的往里加如下图所示:

u8g2.setFont(u8g2_font_unifont_t_chinese2);

u8g2.print("你好世界");

现象如下:(图中的stlink没有用到,想直接用minUSB线直接看下面内容,再回来做液晶显示,液晶显示也可以用上面的STLink的下载方式)

整个程序如下:

/*STM32F103C8T6*/
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ PB6, /* data=*/ PB7, /* reset=*/ U8X8_PIN_NONE);void setup(void) {u8g2.begin();u8g2.enableUTF8Print();
}
void loop(void) {u8g2.setFont(u8g2_font_6x13_tf);u8g2.setFontDirection(0);u8g2.clearBuffer();u8g2.setCursor(25, 12);u8g2.print("STM32 ARDUINO");u8g2.setCursor(0, 26);u8g2.print("123456789012345678901");u8g2.setCursor(0, 38);u8g2.setFont(u8g2_font_unifont_t_chinese2);u8g2.print("你好世界");  //u8g2.print("Hello OLED Wrold!");//u8g2.setCursor(0, 50);//u8g2.print("Welcome to STMduino.");//u8g2.setCursor(0, 62);//u8g2.print("See you later!");u8g2.drawFrame(0, 0, 128, 16);u8g2.sendBuffer();delay(1000);
}

(4)在Arduino IDE下直接用mini USB先对的STM32F103C8T6进行下载。不用usb转串口(CH340/CH341)或者STLink。

请认真阅读参考:https://www.bilibili.com/read/cv5988943/

第一步:利用STLink把对应板子的bootloader下载到stm32板子里去。(不同板子的板子的bootloader文件根据stm32上的Boot1引脚找到。)

手头的板子如下图:

用的是smart-v2.bin文件。(试过参考中的generic_boot20_pc13.bin,能识别设备但是没有串口显示出来。后来试了smart-v2.bin成功了,烧录完还要“maple串口驱动的安装maple串口驱动安装请参考:https://blog.csdn.net/sinat_41690014/article/details/105456572?utm_medium=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-searchFromBaidu-1.control

成功烧录bootloader和安装maple之后,按住STM32F103C8T6板子的复位按钮再插入电脑显示后,在设备管理器里显示:

若bootloader烧录错了,驱动安装正确了,则没有出现COM6。设备管理器只有Maple。

STM32F103C8T6的板子最后可以按下图所示步骤设置就可以直接下载示例闪烁灯或者OLED液晶显示程序了,这样可以摆脱STLink和串口转USB设备直接在Arduino下对stm32F103的板子进行下载程序。

(5) 烧录DS18B20例程

改引脚即可成功,程序如下图,我连的PA7引脚:

打开串口现象如下:

最后有兴趣的可以去了解一下:

Stduino IDE

http://www.stduino.com/pindex.php

总结:走了好几个坑,弄了好几天,最后发现用一个MiniUSB线Maple Mini的串口方式下载很方便。不用STLink。若不想用arduino IDE下载,据说直接烧录一个stm32例程就可以还原。(暂时还没有试,手头板子多)

后面的路大家自己兴趣去做。例程中的ws2812的例程也可以是可以的,这里不再贴图。玩过ws2812的基本都会用。

Arduino IDE下的stm32环境搭建、OLED液晶显示(U8g2lib库)、NUCLEO-F411测试、STM32F103C8T6在Arduino下的液晶显示、相关推荐

  1. 和12岁小同志搞创客开发:手撕代码,Arduino IDE 软件下载和环境搭建

    目录 1.软件下载 2. 软件安装 3.环境搭建和使用 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_3810 ...

  2. centos7下视频解码播放环境搭建(ffmpeg等库编译)

    1.软件环境 操作系统环境:centos7 ffmpeg源码: github上的master版本(当前官网的3.4.1版本有bug,在主干中修复了'x264_bit_depth' undeclared ...

  3. Arduino IDE 玩转STM32 - 搭环境、刷固件、烧程序

    Arduino IDE 玩转STM32 - 搭环境.刷固件.烧程序 背景:有arduino经验,无STM32经验:没使用过keil,只玩过arduino IDE. 手边有两款STM32F103C8T6 ...

  4. Windows下Android开发环境搭建和配置

    关于Windows下Android开发环境搭建.配置方面文章,网上一搜一堆,为方便以后参考,权且做个记录,主要关注安装过程中的注意事项.对新手提醒的是,本文介绍SDK开发Android APK环境搭建 ...

  5. win7下android开发环境搭建(win7 64位)

    注意:此为win7 (64)位系统 那么win7下32位系统如何进行android开发环境搭建呢?>>>win7下android开发环境搭建(win7 32位) 一.安装 JDK 下 ...

  6. Win7下Android开发环境搭建(8.19,8.24,9.30,10.21)

    [2013-10-21 20:06:55 - L9ThreeGong] Unable to resolve target 'android-10' [ 意思就是没有找到android_10,这里的10 ...

  7. Arduino学习笔记1---开发环境搭建

    主要内容:(一). Arduino IDE的下载及安装 (二). Arduino IDE的应用 (三). Arduino的程序结构 (四). Arduino程序的编译及下载 (一). Arduino ...

  8. Ubuntu16.04下arm-linux-gcc交叉编译环境搭建

    Ubuntu下arm-Linux-gcc交叉编译环境搭建 参考:http://blog.csdn.net/hebbely/article/details/53992805 1.网上下载 arm-lin ...

  9. Android下NDK开发环境搭建

    Android下NDK开发环境搭建 1.     AndroidNDK安装与配置 1.1  NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP部 ...

最新文章

  1. 142页ICML会议强化学习笔记整理,值得细读
  2. 他的车队低调拿掉安全员,现在用10亿新融资惊艳了所有人
  3. Bash和Ksh中查找和执行历史命令
  4. MySQL Show命令的使用
  5. 低碳数据中心,因何而来?一文读懂如何利用超融合降碳
  6. 百度SEO站群PHP进销存源码ERP多仓库管理源码
  7. 《设计模式其实很简单》
  8. DDL——数据定义语言
  9. php ci的session和php session,php及codeigniter使用session-cookie的方法(详解)
  10. add_subplot()--matplotlib
  11. VirtualBox装VBoxGuestAdditions增强工具失败
  12. 高等数学总结(无穷级数)
  13. [学习报告]《LeetCode零基础指南》第三讲循环-gyro
  14. 开源项目推荐系列(短信网关)
  15. 多线程面试题汇总(一)
  16. oracle与sql语句
  17. probuilder_使用ProBuilder自定义快照原型资产
  18. 代理模式与三种方式实现SpringAOP!
  19. python中空格怎么打_Python中如何打印空行
  20. web前端开发基础班课程大纲

热门文章

  1. Mac系统制作U盘安装盘,不能识别U盘的情况
  2. 迅视财经 探馆长沙智能制造大会
  3. Linux网络管理员手册
  4. 使用十六进制设置颜色
  5. 浙江大学mooc的数据结构_课后习题01-复杂度2 Maximum Subsequence Sum
  6. Android开发--实现Android引导页
  7. 数组去重c语言,C语言数组去重
  8. 转义 输入法表情符号
  9. LInux-文本处理相关命令笔记
  10. 当前目录./和父目录../辨析