富芮坤 FR3068x-C 在基于 REPL MicroPython 实现本地音乐播放的表现值得关注

一、硬件基础


富芮坤 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)

      输入命令行与效果视频如下: