前言

时代在进步,极客们手上的单片机也从古老的51、PIC变成了AVR、STM32,也出现了各种便捷的开发工具,例如盛极一时的Arduino;不过Atmega328所属的AVR单片机,终究还是老点了,算起来差不多是20年前的主流了,现在流行的是ARM,今天我们就来玩下Arduino与STM32的结合。

经过半天的努力,终于可以让Arduino IDE支持我的32小板子了,STM32的芯片性价比普遍高于arduino里avr的单片机,所以好处就不用多说了。在这分享下这个有趣的玩法,将会使得STM32的编程更加简单,而不会像KEIL里那么的麻烦(不需了解底层的运作),使得新手更加容易上手,话不多说,走起。。。

板子+USB转TTL(CH340)+USB线

但其实最经典也是最便宜的是下面这款,10块左右(淘宝)

 引脚定义为:

好不容易找到一张图,感觉和uno一样功能一目了然,但不是很清晰(将就吧,下面会罗列出来)

软件下载

版本Arduino IDE1.8.7 https://www.arduino.cc/en/Main/Software

安装过程一路next就可以,但需要知道安装目录,默认C盘,本人安装在D盘。

安装完之后,界面非常简单。

Arduino_STM32下载

然后去github上下载代码

Arduino_STM32:https://github.com/rogerclarkmelbourne/Arduino_STM32

下载压缩文件并解压,并重命名复制到你的Arduino IDE的安装目录里的hardware下,

现在你就可以在工具-开发板里找到STM32系列的板子了

下载安装Arduino SAM开发板

接下来打开Arduino IDE然后选项栏工具-开发板-开发板管理器,下载安装Arduino SAM开发板,不安装这个开发板后编译会出现arm-none-eabi-g++错误(这个应该是交叉编译器);

下载和烧写Bootloder

首先我们要下载Bootloader,进入刚刚那个人的另一个开源项目,地址如下:
https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries

选择你的STM32最小系统板的除电源指示灯外的另一个LED所对应的接口名字的文件下载(一定要选择对应的),我的板子为PC13,所以下载这个:

然后使用USB转串口线连接开发板和电脑USB,其中串口线的TX RX分布连接开发板PA10 PA9,然后将BOOT0短接3.3V BOOT1短接GND进入烧写状态,串口线的VCC GND分布连接开发板的5V 即可无需另外供电。

所需工具:flash_loader_demo_v2.8.0

ST官方下载地址:http://www.st.com/en/development-tools/flasher-stm32.html

下载有些费劲,不知道是网的问题还是电脑的问题,好不容易才下完,为避免麻烦,这里提供网盘下载:

https://pan.baidu.com/s/1SfAn2l6k6tWdIS_jWSzVsg

选择USB串口线的串口号,注意需要boot0 为1,boot1 为0(默认全是0)

在下列红色框内添加下载的bin文件,next,即可完成下载(bootloder的烧写)

驱动安装

进入下面目录D:\Arduino\hardware\Arduino_STM32\drivers\win,以管理员身份运行install_drivers.bat和install_STM_COM_drivers.bat

然后将开发板的串口线断开,将开发板BOOT0接GND后按住重置键不松,使用手机数据线连接开发板MicroUSB和电脑USB开始安装驱动,会发现一个新的USB串行设备,下面为COM11

下载例程测试

将Arduino IDE的上传方式设置为STM32duino bootloader

端口号改成新的串口号

打开一个例程,LED闪烁的,例程里引脚为PB1,修改PC13(和板子对应,也可以不修改接一个LED即可)

例程如下,然后编译上传:

出现Done就代表上传成功了,

然后就可以看到LED闪烁了,大功告成,喝杯水休息下吧。

最后来看下一些常用功能。

1、PWM引脚

序号 物理引脚
0         PA0
 PA1
2 PA2
3 PA3
6 PA6
7 PA7
8 PA8
9 PA9
10 PA10
16 PB0
22 PB6
23 PB7

