Arduino开发环境搭建
1. 打开ArduinoIDE。点击 “文件” 菜单,然后点击 “首选项”。

2. “首选项” 对话框将打开,然后将以下链接添加到 “其它开发板管理器地址”字段, 并点击 “确定”: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
3. 点击 “工具” 菜单,然后点击 “开发板 > 开发板管理器” 或使用左侧栏带下划线的图标。
4. 在搜索栏输入 stm32 选择 “STM32 MCU based boards”,并点击安装。我这里的环境已经安装好了 2.9.0版本,而最新版本为 2.10.1 此处显示的是更新,如果没有安装过,则会显示最新版本,旁边按钮字样为 安装。

基础任务1:使用单片机定时器实现1s翻转LED验证开发板时钟晶振是否正确;
搭建好开发环境之后,就可以使用 Arduino 进行愉快地玩耍了,按照基础任务1的要求,先来点个灯吧!
代码实现
/**
* 任务1:使用单片机定时器实现1s翻转LED验证开发板时钟晶振是否正确;
*/
void task1() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT); // 设置LED引脚为输出
while(1) {
Serial.println(millis()); // 打印当前执行毫秒数值
digitalToggle(LED_BUILTIN); // 翻转LED
delay(1000); // 延时1秒
}
}效果展示

基础任务2:实现OLED屏幕显示信息;
硬件准备
NUCLEO-F411RE 开发板 1 块
Grove - 0.96英寸黄蓝双色OLED显示屏 1 个
面包板 1 块
杜邦线 若干
Grove - 0.96英寸黄蓝双色OLED显示屏 默认情况下是通过 IIC 连接,按照如下图所示,连接到开发板即可。

代码实现
#include <Wire.h>
#include <U8g2lib.h>
static U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
/**
* 任务2:实现OLED屏幕显示信息;
*/
void task2() {
Serial.begin(115200);
delay(1000); // 延时一秒后初始化OLED屏
// U8g2 初始化
while(!u8g2.begin()) {
Serial.println(F("SSD1306 allocation failed"));
delay(2000); // 不要继续,永远循环下去
}
u8g2.enableUTF8Print(); // 启用UTF8
u8g2.setFont(u8g2_font_unifont_t_chinese2); // 设置字体,支持中文
Serial.println("OLED init finished.");
while(1) {
u8g2.firstPage();
do {
u8g2.setCursor(2, 15);
u8g2.print("Hello EEPW!");
u8g2.setCursor(2, 32);
u8g2.print("你好 EEPW!");
u8g2.setCursor(2, 48);
u8g2.printf("millis: %d", millis());
} while(u8g2.nextPage());
delay(1000);
}
}效果展示

基础任务3:使用开发板实现对INA219的负载测量5V,12V电压电流并显示在OLED。
硬件准备
NUCLEO-F411RE 开发板 1 块
Grove - 0.96英寸黄蓝双色OLED显示屏 1 个
Gravity I2C数字功率计模块 1个
面包板 1 块
杜邦线 若干

Gravity I2C数字功率计 也是通过 IIC 连接到开发板,在基础任务2的基础上,参考上图的功率测量负载连接方案增加 Gravity I2C数字功率计 的连接。按照如下图所示,连接到开发板即可。

代码实现
#include <Wire.h>
#include <U8g2lib.h>
#include <DFRobot_INA219.h>
// OLED 显示屏定义
static U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
// INA219
static DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS4);
// 测量结果
static float busVoltage = 0.0; // 总线电压
static float shuntVoltage = 0.0; // 分线电压
static float current = 0.0; // 电流
static float power = 0.0; // 功率
/**
* 任务3:使用开发板实现对INA219的负载测量5V,12V电压电流并显示在OLED。
*/
void task3() {
Serial.begin(115200);
delay(1000); // 延时一秒后继续初始化
// INA219 初始化
while(ina219.begin() != true) {
Serial.println("INA219 begin faild");
delay(2000); // 不要继续,永远循环下去
}
// U8g2 初始化
while(!u8g2.begin()) {
Serial.println(F("SSD1306 allocation failed"));
delay(2000); // 不要继续,永远循环下去
}
u8g2.enableUTF8Print(); // 启用UTF8
u8g2.setFont(u8g2_font_unifont_t_chinese3); // 设置字体,支持中文
Serial.println("OLED init finished.");
while(1) {
// 读取 INA219 数据
busVoltage = ina219.getBusVoltage_V();
shuntVoltage = ina219.getShuntVoltage_mV();
current = ina219.getCurrent_mA();
power = ina219.getPower_mW();
// OLED 显示当前电压电流,以及功率信息。
u8g2.firstPage();
do {
u8g2.setCursor(5, 14);
u8g2.print(" 电压电流表");
u8g2.setCursor(2, 31);
u8g2.print("电压: ");
u8g2.print(busVoltage);
u8g2.print(" V");
u8g2.setCursor(2, 48);
u8g2.print("电流: ");
u8g2.print(current);
u8g2.print(" mA");
u8g2.setCursor(2, 63);
u8g2.print("Power: ");
u8g2.print(power);
u8g2.print(" mW");
} while(u8g2.nextPage());
// 串口打印
Serial.print("BusVoltage: ");
Serial.print(busVoltage, 2);
Serial.println("V");
Serial.print("ShuntVoltage: ");
Serial.print(shuntVoltage, 3);
Serial.println("mV");
Serial.print("Current: ");
Serial.print(current, 1);
Serial.println("mA");
Serial.print("Power: ");
Serial.print(power, 1);
Serial.println("mW");
Serial.println("");
delay(1000);
}
}效果展示

我要赚赏金
