从0开始构建Arduino_STM32
Posted 卓晴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从0开始构建Arduino_STM32相关的知识,希望对你有一定的参考价值。
简 介: 测试了直接从STM32F103C芯片搭建能够适合于Arduino进行开发的最小系统,并对于最基础的功能进行了测试。
关键词
: STM32,Arduino
§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最小系统的参考设计电路
在 Introduction to the STM32 Blue Pill (STM32duino) 给出了STM32F103C ArduinoIDE中的管脚定义。
▲ 图1-2 STM32F103 Arduino 管脚定义图
参照上面电路设计设计测试STM32F103C最小系统图。
2、电路设计1
▲ 图1-2-1 测试电路SCH
▲ 图1-3 快速制版PCB
3、初步测试
焊接电路板之后进行测试。
▲ 图1-4 测试电路板
§02 软件调试
1、下载程序工具
使用STM32BOODLOADER软件完成STM32软件下载,它是利用了MCU本身的串口Bootloader完成程序下载。
▲ 图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 示例程序运行结果
测试的工作电流大约为44mA左右。如果将内部工作频率修改为128MHz ,此时工作电流将会达到61mA左边。
▲ 图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中接收到的字符串
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
测试显示,利用Serial.parseInt()函数,可以对输入的一行中包括有多个数字,使用空格隔开的情况下,显示多个数字。
※ 构建测试总结 ※
测试了直接使用STM32F103C搭建测Arduino 的开发板。并且对于它的基本功能进行测测试。
■ 相关文献链接:
- 安装 Arduino IDE 中STM32 软件包,ESP8266软件包
- Arduino基本人机接口:点阵LED、汉字库、键盘
- SHENZHEN_SCHEMATIC
- Introduction to the STM32 Blue Pill (STM32duino)
● 相关图表链接:
- 图1-1 STM32F103最小系统的参考设计电路
- 图1-2 STM32F103 Arduino 管脚定义图
- 图1-2-1 测试电路SCH
- 图1-3 快速制版PCB
- 图1-4 测试电路板
- 图2-1 STM32BOOTLOADER
- 图2-2 示例程序运行结果
- 图2-3 晶振测量到的频率信号
- 图2-4 在STM32BOOTLOADER中接收到的字符串
- 图2-5 取消RETURN,可以不发送\\r
测试电路板AD工程文件:AD\\Test\\2021\\Arduino\\ArduinoSTM32.PcbDoc * ↩︎
以上是关于从0开始构建Arduino_STM32的主要内容,如果未能解决你的问题,请参考以下文章