STM32F103C8T6在Arduino IDE里编程

发布者:ohp991养生的香菇最新更新时间:2019-03-18 来源: eefocus关键字:STM32F103C8T6  Arduino  IDE  编程 手机看文章 扫描二维码
随时随地手机看文章

前言

时代在进步,极客们手上的单片机也从古老的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一样丰富,基本它就淘汰了,优胜劣汰,学无止境,奋斗吧!

关键字:STM32F103C8T6  Arduino  IDE  编程 引用地址:STM32F103C8T6在Arduino IDE里编程

上一篇:STM32关于优先级设定的理解 NVIC_SetPriority()
下一篇:关于ST-Link下载STM32程序的使用

推荐阅读最新更新时间:2024-03-16 16:26

编程波形发生器 AD9833模块及测试实验
1. 该模块是购置于淘宝 GY9833: Price: 6.85。 AD9833购买模块以及测试实验 2. 测试实验板 (1) Hardware AltiumDesignTest2020GenretCntF103SPIF030K8 (2) Firmware 所在目录: ApplicationTest2020GeneralFSPIF030Src 模块AD9833驱动模块: AD9833.C, AD9833.H STM32FCubic配置 3. 测试实验 (1) 信号 波形参数 频率设置为10kHz, 波形选择sinusoidal. 相同的频率,输出为对称等腰三角波。 选择输出方波1. 选择输出方波2: 使
[测试测量]
可<font color='red'>编程</font>波形发生器 AD9833模块及测试实验
51单片机编程 第六节:低频频率计
第六节:低频频率计 实例目的:学时定时器、计数器、中断应用 说明:选用24MHz的晶体,主频可达2MHz。用T1产生100us的时标,T0作信号脉冲计数器。假设晶体频率没有误差,而且稳定不变(实际上可达万分之一);被测信号是周期性矩形波(正负脉冲宽度都不能小于0.5us),频率小于1MHz,大于1Hz。要求测量时标1S,测量精度为0.1%。 解:从测量精度要求来看,当频率超过1KHz时,可采用1S时标内计数信号脉冲个数来测量信号频,而信号频率低于1KHz时,可以通过测量信号的周期来求出信号频率。两种方法自动转换。 对于低于1KHz的信号,信号周期最小为1ms,也就是说超过1000us,而我们用的定时器计时脉冲周期为0.5us,如果定
[单片机]
MCS-51单片机外中断软件编程简介
简介:MCS-51单片机有多个中断源,以8051为例,有5个中断源,两个外中断、两个定时中断和一个串行中断,这一节我们讨论外中断软件编程。 外中断是由外部原因引起的中断,有两个中断源。即外中断0(INT0)和外中断1(INT1),中断请求信号由引脚P3.2(INT0)和P3.3(INT1)输入。 外中断请求信号有两种方式,一是电平方式,二是脉冲方式。可通过有关控制位的定义进行规定。 电平方式为低电平有效,只需在单片机的(INT0)和(INT1)中断请求输入端采样到有效的低电平时,就会激活外部中断。 脉冲方式则在脉冲的后负跳沿有效,即在相邻两个机器周期对中断请求引入端进行采样中,如前一次为高,后一次为低即为有效中断请求。
[单片机]
MCS-51单片机外中断软件<font color='red'>编程</font>简介
风河公司的嵌入式软件集成开发环境
1 嵌入式系统开发所面临的问题 嵌入式软件开发有别于桌面软件系统开发的一个显著特点是,它一般需要一个交叉编译和调试环境,即编辑和编译软件在主机上进行(如在PC机的WindOWS操作系统下),编译好的软件需要下载到目标机上运行(如在一个PPC目标机上的VxWorks操作系统下),主机和目标机建立起通信连接,并传输调试命令和数据。由于主机和目标机往往运行着不同的操作系统,而且处理器的体系结构也彼此不同。这就提高了嵌入式开发的复杂性。 总的来说,嵌入式开发所面.临的问题主要表现在以下几个方面。 (1)涉及多种CPU及多种OS 嵌入式的CPU或处理器可谓多种多样,包括了Pentium、MIPS、PPC、ARM,XScale
[应用]
单片机在串口通信和ICP编程上的应用
一.简介      P89LPC935是一种单片封装的微控制器,适用于许多要求高集成度,低成本的场合,可以满足多方面的性能要求。P89LPC935采用了高性能的处理器结构,指令的执行时间只需2~4个时钟周期,6倍于80C51标准器件。P89LPC935集成了许多系统级的功能,这样可大大减少元件的数目和电路板面积并降低系统的成本。     P89LPC935的主要特性有:     * 8KB的可字节擦除的FLASH程序存储器,组成1KB的扇区和64字节页。     * 256字节的RAM数据存储器和一个512字节的附加片内RAM,以及512字节的片内用户数据EEPROM存储区,可用来存放器件序列码及设置参数等。     *2个4
[单片机]
单片机在串口通信和ICP<font color='red'>编程</font>上的应用
stm32编程配置一个I/O为EXTI中断的步骤
配置一个I/O为EXTI中断的步骤: GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //1.使能EXTIx线的时钟和第二功能AFIO时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA,ENABLE); // NVIC_CONFIG(); //2.配置EXTIx线的中断优先级 NVIC_Priority
[单片机]
一个大学生学习编程的经历-值得借鉴
其实最近都想好好写一篇文章的,有些压力,也看到不少别人的故事,自己生活中的故事,自己的思考,一直没能写起来,因为想到要说的太多了,写起来难免有些宽泛,不着边际,今天刚好在淘宝上买的书到了,看了《我是一只IT小小鸟》几篇别人的奋斗篇,有些感触,头些天想要说的东西好像就要快浮现出来的样子,加紧写吧。 团队篇: 我其实和其中一个作者的境遇非常的相似,只是他坚持了很久我们没有坚持那么久而已,但是给人的感受却一点不比他的差,最初的团队是我在班上组织的,大二的时候,那个时候很兴奋的学习了Delphi,觉得在它身上会有一些作为,那时候刚好学校也开了一门Delphi课,更好借着这东风,可以让小队里的成员先学习Delphi掌握一些基
[单片机]
高集成度电源管理IC支持用户编程
欧胜微 电子 有限公司(Wolfson)推出一款高集成度的 电源管理 解决方案WM8320,可为便携式多媒体设备提供最大化的处理器性能和更长的电池寿命。 欧胜WM8320器件典型应用框图。 M8320是欧胜WM83xx电源管理产品系列的最新成员,该器件旨在为基于ARM处理器的多种应用提供体积更小、效率更高和成本更低的解决方案。WM8320结合了欧胜专有的BuckWise稳压器技术,使其电源管理 集成电路 (PMIC)能够处理用户开关不同的产品功能时在 电源 需求方面的切换。欧胜的新型Buckwise稳压器技术提供业内一流的瞬态性能,消除经常因电源需求的快速变化而导致的供电输出的扰动,而无需添加额外的
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved