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

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

[复制链接]
jundao721 发布时间:2023-1-31 17:53
节后上班,安排时间把节前的任务做一做。通讯测试完了,测试一下14bit A/D外设。连接比较简单,参考板卡原理图,将电位器用杜邦线直接连到3.3V,GND和PC0端口,PC7(LED)端口即可。如图1所示:
. ]0 b  W& K$ {6 }' X, o+ j. f然后打开STM32CubeMX,根据需求对时钟,GPIO,AD外设进行配置,具体配置如图2所示:
. y5 v- Y- |! d# R$ J+ ?3 I2 S' f3 r' J! r
生成code,这样大框架就搭好了,主要功能是实现每300ms单次转换后LED翻转一次。在main函数中添加Calibration函数) M- K1 u4 o% E7 {9 H; e  L
  1. /* Perform ADC calibration */
    ; B+ w: Q2 L& Z
  2.   if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
    ( S5 h) S) i0 o
  3.   {4 o  [8 `9 F# S- C, n6 p
  4.     /* Calibration Error */$ I" C3 ?% Z( \1 x
  5.     Error_Handler();( F( g' Y% p' |4 o5 t; L3 G
  6.   }
复制代码
在while 中添加开始转换中断函数, N6 N# g' X' G* O
  1. /* Start ADC group regular conversion */( Q1 r: G6 E1 V% j1 @# p5 f* t! M& \
  2.     if (HAL_ADC_Start_IT(&hadc1) != HAL_OK)
    9 I, [) o% j; W. j% E7 k
  3.     {: P3 o( E, x. u. m' e3 S: U+ i+ y0 p5 u
  4.       /* Error: ADC conversion start could not be performed */
    9 ?3 S9 J! S) s- T' \# s
  5.       Error_Handler();
    - j! E  I& Y8 `7 J
  6.     }
    6 w: m4 {2 `* `* z# K7 o. F
  7.                 HAL_Delay (300);6 Y% o$ W5 H. r' ~
  8.                 HAL_GPIO_TogglePin (GPIOC,GPIO_PIN_7);
复制代码
还需要自己移植一下callback 函数
# {$ e. f0 f  U% s. p
  1. void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)- J# M& l1 d: ?5 t* b. e
  2. {
    7 k8 E# B0 F% b# m  O& f
  3.   /* Retrieve ADC conversion data */- f$ _: m2 F$ H
  4.   uhADCxConvertedData = HAL_ADC_GetValue(hadc);2 q; _3 U" P" ~+ h! a, f

  5.   p' ~8 r/ T! `! K0 k4 u6 a
  6.   /* Computation of ADC conversions raw data to physical values           */
    2 b# f, H7 G8 ]% M6 `2 `& w. q
  7.   /* using helper macro.                                                  */8 c) M4 j( E# i0 ^+ W
  8.   uhADCxConvertedData_Voltage_mVolt = __LL_ADC_CALC_DATA_TO_VOLTAGE(ADC1, VDDA_APPLI, uhADCxConvertedData, LL_ADC_RESOLUTION_14B);
    " m8 j$ N* v* O* ~$ g7 Q9 U/ z
  9. }
复制代码
这就基本配置完了,但Debug并不顺利,代码一直卡在Error_Handler函数中,不知道什么情况。后来重新使用cubemx生成代码,就可以了。但是AD没有运行。查看了官方硬件开发入门手册,想来应该是VDDA电源没开启,参考了一下官方的例程,在HAL_MspInit 函数中果然有这一段:
* ^7 v  ~  Y" Q! y2 m# |4 s' X0 `
  1. HAL_PWREx_EnableVddA();
复制代码
但是在CubeMX中没找到配置VDDA的地方,不仔细看文档会错过很多内容。
2 F& ]) p  M* w4 E; ?3 Y( X这样再Debug,程序运行正常。转动电位器,在watch窗口中就可以看到转换数值和转换电压,如图3所示:6 t4 n5 Z3 x5 |' K" r
初步测试了一下,后边可根据需要再调整。
& N' {; @/ y( f+ _; M
' M& f; z. U+ d3 _* a! t

图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
感谢无私的分享!. j- j; r! l: P% ~' c
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版