你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-U545RE-Q评测】高性能模拟外设ADC定时采集

[复制链接]
Stm32McuLover 提问时间:2023-11-19 19:30 / 未解决

通过官网资料了解到STM32U545RE的ADC性能强劲,高达14bit分辨率和2.5Mbps采样率:
屏幕截图 2023-11-19 191552.png
本帖配置定时器触发ADC采集,了解其性能。
根据板卡原理图,选择PA0作为测试口:
屏幕截图 2023-11-18 223449.png
接下来配置ADC的参数:时钟频率、数据位数、采样模式、采样通道设置、采样触发设置等,如下图:
1.png

然后开启ADC中断,在中断回调里面读取数据。
2.png

配置定时器6定时触发ADC转换,设置每100us采样触发一次ADC:

3.png

然后生成工程就可以了,在生成的工程里面添加测试代码完成ADC采集。

使能ADC的电源VDDA(这是个坑的地方,需要手动加一下),添加代码:
  1. HAL_PWREx_EnableVddA();
  2.    HAL_PWREx_EnableVddIO2();
复制代码



照搬例程里面的ADC校准代码:
  1.   if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
  2.   {
  3.     Error_Handler();
  4.   }
复制代码


启动TIM6和ADC1,先启动定时器,再启动ADC:
  1. HAL_TIM_Base_Start(&htim6);
  2.   HAL_ADC_Start_IT(&hadc1);
复制代码




在ADC转换完成回调函数里面添加读取数据代码:
  1. uint32_t adc_value[2] = {0};
  2. volatile uint32_t i = 0;
  3. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
  4. {
  5.     if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC))
  6.     {
  7.         adc_value[i++] = HAL_ADC_GetValue(hadc);
  8.     }
  9.     if( __HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS))
  10.     {
  11.         i = 0;
  12.     }
  13. }
复制代码




将PA分别接板子上的地和3.3V,采集数据如图:
屏幕截图 2023-11-19 191134.png
参考电压3.3V,3.3/3.3*2^14=16384
屏幕截图 2023-11-19 191216.png
跳动非常小,十分稳定,如果采用外部电压基准,效果应该更好。


收藏 评论2 发布时间:2023-11-19 19:30

举报

2个回答
xmshao 回答时间:2023-11-20 10:08:13
感谢分享~!


你提到的这个坑我之前也踩过。不过我发现后来的CubeMx在这个地方生成工程时主动加上去了。
落花又见流水 回答时间:2023-12-12 09:29:22

学习学习,不踩坑。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版