一、代码实现(CubeIDE)
1、查询模式
1、时钟配置
配置ADC1的1通道为独立模式、4分频、12位数据、右对齐、0增益补偿、非扫描模式、转换选择的常规通道结束、不使用低功耗自动等待模式、单次转换模式、不使用DMA、溢出数据保留。
启用常规转换、不使能定期过采样、序列数为1、触发源选择软件触发、无触发边缘检测。
2、代码实现
(1)数据校验
(2)软件触发
(3)ADC检测
(4)检测EOC标志位
(5)获取寄存器中的数据并进行数据转换。
(6)通过串口打印出来当前的电压值
3、代码结果
我使用单步调试,在数据获取的这一行打了断点,在断点前数据都没有变化。
在单步调试过了断点代码后,adc_value变量发生了改变。我测的是3.3v的电压,现象正确。
下面是我用7逻辑分析仪抓取的捕获时长。我配置的SMP = 100: 47.5 ADC clock cycles、Tconv = 47.5 + 12.5 = 60ADC时钟周期。时钟频率F = 170/4 = 42.5MHz。采样时长应该是60/42.5 = 1.4117。但结果并不如此。
可能是在程序中的GPIO口翻转时耗费了时间。
2、中断方式
首先,配置好ADC打开中断
在主函数中每隔500ms触发一次ADC中断转换
在ADC回调函数中在串口上打印出来ADC值。
代码运行结果