文号
946737
阅读
2313
回复
1
收藏
0
所有教程由网友发布,仅供参考,请谨慎采纳。科创不对教程的科学性、准确性、可靠性负责。
STM32F373的SDADC单次转换配置方法(踩坑记录)
2025/09/02
原创
IP:江西

用CUBEMX(6.12.0)配置STM32F373的SDADC,可是按照配置常规ADC的步骤配置完之后并不能直接用,测量得的电压不随引脚输入改变,相关资料少,花了挺多时间踩坑。

SDADC配置如下

屏幕截图 2025-09-02 003306.png

后面检查发现,CUBEMX(6.12.0)自动生成的代码中缺少把引脚绑定到SDADC输入通道上面去的相关函数,也缺少自动校准函数。

在sdadc.c文件MX_SDADC1_Init()语句下的/* USER CODE BEGIN SDADC1_Init 2 */与/* USER CODE END SDADC1_Init 2 */之间加入如下语句即可。

  /* USER CODE BEGIN SDADC1_Init 2 */
	if (HAL_SDADC_AssociateChannelConfig(&hsdadc1, SDADC_CHANNEL_4, SDADC_CONF_INDEX_1) != HAL_OK)
	{
		Error_Handler();
	}
	
		if (HAL_SDADC_CalibrationStart(&hsdadc1, SDADC_CALIBRATION_SEQ_3) != HAL_OK)
	{
		Error_Handler();
	}
	
	if (HAL_SDADC_PollForCalibEvent(&hsdadc1, HAL_MAX_DELAY) != HAL_OK)
	{
		Error_Handler();
	}	
	
		if (HAL_SDADC_ConfigChannel(&hsdadc1,SDADC_CHANNEL_4,SDADC_CONTINUOUS_CONV_ON) != HAL_OK)
	{ 
		Error_Handler();
	}
  /* USER CODE END SDADC1_Init 2 */

这样在初始化的时候就能自动绑定引脚和校准。

image.png

在单次读取数据的时候需要使用

while (HAL_SDADC_PollForConversion(&hsdadc1, 10) != HAL_OK) { }

等待SDADC转换完成之后再读数。

代码与CUBEMX里面的具体配置可以下载下面文件自行查看

attachment iconSDADC_DEMO.zip29.71MBZIP23次下载

+6.66
科创币
虎哥
2025/09/02
这算厂商BUG吗
1年1个月前IP:广东
947150
1楼

感谢提醒 差点踩坑

引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的