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

STM32通过DMA进行ADC采集

[复制链接]
STMCU小助手 发布时间:2023-2-26 18:35
一. 前言
1 X2 s$ }) F7 K: F! n6 p* g' q" J/ s1 |0 Y- c9 n+ ?9 K
c02829aaf4f3464b9113b09421cd27d4.png
2 r# X3 Z. w( Z1 \$ f/ k
! p1 p, h4 [4 s, l9 S% z$ jADC是指模数转化,即将模拟信号转化为数字信号。 世界的信号本质都是模拟信号,如速度、温度、声音,在本质上都是模拟的。但是微控制器和微处理器上运行的电子设备不能直接读取或者解释这些模拟值,因为它们只在0和1上运行。所以我们需要将这些模拟值转换成0和1,以便微控制器和微处理器能够理解它们。这就是我们所说的模拟信号转化为数字信号。与ADC相对应的是DAC,即将数字信号转化为模拟信号。
6 i& @- u  A. k" `& z8 n3 a3 Y2 X4 c$ Y, u8 I

. t8 k; u* |4 u" F1 X! x" U% q二. CubeMX配置7 n0 F5 R+ _% ^$ e- N3 K# J
开发环境:Keil 、 CubeMX
. m  g; U/ v4 E; M; i7 a0 ?软件版本:5.31 、6.2.1
" y$ H, _7 G7 Z- n使用芯片:STM32F103C8T60 ]2 I! U8 v7 [! L
开发语言:C- b- r2 O& q6 a% r8 P4 S8 O

* S* W6 g1 l3 E- V" y/ a. yCubeMX的配置非常简单:Analog->ADCx->INx 。
/ _3 g  D& j) V2 z5 D2 P3 X) v5 p! i$ d! c2 u4 p" W, G0 }6 L
4a367230618f41678e681aedcdf26da9.png
1 w# u* G8 J. {$ C$ ]
1 k% m3 s  S% {$ X
9 h5 b( G$ k# M0 w7 C
此处选择多通道采集,选择ADC1 ,勾选IN1 、IN2 。配置如下:
$ C$ p* i2 y1 F由于是多通道采集,需开启Scan Conversion Mode 扫描模式 。
: \2 g& H( X) k' q7 B+ U需要多次读取,因此开启Continuous Conversion Mode 连续转换模式 。. r% U+ d, n: G) y6 [
选配Rank,给IN1、IN2选择合适的采样通道和采样周期。
  J, i' m$ M9 w. G! I' Y# G# j1 O/ V6 \1 @2 e& I7 k' g+ _/ g0 m/ C" q
a302c4d7a770481f90178b47a82dafa0.png ( h+ p5 O) R8 f( ~3 k$ u3 y
, C3 L$ o$ F$ ^- {1 W6 R( T: E
添加DMA通道 ,将模式改为Circular 循环模式 ,这样每次DMA传输成功后会主动开启下一次传输。) u1 T8 Q0 W' K+ U2 x2 Z9 @( j# B7 y

0 R, C2 G$ [4 n  K: g4 ]0 E/ O
c4ac7a500a584a4ba6322538fd37d36f.png ( ~& M6 ?. T0 |0 z3 k3 U' u' J) O

* X# C! [' q* b; c8 [/ h

' _6 T7 b$ U& u三. ADC读取
0 s: T3 w' H% U2 g+ I启动函数:9 a, V* b) d+ V, z% u  e
  1. HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)% L( x3 F. N; Q. f- B9 z# z# `
复制代码

  k$ I; p; O! K将ADC用于遥杆的读取: 遥杆的本质是一个电位器,通过ADC采集变化的电压可以得到遥杆X、Y轴的遥杆值。按照上面的配置,在生成的Keil工程中加入如下代码可以便可以得到采集的遥杆值。; L5 Y$ `* K! S4 Q- ~

  1. 9 C- n( P7 s! t, O; H# K  b
  2. uint16_t Joystick_ADC[2];$ O. ~8 o* k4 r

  3.   N% p. f/ d$ S( J# m
  4. HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&Joystick_ADC,2);
    8 d( W' Z+ u( u# B

  5. * k3 i4 w* l" l% y$ u+ R
复制代码
9 b3 h9 e4 w: o
& R0 j+ X3 @9 ~% g4 H0 I' z3 D- T
4596a2ddab774055b69f24f7c1258809.gif
1 t! n9 z3 Y; A- l, c7 Q% K

9 a! {8 X) D+ ~/ b4 z3 x注意: 如果开启ADC的DMA接收后没办法继续运行主函数可能是因为设置的采样周期太短,频繁触发DMA接受中断导致的。可以在CubeMX中把Rank中通道的采样周期Samplink Time 设长一些,亲测有效。; ^9 b- P) _. `+ N& ]5 _
————————————————
. m$ m3 u- g- t4 t版权声明:冬瓜~
, F1 H1 ?1 H! n  o0 x. K8 m* c& H9 c2 z
收藏 评论0 发布时间:2023-2-26 18:35

举报

0个回答

所属标签

相似分享

官网相关资源

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