STM32F4 LL库 ADC DMA 单通道采集

1.cubemx配置

cubemx版本:v6.1.1

注:配置信息含义,可参见https://blog.csdn.net/qq_43225938/article/details/84098810(如有侵权,请联系删除)

DMA配置

注:DMA不是自动添加的,需要先手动点击“add”,添加DMA通道

NVIC中全局中断最好不用打开,否则会频繁进中断,影响程序循环。

2.程序设置

2.1 ADC的初始化,和DMA的初始化,cubemx已自动添加

2.2需要手动开启ADC和DMA

#define ADC_DATA_LEN 12
uint16_t adcConvertedValue[ADC_DATA_LEN];

void ADC_DMA_INIT(void)
{
	/* Set DMA transfer addresses of source and destination */
	LL_DMA_ConfigAddresses(DMA2,
						   LL_DMA_STREAM_0,
						   LL_ADC_DMA_GetRegAddr(ADC1, LL_ADC_DMA_REG_REGULAR_DATA),
						   (uint32_t)&adcConvertedValue,
						   LL_DMA_DIRECTION_PERIPH_TO_MEMORY);

	/* Set DMA transfer size */
	LL_DMA_SetDataLength(DMA2,LL_DMA_STREAM_0,ADC_DATA_LEN);

	/* Enable the DMA transfer */
	LL_DMA_EnableStream(DMA2,LL_DMA_STREAM_0);

	LL_ADC_Enable(ADC1);

	/* Start ADC group regular conversion */
	LL_ADC_REG_StartConversionSWStart(ADC1);

	LL_ADC_REG_SetDMATransfer(ADC1,LL_ADC_REG_DMA_TRANSFER_UNLIMITED);
}

LL_DMA_ConfigAddresses:配置DMA,将DMA与ADC1链接到一起

LL_DMA_SetDataLength:设置DMA的长度,与存储ADC值得数组长度相等

LL_DMA_EnableStream:使能DMA传输

LL_ADC_Enable:打开ADC

LL_ADC_REG_StartConversionSWStart:启动ADC组常规转换,SWStart 与cubmx配置中 ADCs_Regular_ConversionMode 的 External Trigger Conversion Source ADC相对应

LL_ADC_REG_SetDMATransfer:设置ADC组常规转换数据传输

2.3读取ADC值

uint8_t adcVoltPut(void)
{
	float vdd = 0.0f;

	vdd = __LL_ADC_CALC_DATA_TO_VOLTAGE(VDDA_APPLI,adcConvertedValue[0],LL_ADC_RESOLUTION_12B);

	PrintLog(1,"VDD = %2.4f\r\n",vdd / 1000.0);

	return 0;
}

这里只读了adcConvertedValue的第一个数,实际上,adcConvertedValue数组里边的数是在一直被DMA刷新的。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
STM32F4系列的ADC是指STM32F4xx芯片中的模拟数字转换器。它是12位逐次逼近型的ADC,具有19个通道,可测量16个外部源、2个内部源和Vbat通道的信号。ADC可以以单次、连续、扫描或间断的模式执行A/D转换。转换结果可以以左对齐或右对齐的方式存储在16位数据寄存器中。ADC的最大转换速率为2.4MHz,转换时间为0.41us。在使用ADC时,需要注意ADC的时钟不要超过36MHz,否则会导致结果准确度下降。此外,STM32F4ADC转换分为规则通道组和注入通道组,规则通道组相当于正常运行的程序,而注入通道组可以打断规则通道的转换。在注入通道转换完成后,规则通道才能继续转换。中给出的main.c文件。这个例子演示了使用DMA进行ADC采样,并通过串口打印采样结果。在main函数中,首先进行了系统初始化和GPIO、DMAADC、USART的初始化。然后通过HAL_ADC_Start_DMA函数启动ADCDMA模式转换。在while循环中,通过延时和循环来进行采样,并将采样结果打印出来。需要注意的是,采集输出值第一次为0的问题可以通过加延时来解决。123 #### 引用[.reference_title] - *1* *2* [【STM32F4】HAL CubeMX(十四)--------ADC实验](https://blog.csdn.net/qq_47877230/article/details/109408175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [【STM32STM32CUBEMX + ADC(单通道,双通道DMA)](https://blog.csdn.net/qq_38145331/article/details/120235607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值