PWM引脚简易测试程序,总共有12个PWM引脚,16bit即65536级PWM,很精密了:

void setup()
{pinMode(PB0, PWM);pinMode(PA7, PWM);pinMode(PA6, PWM);pinMode(PA3, PWM);pinMode(PA2, PWM);pinMode(PA1, PWM);pinMode(PA0, PWM);pinMode(PB7, PWM);pinMode(PB6, PWM);pinMode(PA10, PWM);pinMode(PA9, PWM);pinMode(PA8, PWM);
}
void loop()
{for (int i = 0; i < 65536; i++){delayMicroseconds(40);pwmWrite(PB0, i);pwmWrite(PA7, i);pwmWrite(PA6, i);pwmWrite(PA3, i);pwmWrite(PA2, i);pwmWrite(PA1, i);pwmWrite(PA0, i);pwmWrite(PB7, i);pwmWrite(PB6, i);pwmWrite(PA10, i);pwmWrite(PA9, i);pwmWrite(PA8, i);}
}

也可以用序号表示:

int pins[12] = {0, 1, 2, 3, 6, 7, 8, 9, 10, 16, 22, 23};
void setup()
{for (int i = 0; i < 12; i++){pinMode(pins[i], PWM);}
}
void loop()
{for (int i = 0; i < 100; i++){for (int j = 0; j < 12; j++){pwmWrite(pins[j], i * i);}delay(20);}
}

2、ADC引脚

物理引脚 ADC通道
PA0       CH0
PA1 CH1
PA2  CH2
PA3 CH3
PA4 CH4
PA5 CH5
PA6 CH6
PA7 CH7
PB0 不能用序号表达
PB1 不能用序号表达

ADC测试程序:

void setup()
{Serial.begin(115200);pinMode(PB0, INPUT_ANALOG);pinMode(PA7, INPUT_ANALOG);pinMode(PA6, INPUT_ANALOG);pinMode(PA5, INPUT_ANALOG);pinMode(PA4, INPUT_ANALOG);pinMode(PA3, INPUT_ANALOG);pinMode(PA2, INPUT_ANALOG);pinMode(PA1, INPUT_ANALOG);pinMode(PA0, INPUT_ANALOG);pinMode(PB1, INPUT_ANALOG);
}
void loop()
{delay(50);Serial.print("\tPB0="); Serial.print(analogRead(PB0));Serial.print("\tPA7="); Serial.print(analogRead(PA7));Serial.print("\tPA6="); Serial.print(analogRead(PA6));Serial.print("\tPA5="); Serial.print(analogRead(PA5));Serial.print("\tPA4="); Serial.print(analogRead(PA4));Serial.print("\tPA3="); Serial.print(analogRead(PA3));Serial.print("\tPA2="); Serial.print(analogRead(PA2));Serial.print("\tPA1="); Serial.print(analogRead(PA1));Serial.print("\tPA0="); Serial.print(analogRead(PA0));Serial.print("\tPB1="); Serial.println(analogRead(PB1));
}

3、允许的串口

总共3个硬件外接串口Serial1、Serial2、Serial3,一个USB虚拟串口Serial:

void setup()
{Serial.begin(115200);Serial1.begin(115200);  //TX=PA9,RX=PA10Serial2.begin(115200);  //TX=PA2,RX=PA3Serial3.begin(115200);  //TX=PB10,RX=PB11
}
void loop()
{delay(100);Serial.println("Test Serial");Serial1.println("Test Serial1");Serial2.println("Test Serial2");Serial3.println("Test Serial3");
}

还有I2C,SPI等,下载的Arduino_STM32里有相关的例程。

结语

STM32的主频72M,比atmega系列的快多了,而且AD多PWM多串口还多(总之强大太多了),我觉得如果它的库能像Arduino一样丰富,基本它就淘汰了,优胜劣汰,学无止境,奋斗吧!!!骚年!!!

