Oversample_shift官方提供了GD32E230的外设库
因为两者大部分功能相同,另一方面是也别无选择,因为没有针对GD32E231的代码
使用GD32E230_Firmware_Library_V1.0.0下边的Examples\ADC测试了一下
工程上直接把对应的文件复制到Template下就可以运行
最开始我先测试了Temperature_Vref例程,因为不需要外接导线使用起来比较方便
使用IDE打开例程后可以一次编译成功,非常好
调试运行时能看到温度值变化,用手指加热芯片温度会上升
证明通过ADC读取内部温度传感器的数据是正常的
当然MCU片内温度传感器误差正负2、3摄氏度是很正常的就不和其它传感器做对比了
然后我测试了Timer_trigger_injected_channel例程,运行后没有效果
看名称猜测是使用定时器触发采样的例程,在代码里没有找到读取ADC数据的选项
不知道这个例程是没有写完还是别有其它用途
Regular_channel_with_DMA例程DMA的方式读取ADC也是正常的
Resolution例程降分辨率测量也正常
Oversample_shift例程过采样也正常
adc_oversample_mode_config(ADC_OVERSAMPLING_ALL_CONVERT, ADC_OVERSAMPLING_SHIFT_4B, ADC_OVERSAMPLING_RATIO_MUL16);
ADC_OVERSAMPLING_RATIO_MUL16是过采样数量,ADC_OVERSAMPLING_SHIFT_4B是要丢掉的位数,如果设置成ADC_OVERSAMPLING_SHIFT_NONE后ADC的分辨率是16位,设置成ADC_OVERSAMPLING_SHIFT_4B使分辨率又降回12位
这样可以提高噪声性能
Regular_channel_discontinuous_mode例程测试也正常
最后在Analog_watchdog例程里又发现了问题
例程应该是通过设置一个ADC阈值,然后通过根据测量值触发中断
中断触发后LED2(对应为GD32E231C_START的LED3)会亮3秒然后熄灭
实际测试时LED3一直常亮,不论ADC的通道2是接电还是接地
使用示波器测量LED波形有非常短的低电平
断点打在ADC_CMP_IRQHandler里发现这个中断会反复触发
不 知道是不是程序设计的问题
本帖最后由 littleshrimp 于 2019-3-21 20:11 编辑