GD32 与 PY32/STM32 (LL库) 在 ADC 架构和寄存器操作上的核心差异。
核心差异总结
1. GD32 (基于标准库/寄存器直接操作):
机制: 使用 RSQ (Regular Sequence) 寄存器。
操作: adc_regular_channel_config(rank, channel, ...) 实际上是修改序列中第 rank 个位置对应的通道号。
特性: 这是一个"写通道号"的操作。在大多数 GD32 型号中,只要不改变序列长度或触发源,动态修改 RSQ 中的通道值通常不需要关闭 ADC,因为硬件是在转换开始那一刻读取 RSQ 的当前值。
2. PY32 / STM32 (基于 LL 库):
机制: 使用 CHSELR (Channel Selection Register)。
操作: LL_ADC_REG_SetSequencerChannels() 是写入一个位图 (Bitmap)。例如,选通道 3 就是置位 bit 3。
特性: 这是一个"配置有效通道集合"的操作。根据 ARM Cortex-M0/M0+内核的 ADC 设计规范(以及 PY32/STM32 参考手册),当 ADEN (ADC Enable) 为 1 时,CHSELR 寄存器是只读的 (Write protected)。
后果: 如果在 ADC 使能状态下强行写入 CHSELR,写入会被忽略,或者导致总线错误(取决于具体系列),通道不会切换。因此,必须先 Disable -> 等待完全关闭 -> 修改寄存器 -> 重新 Enable -> 等待就绪。