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

【新年开篇】我的STM32U5项目秀+2. 测试14bit A/D

[复制链接]
jundao721 发布时间:2023-1-31 17:53
节后上班,安排时间把节前的任务做一做。通讯测试完了,测试一下14bit A/D外设。连接比较简单,参考板卡原理图,将电位器用杜邦线直接连到3.3V,GND和PC0端口,PC7(LED)端口即可。如图1所示:
. f! ?, \3 j4 E% B2 S然后打开STM32CubeMX,根据需求对时钟,GPIO,AD外设进行配置,具体配置如图2所示:' b8 I/ T" a- @

/ I# p, X, |$ t5 J: W3 S; q' _9 b5 b生成code,这样大框架就搭好了,主要功能是实现每300ms单次转换后LED翻转一次。在main函数中添加Calibration函数) m- e: |; W" V) b
  1. /* Perform ADC calibration */
    ! o1 R" m% L* T; S# v( d$ G+ x
  2.   if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)% Z# x' d% {" u9 g8 U" C
  3.   {
    0 g: W) e9 u/ q  e7 v! d  l
  4.     /* Calibration Error */. G; u0 Q/ N1 d( P6 U: U& q) Q
  5.     Error_Handler();; }% c+ X& t) m) `7 ?" b% k
  6.   }
复制代码
在while 中添加开始转换中断函数& P) \6 Y% x& L" \5 M8 M4 z# Q
  1. /* Start ADC group regular conversion */
    1 n+ \9 c7 s) F8 W
  2.     if (HAL_ADC_Start_IT(&hadc1) != HAL_OK)
    7 C7 y) J  C% h& ?
  3.     {
    . P. y5 x8 x. f. s/ S2 R6 c% h
  4.       /* Error: ADC conversion start could not be performed */
    & W/ Y$ @3 ^8 q4 b
  5.       Error_Handler();
    - x2 g3 ~9 s7 e( s* J% b
  6.     }
    - W- e7 g& o* u, l. D5 N% x0 y
  7.                 HAL_Delay (300);
    # h7 a0 J3 j' v
  8.                 HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_7);
复制代码
还需要自己移植一下callback 函数) e6 q4 O7 g1 E! i* S/ }. r6 ?1 ?
  1. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
    + J% h+ q# e+ W8 B3 `
  2. {- I# x4 C+ Q: }) {3 O
  3.   /* Retrieve ADC conversion data */1 r2 ^  \# j* [) }* L8 o
  4.   uhADCxConvertedData = HAL_ADC_GetValue(hadc);& [% a+ |1 c; s; {
  5. 5 |- I/ `8 @- m( V/ T9 }8 L; e/ y
  6.   /* Computation of ADC conversions raw data to physical values           */
    2 F% n4 M1 T: @" C
  7.   /* using helper macro.                                                  */
    6 n( N, o1 f% g1 g
  8.   uhADCxConvertedData_Voltage_mVolt = __LL_ADC_CALC_DATA_TO_VOLTAGE(ADC1, VDDA_APPLI, uhADCxConvertedData, LL_ADC_RESOLUTION_14B);
    - L% v5 @6 c  F( [  M- }8 w
  9. }
复制代码
这就基本配置完了,但Debug并不顺利,代码一直卡在Error_Handler函数中,不知道什么情况。后来重新使用cubemx生成代码,就可以了。但是AD没有运行。查看了官方硬件开发入门手册,想来应该是VDDA电源没开启,参考了一下官方的例程,在HAL_MspInit 函数中果然有这一段:
. R# u8 u9 _6 o; X7 X
  1. HAL_PWREx_EnableVddA();
复制代码
但是在CubeMX中没找到配置VDDA的地方,不仔细看文档会错过很多内容。" H' t! e- y6 J4 W/ |  f% ~0 y) |3 V% h
这样再Debug,程序运行正常。转动电位器,在watch窗口中就可以看到转换数值和转换电压,如图3所示:' W7 ~  j: V+ R+ }$ h" F
初步测试了一下,后边可根据需要再调整。
! x* M3 y  e* Q/ D% M% y
- c! E4 `: j( V5 P& f

图1

图1

图2

图2

图3

图3

an5373-硬件开发入门.pdf

下载

806.24 KB, 下载次数: 1

收藏 评论1 发布时间:2023-1-31 17:53

举报

1个回答
lugl 回答时间:2023-2-2 08:25:13
感谢无私的分享!+ p+ \6 R/ C* G; b" p
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版