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

【STM32C031评测】3.可调电阻的ADC+DMA

[复制链接]
jundao721 发布时间:2024-3-21 22:16
抽空测试了一下C031的ADC,使用电位器,一端接3.3V,一端接GND,中间端接PA4,AD采样端,连接如图1所示:- v5 i& E( k9 z9 L' [

& i; a# z& a- Q2 y' o' x' y5 t0 ` 3-1.jpg 3 e  l0 p7 [  z) U! j
* v  I4 [% J$ k, k. q- R/ r( {; f, e
图1
9 @: Q3 k0 }" n
6 i2 o9 v2 r/ Y# ~/ t功能就是每实现一次转换,闪一下LED。还是先从配置Cubemx开始,配置如图2所示:( ]" M0 f7 E) ]) f1 V

( y4 c5 v- q* ^( v2 ^$ u* x 3-3.JPG   H- H" {& V+ b$ g
% y' n* T% T5 K( |8 ^
图2
# X/ z  ]5 h5 p, p
7 A+ d# Y, C! ?5 \) }* R配置完后,说明基本软件已经搭建好,然后参考SDK中的DEMO,修改了一下程序,查一下handler函数中是否调用了callback函数,一切OK后,部分代码如下所示:
5 p, q  ?" c4 t  k8 A2 y- e! P: u
7 r8 o# s, d" i) l6 W" A, C' A; ?```
) @: e4 p3 ?# d6 r/* Perform ADC calibration */) P* z4 ]! }6 j0 P
  if (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK)
7 F6 y  [9 ~! D4 n; _  U: J  {
% m1 C' W! c& A9 b1 n( i4 d7 N    /* Calibration Error */
0 {4 _' |2 O8 U, m2 [    Error_Handler();
# l" W* n: L; f( a6 A  }1 ?# n* ?( \; Z, Z4 q
& }: `$ N# l( C7 |5 o6 y4 G1 m9 r+ O& W
  /* Start ADC group regular conversion */
$ f4 y- H' I7 t+ g  /* Note: First start with DMA transfer initialization, following ones7 ]7 [% A0 S9 P1 T- `! Q8 U: x$ A4 `
           with basic ADC start. */# r! L/ j7 o2 r2 k1 C( k3 k
  if (HAL_ADC_Start_DMA(&hadc1,, U  p. f1 a& ~) _. F& j/ Q
                        (uint32_t *)uhADCxConvertedData,% [5 l) H' ?& n8 b$ P, h
                        1U                               //ADC_CONVERTED_DATA_BUFFER_SIZE+ S) R$ h0 `& Y( Z# f  l
                       ) != HAL_OK)
& ]4 d7 x2 W, h9 H8 S1 ]  {: N7 {) j& F3 {. J9 |0 ^
    /* Error: ADC conversion start could not be performed */# }8 a1 _( g) f
    Error_Handler();
. j6 }' k: V  Z1 f  }4 v! _' c  [7 }" P, _! `, \
```6 N, u0 `& L, {( o- O8 U6 d: T' n$ G+ D
& k. ]( f3 `" L
这部分是while之前需要定义的,while中修改如下:5 |7 ~0 C2 {" s. l* m# O: d6 ?1 d3 s
2 O( @* h8 G6 \  G/ R/ y: L- l6 a, P
```" \, g2 \" G2 ~+ \2 ~' Q( X" }1 K
if (HAL_ADC_Start_DMA(&hadc1,0 q2 |- J  s9 t2 {1 y" s& o
(uint32_t *)uhADCxConvertedData,
% P: ?% y5 V* t5 h" |1U                               //ADC_CONVERTED_DATA_BUFFER_SIZE
* b7 P+ _( v; D# k- a) != HAL_OK)2 q1 {& A* `/ z! W2 g" u
{
1 ^* x3 H# K. y' c0 m* `/* Error: ADC conversion start could not be performed */
. B4 C" z" B  E- `/ O- `. OError_Handler();
  V; n) n- [0 x' y: W}& _* U6 F4 `' O
HAL_Delay(1000);
, I/ l1 A$ `" s$ ?/* If ADC conversions and DMA transfer are completed, then process data */$ O0 X0 c" E7 w2 M$ O5 V1 y
if(ubDmaTransferStatus == 1)
+ i, d4 R7 E& v3 s3 @, v5 I2 [# [0 l: r{% ^9 U3 P- G1 D- U9 B4 ~

3 r+ @  ?, V9 }& {uhADCxConvertedData_VoltageGPIO_mVolt        = __LL_ADC_CALC_DATA_TO_VOLTAGE(3300U, uhADCxConvertedData[0], LL_ADC_RESOLUTION_12B);
8 ?0 V- u; n- e, K5 E$ z' n! w& ~9 `6 O! P- i6 _0 U
ubDmaTransferStatus = 0;
% W7 x. B$ F1 j" F  n  \
3 V9 t9 Q6 Z& nHAL_GPIO_TogglePin (GPIOA,GPIO_PIN_5);
+ ], U! C6 d* t. g' Y( [# HHAL_Delay(100); /* Delay to highlight toggle sequence */
2 j$ H0 y  H/ e  d```
, Q4 J1 Y- \3 m( s7 y4 q+ ~" W0 S/ |" u# g0 L) z6 o& i
测试结果如图3所示:
  N. c, P0 D+ |# V
' n1 n; Q6 ^& R0 U/ z' ]+ j$ Q 3-2.JPG )" [; O& C( ^$ I1 \
& P) m0 Y2 ^. D7 c! Z; u4 {' D
图3: V6 _2 G6 E2 F7 c; h9 w
& u' h5 ], `6 I- f4 e
旋转电位器,使用万用表测试了一下电位器输出分压,误差范围内基本和计算值一致。
' m: D# u$ C1 u7 M8 Q* z
收藏 评论0 发布时间:2024-3-21 22:16

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版