一、硬件介绍
1、产品特点
Arduino GIGA R1 WiFi 开发板,提供76个GPIO引脚(其中12个为模拟端口、12个PWM、4个串行端口、3个I2C、2个SPI、1个FDCAN、1个SAI);
采用双核STM32H747XI微控制器(480MHz的Cortex-M7内核和240 MHz的Cortex-M4内核);
配备2MB闪存、1MB内存,以及6MB外部闪存和8MB SDRAM;
通过板载Murata 1DX模块实现WiFi和低功耗蓝牙连接;
还有输入/输出3.5mm音频插孔、JTAG连接器、20Pin的Arducam相机连接器等;


主要特性
微控制器:STMicro STM32H747XI Cortex-M7@480 MHz + M4 @ 240 MHz MCU(2MB 双组闪存、1MB RAM)
内存:8MB SDRAM
存储:16MB QSPI NOR 闪存
无线功能:2.4GHz WiFi 802.11b/g/n和蓝牙 5.1 BR/EDR/LE(Murata 1DX 模块)
接口
显示屏:20pin接口
摄像头:20pin Arducam摄像头接口
USB1x USB Type-C 端口用于编程和 HID1x USB 2.0 主机 Type-A 端口
音频:3.5 毫米音频插孔
调试:JTAG 连接器
电源:通过VIN引脚提供6 ~ 24V输入
VRT(为RTC供电)和 OFF(关闭电路板电源)引脚
复位按钮、BOOT0按钮、RGB_LED、电源LED
安全功能:Microchip ATECC608A
每个 I/O 引脚 8mA
二、功能实现
1、硬件介绍
GIGA R1的微控制器为STM32H747XI,其ADC分辨率最高16位(可配置为 16/14/12/10/8位);
DAC的分辨率12位;
通过相关支持库,可以实现STM32H7许多ADC / DAC的高级功能(DMA、参数配置、通道采集等)
原理图
摇杆模块
摇杆模块,随着摇杆方向的变化,阻值也会随着变化,从而改变输出的值;
初始状态下X,Y读出电压为供电电压的1/2左右( 1.65V / 2.5V );
当随着X、Y方向移动时,读出电压值减小(0V) / 增大(VCC);
实物搭建效果:
2、功能效果
1、ADC功能效果:通过开发板的ADC功能,当移动摇杆X、Y轴方向时,串口输出当前移动方向的ADC以及其映射的数值;
(摇杆模块输出的是模拟信号 / 映射的数值(-100 ~ 100)具有正负方向性)
2、DAC功能效果:通过开发板的DAC功能,通过串口读取不同的指令,然后在DAC0引脚上生成不同的波形(1kHz),并通过示波器进行波形的显示;
三、代码编写1、安装ADC / DAC支持库
Arduino_AdvancedAnalog:适配H7_ADC / DAC的硬件DMA等高级功能;
2、ADC功能
主要相关代码
#include <Arduino_AdvancedAnalog.h> AdvancedADC adc(A0, A1); uint64_t last_millis = 0; void setup() { Serial.begin(115200); // 16位 采样率16kHz 缓冲区大小32 队列深度128 if (!adc.begin(AN_RESOLUTION_16, 16000, 32, 128)) { Serial.println("ADC 功能初始失败!"); while (1); } } void loop() { if (adc.available()) { SampleBuffer buf = adc.read(); if ((millis() - last_millis) > 200) { // 获取原始数据 (范围 0 - 65535) uint16_t rawX = buf[0]; // A0 uint16_t rawY = buf[1]; // A1 // -100 到 100 (映射正负方向) long mapX = map(rawX, 0, 65535, -100, 100); long mapY = map(rawY, 0, 65535, -100, 100); Serial.print("Raw X: "); Serial.print(rawX); Serial.print(" | Map X: "); Serial.print(mapX); Serial.print(" || "); Serial.print("Raw Y: "); Serial.print(rawY); Serial.print(" | Map Y: "); Serial.println(mapY); last_millis = millis(); } // 释放缓冲区 buf.release(); } }
3、DAC功能
主要相关代码
#include <Arduino_AdvancedAnalog.h> // 输出频率 = SAMPLE_RATE / N_SAMPLES ≈ 1000 Hz #define N_SAMPLES (2048) // 采样点数 #define SAMPLE_RATE (2048000) // 采样率 (Hz) // 使用 DAC0引脚 AdvancedDAC dac0(DAC_0); // 缓冲区 uint16_t SAMPLES_BUFFER[N_SAMPLES]; // 波形生成 void generate_waveform(int cmd) { Serial.println(); switch (cmd) { case 't': // 三角波 Serial.print("当前波形: 三角波"); for (int i = 0; i < N_SAMPLES; i++) { float position = (float)i / N_SAMPLES; float val_norm; if (position < 0.5) { val_norm = position * 2.0; // 0 -> 1 } else { val_norm = (1.0 - position) * 2.0; // 1 -> 0 } SAMPLES_BUFFER[i] = (uint16_t)(val_norm * 4095); } break; case 'q': // 方波 Serial.print("当前波形: 方波"); for (int i = 0; i < N_SAMPLES; i++) { if (i < (N_SAMPLES / 2)) { SAMPLES_BUFFER[i] = 4095; } else { SAMPLES_BUFFER[i] = 0; } } break; case 's': // 正弦波 Serial.print("当前波形: 正弦波"); for (int i = 0; i < N_SAMPLES; i++) { SAMPLES_BUFFER[i] = (uint16_t)(sin(2 * PI * i / N_SAMPLES) * 2047 + 2048); } break; case 'r': // 锯齿波 Serial.print("当前波形: 锯齿波"); for (int i = 0; i < N_SAMPLES; i++) { SAMPLES_BUFFER[i] = map(i, 0, N_SAMPLES, 0, 4095); } break; default: // 无效字符 return; } } void setup() { Serial.begin(115200); while (!Serial) {} Serial.println("输入指令: t(三角), q(方波), s(正弦), r(锯齿)"); // 默认波形 (正弦波) generate_waveform('s'); // DAC 初始化 // 分辨率 / 采样率 / 缓冲区大小 / 缓冲区数量 if (!dac0.begin(AN_RESOLUTION_12, SAMPLE_RATE, N_SAMPLES, 32)) { Serial.println("启动 DAC 失败 !"); while (1); } } void loop() { // 处理串口指令 if (Serial.available() > 0) { int cmd = Serial.read(); if (cmd != '\n' && cmd != '\r') { generate_waveform(cmd); } } // 填充 DAC 缓冲区 if (dac0.available()) { SampleBuffer buf = dac0.dequeue(); // 复制到DMA缓冲区中 for (size_t i = 0; i < buf.size(); i++) { buf[i] = SAMPLES_BUFFER[i % N_SAMPLES]; } dac0.write(buf); } }
四、程序烧录1、连接USB数据线至开发板;
2、选择端口号对应的开发板;
3、点击 上传 烧录程序到开发板上;
五、效果演示
ADC功能演示
移动摇杆时,串口输出此时的ADC以及其映射的数值;
DAC功能演示
生成4种不同的波形;








我要赚赏金
