keil开发L0系列是免费的,官方提供许可的。因此建议Keil开发,
L011F3由于flash只有8K,因此不建议HAL库,建议使用cubemx+LL(或snippets库)。
0、起初,可以参考官方库中自带的例程,有LL例程,MIX(LL+HAL混合)例程,HAL例程,snippets(基于L053)例程。
建立自己的工程,如果不太熟悉L0系列,可以使用cubemx来进行配置,生成最基本的工程模板,然后可以再结合例程,移植到工程当中,
1、使用cubemx新建LL库的基本例程,可以把GPIO+UART的配置可以完成。
2、LL库中有ADC_MultiChannelSingleConversion的例程,目录在\STM32Cube_FW_L0_V1.11.0\Projects\NUCLEO-L073RZ\Examples_LL\ADC\ADC_MultiChannelSingleConversion\,这个开发板的例程最多了。
例程中使用ADC+DMA采样一路外部引脚+vref+tsen,自己可以修改为采集两路外部引脚。
3、例程中有adc+dma的中断处理,我们可以暂时不用,先完成两路采集,因此方案有:单次转换模式,连续转换模式 可以完成。
4、具体的配置可以参考LL例程,首先以单次转换模式为例,使用systick作为系统的定时器,每隔10ms开启一次ADC软件转换,同时在adc配置中使用LL_ADC_REG_SetContinuousMode(ADC1, LL_ADC_REG_CONV_SINGLE);
注意,不需要关闭ADC转换开关,mcu在一次转换完成后,硬件自动关闭转换的。具体可以参考《基于超低功耗 STM32L0x3 高级 ARM ® 的32 位 MCU》参考手册的ADC部分——14.5.5 时序图示例(单次/ 连续模式硬件/ 软件触发)内容,有详细的时序图,参考手册有中文版。
这样,每次转换完,DMA搬运两路AN的数据,串口显示数据。不用担心数据搬运不及时,DMA的搬运数据是很快的,ADC采样速率也是很快的,10ms打开一次软件转换,不会导致数据溢出。只不过存放ADC值的数组,内容会经常被DMA覆盖为最新值。
5、以连续转换模式为例,初始化中,就开启软件转换,且使用LL_ADC_REG_SetContinuousMode(ADC1, LL_ADC_REG_CONV_CONTINUOUS);连续转换模式。