一、硬件基础
富芮坤 FR3068x-C 是一款功能较为强大的芯片,具备一定的处理能力和丰富的接口资源。其内置的高性能处理器为音频解码和播放提供了基础支持,丰富的 GPIO 接口方便连接各类外部设备,如音频放大器、存储设备等,为音乐播放功能的实现搭建了良好的硬件平台。收到的主要部件面、

主控 MCU:
- FR3068E-C 芯片架构属于双核架构,包括一颗独立的蓝牙核做蓝牙通讯,以及另外一颗主核MCU,双核之间通过串口做 HCI 通讯,蓝牙核一般不对外开放
- 内置 128KB CRAM+512KB SRAM,2MB flash (根据芯片型号有不同大小配置)
- 需外挂 24 MHz 晶体时钟,系统主频最高可倍频至 156 MHz
- 工作温度:工业级 -40~105 ℃
- 有 57 个可编程 IO(不同型号/封装会有所不同)
- 支持 2 路 CAN 总线,支持 CAN FD
- 支持丰富的外设总线如 SPI / UART / USB等
- 支持双模蓝牙 BLE + BT / EDR
蓝牙
FR306x-C 符合蓝牙 V5.3 标准,支持 BR 1Mbps GFSK, EDR 2Mbps π/4-DQPSK, 3Mbps 8DPSK; BLE1M/2Mbps GFSK, 125K/500K 多种模式,支持单独打开和关闭不同的模式,支持蓝牙多主多从多连接。
硬件资源

- 2x PDM 数字音频接口
- 2x 32位宽的I2S 接口
- 3x I2C
- 6x UART 带流控
- 2x SPI 主接口,支持 QSPI,OSPI
- 2x SPI 从接口,一路是单线的,一路支持四线
- USB 2.0 OTG
- 最多支持 2 x 16 channel PWM,支持输入捕获,可以做PWM DAC输出
- 最多支持 9 通道12bit SAR-ADC,支持普通模式、队列模式;
- 最多支持 57 个可配置 GPIO
- CAN FD 控制器
- 符合 CAN 总线协议 V 2.0 part A, B ,符合 ISO 11898-1
- Display显示接口 8080/6080/RGB/SPI
- 6x 32bit timer
- 2x DMA
- SDIO3.0
- 硬件加密单元 AES-128, AES-192, AES-256
- 支持 Floating point unit (FPU)
- 真随机数发生器 TRNG
- 像素编码转换器 YUV2RGB
二、软件实现
大概的流程实现框图:
通过 B站的REPL MicroPython视频介绍与官方的SDK 来实现本地音乐播放,大大降低了开发门槛。
注意烧录的问题:

MicroPython 简洁的语法让开发者能够快速上手,利用其丰富的库函数开发前可以提前调整下时钟;
通过设置CORE_HSCLK(内核高速时钟)的时钟源为HSE(高速外部时钟源),以及对SPLL(系统锁相环)和AUPLL(音频锁相环)的配置,确定了系统的基本时钟频率。时钟就像是系统的 “心脏”,稳定且合适的时钟频率为整个芯片的稳定运行提供了基础,使得芯片内部的处理器、寄存器等组件能够按照预期的节奏进行工作。

