LL库实现ADC多通道DMA读取

6 篇文章 5 订阅
4 篇文章 0 订阅

首先依旧使用STcubeMX配置一下工程

我这里使用的是ADC1的多个通道,具体看下面配置图,比较简单,因为我使用了DMA,配置好ADC之后还需要配置一下DMA。

1,ADC配置

2,DMA配置,需要配置通道以及方向,是外设到内存还是内存到内存,以及缓存区数据宽度。

3,配置好以上后,我们还需要手动添加外设地址以及内存地址等

下面看代码:

	LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_1,NOFCHANEL);
	LL_DMA_SetPeriphAddress(DMA1,LL_DMA_CHANNEL_1,LL_ADC_DMA_GetRegAddr(ADC1,     LL_ADC_DMA_REG_REGULAR_DATA));
	LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_1,(uint32_t)&ADC_ConvertedValue);
	LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_1);
	
	LL_ADC_Enable(ADC1);
	// ADC开始校准
	LL_ADC_StartCalibration(ADC1);
	// 等待校准完成
	while(LL_ADC_IsCalibrationOnGoing(ADC1));
	//设置ADC组通过DMA定期转换数据传输
	LL_ADC_REG_SetDMATransfer(ADC1,LL_ADC_REG_DMA_TRANSFER_UNLIMITED);

    //LL_ADC_REG_StartConversion(ADC1);        //对于F0系列的芯片需要加上这句代码

设置好以上之后,DMA会自动开始搬运,我们查看ADC_ConvertedValue数组就可以看到数据了。

 

 

 

 

 

 

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
您好!对于STM32L4系列单片机,使用LL实现ADC读取外部模拟值的方法如下: 1. 首先,需要在STM32CubeMX中进行配置。打开STM32CubeMX软件,在"Pinout & Configuration"选项卡中选择要使用的ADC通道并将其引脚分配给该通道。然后,在"Configuration"选项卡中启用ADC功能。 2. 生成代码后,打开生成的工程文件,并找到与ADC相关的文件。通常以"adc.c"和"adc.h"的形式存在。 3. 在代码中,首先需要初始化ADC模块。可以使用LL_ADC_Init()函数初始化ADC,并使用LL_ADC_StructInit()函数进行默认配置。例如: ```c LL_ADC_InitTypeDef adc_init; LL_ADC_StructInit(&adc_init); adc_init.Resolution = LL_ADC_RESOLUTION_12B; LL_ADC_Init(ADC1, &adc_init); ``` 在此示例中,我们将分辨率设置为12位,并将ADC1作为示例ADC。 4. 配置ADC通道。使用LL_ADC_REG_SetSequencerChAdd()函数选择要使用的ADC通道。例如: ```c LL_ADC_REG_SetSequencerChAdd(ADC1, LL_ADC_CHANNEL_0); ``` 在此示例中,我们选择了ADC通道0。 5. 配置ADC转换模式和采样时间。使用LL_ADC_REG_SetSequencerScanMode()函数设置转换模式,并使用LL_ADC_REG_SetSequencerSmpTime()函数设置采样时间。例如: ```c LL_ADC_REG_SetSequencerScanMode(ADC1, LL_ADC_SEQ_SCAN_DISABLE); LL_ADC_REG_SetSequencerSmpTime(ADC1, LL_ADC_CHANNEL_0, LL_ADC_SAMPLINGTIME_2CYCLES_5); ``` 在此示例中,我们禁用了扫描模式,并设置了通道0的采样时间为2.5个时钟周期。 6. 启动ADC转换。使用LL_ADC_REG_StartConversion()函数启动转换。例如: ```c LL_ADC_REG_StartConversion(ADC1); ``` 7. 等待转换完成。使用LL_ADC_IsActiveFlag_EOC()函数检查转换是否完成。例如: ```c while (!LL_ADC_IsActiveFlag_EOC(ADC1)) { //等待转换完成 } ``` 8. 读取转换结果。使用LL_ADC_REG_ReadConversionData12()函数读取转换结果。例如: ```c uint16_t adc_value = LL_ADC_REG_ReadConversionData12(ADC1); ``` 在此示例中,我们将转换结果存储在adc_value变量中。 以上就是使用LL实现ADC读取外部模拟值的基本步骤。您可以根据自己的需求进行进一步的配置和处理。希望对您有所帮助!如果您还有其他问题,请随时提问。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值