Raspberry Pi Pico SDK中set_sys_clock_khz函数在低频下的使用注意事项
在Raspberry Pi Pico SDK开发过程中,开发者可能会遇到系统时钟设置函数set_sys_clock_khz在低频(低于20MHz)下无法正常工作的问题。这个问题在不同版本的SDK中表现不同,特别是在1.3.1和1.5.1版本之间存在明显差异。
问题现象
当开发者尝试使用set_sys_clock_khz函数将系统时钟设置为低于20MHz的频率(如19MHz、12MHz或10MHz)时,在SDK 1.5.1版本中会遇到设置失败的情况,而同样的代码在SDK 1.3.1版本中却能正常工作。
原因分析
经过深入调查,发现这个问题与PLL(锁相环)的最小VCO(压控振荡器)频率设置有关。在SDK 1.5.1版本中,默认将PICO_PLL_VCO_MIN_FREQ_MHZ定义为700MHz,而SDK 1.3.1版本中该值被设置为400MHz。
PLL的工作原理是将输入时钟频率通过倍频和分频产生所需的输出频率。VCO频率是PLL内部的关键参数,它必须保持在特定范围内才能正常工作。当系统时钟设置过低时,如果VCO最小频率限制过高,可能会导致无法找到合适的PLL配置参数。
解决方案
要解决这个问题,开发者可以在项目的CMakeLists.txt文件中显式设置PICO_PLL_VCO_MIN_FREQ_MHZ为400MHz:
target_compile_definitions(your_target_name PRIVATE
PICO_PLL_VCO_MIN_FREQ_MHZ=400
)
这个修改将降低PLL VCO的最小频率限制,使得系统能够在更低的主频下找到合适的PLL配置参数。
技术背景
Pico的时钟系统由多个组件组成,包括晶体振荡器、PLL和时钟分频器等。系统时钟可以通过多种方式生成,其中PLL提供了灵活的频率合成能力。VCO频率是PLL内部的关键参数,它必须满足:
- 足够高以保证PLL的稳定工作
- 足够低以避免超出PLL的工作范围
在设置系统时钟频率时,SDK会自动计算合适的PLL配置参数。当目标频率较低时,可能需要降低VCO频率才能找到可行的配置方案。这就是为什么降低PICO_PLL_VCO_MIN_FREQ_MHZ可以解决低频设置问题的原因。
最佳实践
- 当需要设置低频系统时钟时,建议明确设置
PICO_PLL_VCO_MIN_FREQ_MHZ为400MHz - 在项目文档中记录这种特殊配置,以便团队成员了解
- 测试系统在低频下的稳定性,确保所有外设都能正常工作
- 考虑使用更低的功耗模式(如休眠模式)来替代降低主频的方案
总结
Raspberry Pi Pico SDK在不同版本中对PLL配置参数的默认值进行了调整,这可能会影响低频系统时钟的设置。开发者需要了解这一变化,并根据实际需求调整相关参数。通过合理配置PICO_PLL_VCO_MIN_FREQ_MHZ,可以确保系统在各种时钟频率下都能正常工作。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust099- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00