时钟的调整可实现播放速度变化
1.变量定义
System_ClkConfig_t ClkConfig;定义了一个System_ClkConfig_t类型的结构体变量ClkConfig,该结构体用于存储系统时钟的各种配置参数。
2. 配置 CORE_HSCLK(高速时钟)
ClkConfig.CORE_HSCLK_CFG.CORE_HSCLK_Source = CORE_HSCLK_SEL_HSE;将CORE_HSCLK(内核高速时钟)的时钟源设置为HSE(高速外部时钟源)。
3. 配置 SPLL(系统锁相环)时钟
ClkConfig.SPLL_CFG.PowerEn = PLL_POWER_ENABLE;
ClkConfig.SPLL_CFG.PLL_N =8;
ClkConfig.SPLL_CFG.PLL_K =0;
- ClkConfig.SPLL_CFG.PowerEn = PLL_POWER_ENABLE;:使能系统锁相环(SPLL)的电源。
- ClkConfig.SPLL_CFG.PLL_N = 8;:设置 SPLL 的倍频因子N为 8。
- ClkConfig.SPLL_CFG.PLL_K = 0;:设置 SPLL 的分频因子K为 0 。通过公式PLL clock = HSE_VALUE*N + (HSE_VALUE/65535)*M(代码注释中有提及,不过代码中未设置M相关内容)来计算 SPLL 输出时钟频率。
4. 配置 AUPLL(音频锁相环)时钟(可以适当调整)
ClkConfig.AUPLL_CFG.PowerEn = PLL_POWER_DISABLE;
ClkConfig.AUPLL_CFG.PLL_N =8;
ClkConfig.AUPLL_CFG.PLL_K =0;
ClkConfig.AUPLL_CFG.FGEn =0;
- ClkConfig.AUPLL_CFG.PowerEn = PLL_POWER_DISABLE;:禁用音频锁相环(AUPLL)的电源。
- ClkConfig.AUPLL_CFG.PLL_N = 8;:设置 AUPLL 的倍频因子N为 8。
- ClkConfig.AUPLL_CFG.PLL_K = 0;:设置 AUPLL 的分频因子K为 0。
- ClkConfig.AUPLL_CFG.FGEn = 0;:禁用 AUPLL 的某个功能(根据代码上下文推测FGEn可能是功能使能相关的配置位 )。
5. 执行系统时钟配置函数
System_CORE_HSCLK_config(&ClkConfig.CORE_HSCLK_CFG);if(System_SPLL_config(&ClkConfig.SPLL_CFG,200)==-1)while(1);if(System_AUPLL_config(&ClkConfig.AUPLL_CFG,200)==-1)while(1);System_CORE_HSCLK_config(&ClkConfig.CORE_HSCLK_CFG);:根据前面设置的CORE_HSCLK配置参数来配置内核高速时钟。
- if (System_SPLL_config(&ClkConfig.SPLL_CFG,200) == -1):尝试配置系统锁相环 SPLL,如果配置函数返回 -1(表示配置失败),则进入死循环,阻止程序继续执行。
- if (System_AUPLL_config(&ClkConfig.AUPLL_CFG,200) == -1):尝试配置音频锁相环 AUPLL,如果配置函数返回 -1(表示配置失败),则进入死循环,阻止程序继续执行。
6. 配置 MCU 时钟源及相关分频参数
ClkConfig.MCU_Clock_Source = MCU_CLK_SEL_CORE_HSCLK;
ClkConfig.SOC_DIV =1;
ClkConfig.MCU_DIV =1;
ClkConfig.APB0_DIV =1;
ClkConfig.APB1_DIV =1;
ClkConfig.APB2_DIV =1;
- ClkConfig.MCU_Clock_Source = MCU_CLK_SEL_CORE_HSCLK;:将 MCU(微控制单元)的时钟源设置为CORE_HSCLK。
- 后面几条语句分别设置了不同总线上的分频因子(如SOC_DIV、MCU_DIV、APB0_DIV、APB1_DIV、APB2_DIV),这些分频因子用于调整不同总线的时钟频率,以满足不同外设的需求。
三.测验
1.SecureCRT打开串口,波特率选择921600。上电后回车进入shell模式,输入help可以按到命令提示。这里rxfile命令,使用xmodem加载由ffmpeg工具转化生成的wav音频文件到开发板,等待传输完成,可以通过ls 2:/ 查询文件。
2.shell命令播放
dacpa 1 //打开功放
dacpa 0 //关闭功放--静音
dacplay 2:/leiqiao.wav //播放音乐
dacstop //播放停止
dacvolume 20 //调节音量 0-100
2.micropython播放
'''播放 输入代码'''
micropython
import pyb
audio=pyb.AUDIO(1)
audio.play('2:/haikuotiankong.wav')
#结束
audio.stop()
#音量
audio.volume(5)
#PA开
audio.mute(0)
#PA关
audio.mute(1)
输入命令行与效果视频如下: