从0开始构建Arduino_STM32

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0开始构建Arduino_STM32相关的知识,希望对你有一定的参考价值。

简 介: 测试了直接从STM32F103C芯片搭建能够适合于Arduino进行开发的最小系统,并对于最基础的功能进行了测试。

关键词 STM32Arduino

 

§01 建Arduino STM32


  用Arduino完成对于STM32的开发,特别是对于手边具有大量的STM32F103C来说,利用它可以提高应用的效率。在 安装 Arduino IDE 中STM32 软件包,ESP8266软件包 给出了如何在Arduino IDE的设置STM32开发软件包。

  由于手边已经具有了STM32 Bootloader软件接口,所以下面的实验只是利用Arduino IDE的Export Compiled Binary的功能来生成应用程的二进制文件,然后在通过STM32Bootloader下载到STM32F103C芯片中。

  STM32F103具有三个UART,可以应用在 Arduino基本人机接口:点阵LED、汉字库、键盘 中完成对于人脸识别模块、语言模块、WiFi ESP8266模块的通讯中。

1、构建Arduino STM32

  在 SHENZHEN_SCHEMATIC 中除了设计Arduino 的参考电路图。

▲ 图1-1 STM32F103最小系统的参考设计电路

▲ 图1-1 STM32F103最小系统的参考设计电路

  在 Introduction to the STM32 Blue Pill (STM32duino) 给出了STM32F103C ArduinoIDE中的管脚定义。

▲ 图1-2 STM32F103 Arduino 管脚定义图

▲ 图1-2 STM32F103 Arduino 管脚定义图

  参照上面电路设计设计测试STM32F103C最小系统图。

2、电路设计1

▲ 图1-2-1 测试电路SCH

▲ 图1-2-1 测试电路SCH

▲ 图1-3 快速制版PCB

▲ 图1-3 快速制版PCB

3、初步测试

  焊接电路板之后进行测试。

▲ 图1-4 测试电路板

▲ 图1-4 测试电路板

 

§02 件调试


1、下载程序工具

  使用STM32BOODLOADER软件完成STM32软件下载,它是利用了MCU本身的串口Bootloader完成程序下载。

▲ 图2-1 STM32BOOTLOADER

▲ 图2-1 STM32BOOTLOADER

  下载程序:

  利用Arduino Sketch中的Export Compiled Binary生成执行文件。在STM32Bootloader中Download Filename中输入对应在执行程序生成的Binary文件便可以正常下载。

(1)测试程序

/*
**==============================================================================
** TEST1.C:             -- by Dr. ZhuoQing, 2021-05-31
**
**==============================================================================
*/
#define ON(pin)                 digitalWrite(pin, HIGH)
#define OFF(pin)                digitalWrite(pin, LOW)
#define VAL(pin)                digitalRead(pin)
#define IN(pin)                 pinMode(pin, INPUT)
#define OUT(pin)                pinMode(pin, OUTPUT)
#define LED PB12
//------------------------------------------------------------------------------
void setup(void) {
    pinMode(LED, OUTPUT);
}
//------------------------------------------------------------------------------
void loop(void) {
    ON(LED);
    delay(200);
    OFF(LED);
    delay(100);
}
//==============================================================================
//                END OF FILE : TEST1.C
//------------------------------------------------------------------------------

(2)程序运行结果

▲ 图2-2 示例程序运行结果

▲ 图2-2 示例程序运行结果

  测试的工作电流大约为44mA左右。如果将内部工作频率修改为128MHz ,此时工作电流将会达到61mA左边。

▲ 图2-3 晶振测量到的频率信号

▲ 图2-3 晶振测量到的频率信号

2、测试串口

(1)测试程序

/*
**==============================================================================
** TEST1.C:             -- by Dr. ZhuoQing, 2021-05-31
**
**==============================================================================
*/
#define ON(pin)                 digitalWrite(pin, HIGH)
#define OFF(pin)                digitalWrite(pin, LOW)
#define VAL(pin)                digitalRead(pin)
#define IN(pin)                 pinMode(pin, INPUT)
#define OUT(pin)                pinMode(pin, OUTPUT)
#define LED PB12
#define LED1 PB2
//------------------------------------------------------------------------------
void setup(void) {
    pinMode(LED, OUTPUT);
    OUT(LED1);
    Serial.begin(115200);
}
//------------------------------------------------------------------------------
void loop(void) {
    ON(LED);
    ON(LED1);
    delay(200);
    OFF(LED);
    OFF(LED1);
    delay(100);
    Serial.print("U");
}
//==============================================================================
//                END OF FILE : TEST1.C
//------------------------------------------------------------------------------

(2)运行结果

  下面是从图2-4 在STM32BOOTLOADER中接收到的字符串。
▲ 图2-4 在STM32BOOTLOADER中接收到的字符串

▲ 图2-4 在STM32BOOTLOADER中接收到的字符串

3、测试交互

/*
**==============================================================================
** TEST1.C:             -- by Dr. ZhuoQing, 2021-05-31
**
**==============================================================================
*/
#define ON(pin)                 digitalWrite(pin, HIGH)
#define OFF(pin)                digitalWrite(pin, LOW)
#define VAL(pin)                digitalRead(pin)
#define IN(pin)                 pinMode(pin, INPUT)
#define OUT(pin)                pinMode(pin, OUTPUT)
#define LED PB12
#define LED1 PB2
//------------------------------------------------------------------------------
void setup(void) {
    pinMode(LED, OUTPUT);
    OUT(LED1);
    Serial.begin(115200);
    Serial.setTimeout(1);
    Serial.println("Test Hello...");
}
//------------------------------------------------------------------------------
void loop(void) {
    int nNumber;
    if(Serial.available() > 0) {
        nNumber = Serial.parseInt();
        Serial.println(nNumber);
    }
    delay(10);
}
//==============================================================================
//                END OF FILE : TEST1.C
//------------------------------------------------------------------------------

  不知道为什么,在能够接收到的数据之后总是能够收到一个数字0。这也许是最后发送的回车信息所造成的了。

  取消RETURN,可以不发送\\r,此时显示就正常了。

▲ 图2-5 取消RETURN,可以不发送\\r

▲ 图2-5 取消RETURN,可以不发送\\r

  测试显示,利用Serial.parseInt()函数,可以对输入的一行中包括有多个数字,使用空格隔开的情况下,显示多个数字。

 

建测试总结 ※


  试了直接使用STM32F103C搭建测Arduino 的开发板。并且对于它的基本功能进行测测试。


■ 相关文献链接:

● 相关图表链接:


  1. 测试电路板AD工程文件:AD\\Test\\2021\\Arduino\\ArduinoSTM32.PcbDoc * ↩︎

以上是关于从0开始构建Arduino_STM32的主要内容,如果未能解决你的问题,请参考以下文章

如何从0到1构建32Core树莓派集群

我可以在片段中构建操作栏吗?

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

无法从 onListItemClick 开始片段

后按时从 onCreate() 开始片段

机器学习——从0开始构建自己的GAN网络