历史上的今天
返回首页

历史上的今天

今天是:2025年03月18日(星期二)

正在发生

2019年03月18日 | STM32F103C8T6在Arduino IDE里编程

2019-03-18 来源:eefocus

前言

时代在进步,极客们手上的单片机也从古老的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

1 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=PA10

  Serial2.begin(115200);  //TX=PA2,RX=PA3

  Serial3.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一样丰富,基本它就淘汰了,优胜劣汰,学无止境,奋斗吧!

推荐阅读

史海拾趣

Fluke公司的发展小趣事

福禄克(Fluke)公司在电子行业中的发展历程充满了创新与突破,以下是五个与福禄克公司发展相关的故事:

1. 创立与初期发展

1948年,John Fluke先生在美国康涅狄格州的家中地下室创立了福禄克公司,并亲自设计了公司的第一款产品——VAW Meter(伏特、安培、瓦数表)。这一创举标志着福禄克在电子测试测量领域的初步探索与尝试。随着产品的不断推出和市场认可度的提升,福禄克逐渐在电子行业中站稳了脚跟。

2. 技术创新与市场拓展

多年来,福禄克公司一直致力于技术创新和产品升级。例如,福禄克推出的手持式电流表、接地阻抗测量仪表等产品,凭借其高精度和可靠性,在电力、通信、工业控制等多个领域得到了广泛应用。同时,福禄克还不断拓展其销售和服务网络,覆盖全球多个国家和地区,为全球客户提供优质的测试测量解决方案。

3. 新能源汽车领域的涉足

随着新能源汽车产业的快速发展,福禄克公司也积极涉足这一领域。新能源汽车中的锂电池、光纤等关键部件需要在使用过程中进行连续的温度监测。福禄克凭借其可靠的耐用性,为多家新能源汽车企业提供了安全可靠的测试测量产品及解决方案。这一举措不仅拓展了福禄克的市场领域,也进一步巩固了其在电子测试测量行业的领先地位。

4. 应对国际计量系统变革

当前国际计量系统正在经历历史性变革,福禄克公司密切关注这一世界热议话题。作为全球知名的电子测试仪器公司,福禄克已做好准备随时对应调整,以应对计量单位量子化等挑战。福禄克的这一举措体现了其作为行业领导者的前瞻性和应变能力。

5. 智能化与网络化发展

近年来,福禄克公司不断推动产品的智能化和网络化发展。例如,福禄克推出的在线式红外热像仪、带有Fieldsense技术的钳表等产品,不仅提高了测试测量的精度和效率,还实现了数据的实时传输和分析。这些创新产品满足了客户对智能化、网络化测试测量解决方案的需求,进一步推动了福禄克在电子行业中的发展。

以上五个故事展示了福禄克公司在电子行业中的发展历程和成就。从创立初期的艰难探索到如今的行业领导者地位,福禄克始终秉持着创新、质量和服务的理念不断前行。

B.B. Battery公司的发展小趣事

在国内市场取得一定成绩后,B.B. Battery公司开始积极拓展国际市场。他们参加国际电池展会,与全球知名企业建立合作关系,将产品打入国际市场。同时,公司还注重品牌建设,通过提升产品质量和服务水平,树立了良好的品牌形象。这些努力使得B.B. Battery公司的品牌在全球范围内都享有较高的知名度和美誉度。

Foxconn_Optical_Interconnect_Technologies__Inc.公司的发展小趣事

B.B. Battery公司成立之初,面临着资金短缺、市场竞争激烈等诸多挑战。然而,公司的创始人凭借对电池行业的深刻理解和敏锐的市场洞察力,带领团队不断探索和积累。他们深入调研市场需求,研发出适应市场需求的电池产品,并通过优化生产流程、降低成本等方式,逐步在市场上获得了一席之地。

BULGIN公司的发展小趣事

BULGIN公司的历史可以追溯到1923年,当时A.F.Bulgin先生和他的同伴在英国创立了A.F.Bulgin有限公司。公司专注于无线电电子零件的制造与生产,凭借产品的优质口碑,BULGIN的品牌逐渐广为人知。随着订单的不断增加,公司迅速成长,并在二战前已经拥有了当时最先进的现代化大规模生产线。

Don Connex Electronics Co Ltd公司的发展小趣事

Don Connex Electronics始终将研发创新作为公司的核心竞争力。公司每年将大量资金投入到新技术、新产品的研发中,不断推出具有市场竞争力的产品。同时,公司还积极与高校、科研机构合作,引进高端人才,加强技术研发力量。这些举措使Don Connex Electronics在激烈的市场竞争中始终保持领先地位。

胜利(VICTOR)公司的发展小趣事

胜利公司深知品牌文化对于提升品牌价值的重要性。因此,公司积极开展文化营销活动,如举办羽毛球文化节、赞助羽毛球赛事等。通过这些活动,公司不仅与消费者建立了深厚的情感联系,还提升了品牌的知名度和美誉度。

以上故事均基于虚构,旨在展示一个品牌成长的可能路径和方式。如有需要,请结合实际情况进行调整和修改。

问答坊 | AI 解惑

arm接口实验程序代码

很详细的接口实验程序,设计arm串口,DA/AD,LCD驱动程序,触摸屏程序。声明这是博创公司的程序代码。…

查看全部问答>

加了全拼输入法,怎么让他默认输入的是英文?

加了全拼之后,系统会在很多地方进去就以全拼中文的形式,我们可以点全拼语言栏点\"中\"会切换到英文,现在我想让他默认的是全拼英文的形式,不知道怎么弄,我尝试改了注册表几处地方,都没成功. 希望有弄过的朋友指点一下…

查看全部问答>

大侠,帮帮忙,帮忙做下这道题,题目是:信号采集的GUI设计

题目是:信号采集的GUI设计: 要求:(1)能实时采集和显示声音信号或音乐信号。 (2)界面上至少应有信号采集和显示按钮, 信号频谱显示按钮,信号采样频率选择按钮 和信号停止采集按钮四个按钮。 (3)具体流程可参考如下:先启动MATLAB程序 ...…

查看全部问答>

一个关于ADS的问题?

在使用ADS Debug uC/OS系统和一个简单的让蜂鸣器响的应用程序时,AXD loading image后,没有进入StartUP函数而是进入Disassembly,Go后不停的running image ,蜂鸣器不响,也不知道是不是下到板子里了。 请问是怎么回事?…

查看全部问答>

stm8s208用iar for stm8调试can不成功

stm8S208仿真时CAN发送报文错误状态寄存器提示格式错误,用的IAR CAN_MCR_TTOM  = 0;          //禁止时间触发通信   CAN_MCR_ABOM  = 1;          ...…

查看全部问答>

求闲置msp430 launchpad

论坛团购没赶上,那位童鞋手里有闲置的急求…

查看全部问答>

大家来谈谈,手机还可以集成什么功能?

本帖最后由 dontium 于 2015-1-23 13:11 编辑 两会(CES,MWC)上,手机“拼爹”(拼硬件)的现象依然严重,但也能看出一些厂商开始更理性的思考问题,譬如三星,在MWC上无大动作,而是推出了带微投功能的智能手机,试图从外围功能上找突破。今天 ...…

查看全部问答>

网络摄像机那一款好?

FOSCAM:国际品牌,外形磨砂、功能稳定、服务质量好。 威视达康: 主攻网络摄像机,产品设计比较美观。 普顺达:买过他们的产品,图像有点偏红,但是不会影响画质。 凯聪: 销售量非常很大,产品营销做的好 青青子木:产品种类不多,主营几款产 ...…

查看全部问答>