STM32F103C8T6在Arduino IDE里编程相关推荐

  1. Arduino IDE入门编程

    文章目录 Arduino 一.前言 二.Arduino 编程语法 1. 常量 2. 结构 3. 数字 I/O 4. 模拟 I/O 5. 时间函数 6. 串口收发函数 7. 数学函数 Arduino 一 ...

  2. Arduino IDE及编程函数

    说明:此文章仅是我学习过程中的一些记录,如有侵权,请联系我删除,文章中难免有遗漏错误之处,欢迎指出. 一.Arduino IDE 二.常用函数 1.基本操作 2.数字 3.模拟 4.串口通讯 5.随机 ...

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

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

  4. 使用 Arduino IDE 对 STM32进行程序开发,安装开发板

    STM32 引脚详情 STM32 Blue Pill 板的完整引脚如下所示.正如你所看到的,G 表示接地引脚,3.3V 输出稳压 3.3V,5V 引脚可用于为电路板供电或通过微型 USB 获得+5V供 ...

  5. arduino消息服务器,在C(Arduino IDE)中将API链接消息解析为服务器(示例代码)

    我正在使用Arduino IDE来编程我的微控制器,它有一个内置的Wi-Fi芯片(ESP8266 NodeMCU),它连接到我的互联网路由器,然后有一个特定的IP(就像192.168.1.5). 所以 ...

  6. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)

    教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介         esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...

  7. 利用Arduino IDE对ATMEGA8等单片机编程

    简 介: 根据 Programming ATmega8 Using Arduino IDE - Arduino Project Hub 所描述的方法,测试了在Arduino IDE中增加对于ATmeg ...

  8. attiny13a程序实例_如何使用Arduino IDE编程ATTINY13/ATTINY13A单片机

    尽管ATtiny系列被认为是非常便宜和有用的,但是仍然缺少有关它的项目和教程.在本篇文章中,您将学习如何使用通过Arduino IDE编程的ATtiny13微控制器开始构建应用程序. attiny-8 ...

  9. Arduino案例实操 -- 智能巡防小车(三)Arduino IDE巡线小车编程

    三.Arduino IDE巡线小车编程 3.1 Arduino开发环境 下载免安装ZIP包 下载IDE安装包 3.2 Arduino IDE 3.3 Blink项目实例 打开内置案例 进行程序上传 3 ...

最新文章

  1. 机器学习数据整合+pandas方法astype、merge、drop、to_numeric、concat等
  2. visudo 普通用户账户 添加root全新
  3. python从入门到实践回顾——字典
  4. R语言常用包分类总结
  5. Java 程序死锁问题原理及解决方案
  6. PAT1006 换个格式输出整数
  7. Python 浮点数的内置方法
  8. 机器学习11-不平衡数据之采样
  9. k-means 及其改进 数库
  10. matlab开环传递函数 求单位负反馈的系统传递函数,已知负反馈控制系统的开环传递函数为...
  11. 《英雄联盟》“被手游”背后,是移动电竞的成长期烦恼
  12. 词法分析,语法分析,语义分析
  13. 一百块组装可玩LOL的电脑
  14. PACP学习笔记三:PCAP方法说明
  15. CS224N 2019年课程第一次作业复现
  16. MySQL 8.0 可以操作 JSON 了!!
  17. 创建自己免费的论坛、博客网站
  18. mysql left_mysql的left函数
  19. 中国喷涂行业规划趋势与产销需求报告2021年版
  20. 单页面网站seo优化的基本要点

热门文章

  1. android+仿友盟更新,android友盟增量更新
  2. ESLint语法检查--semi(分号)规则
  3. Android国际化,简体和繁体切换
  4. 键盘按d就计算机,电脑为什么一按D就返回桌面?一按M也回桌面、按L直接待机了?:excle按d就返回桌面...
  5. Git rebase(变基)操作详解
  6. 一文带你了解如何编辑工作流流程图
  7. Feature Tools:自动特征工程(翻译)
  8. 关于linux的进程中的各个线程cpu占用情况的分析和查看
  9. InputStream需要被多次使用的解决方案
  10. 转载:选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被破解。