STMCU小助手
发布时间:2022-12-25 13:10
ADC引脚
- g% L: f: A- w6 X$ U ] ^ 注入通道与规则通道* F: ]5 f' q4 k: Z& `7 ^ 1. 注入通道 相当于中断,最多4个通道,注入通道和它的转换顺序在ADC_JSQR寄存器中选择,注入通道转化的总数应写入ADC_JSQR寄存器的最低两位: S) M& g( {/ n5 w. [2 h3 y: K( z+ `& X& @ 注入通道的转换结果保存在下图中的注入通道寄存器(4*16位) 转换结束后产生标志位,能够产生相应的中断6 L8 m2 L$ I4 Q! o , l& g8 r8 h* t6 m8 X; k . T& z3 @1 _4 c) z. Z 2. 规则通道 相当于正常运行的程序,最多16个通道,规则通道和它的转化顺序在ADC_SQRx寄存器中进行选择,规则通道转换的总数应写入ADC_SQR1寄存器的最低4位中 $ S+ G, c( `! @8 j, C 规则通道的转换结果保存在下图中的规则通道数据寄存器(16位) . x# l @! n. j, a' v# Y$ z1 Z. |7 @ 转换结束后产生标志位,能够产生相应的中断6 O+ a7 h6 F6 Y1 y+ B $ O [( G5 G1 `# ]) K
ADC时钟
ADC的触发事件, g6 j* k: ~0 q . r, Z; j1 A5 ~$ y- w3 s4 s
1 `4 L3 t" i8 b4 H ADC的运行模式! r' Y- x. l! b2 ^ 1. 单次转换模式/ F: V7 c) W) z- W8 n+ H 只执行一次转换 可以通过以下方式启动:/ t9 O1 l+ ^( i: z 设置ADC_CR2寄存器的ADON位(规则通道)0 o% L6 l# @" K' ?. @5 ^4 F 外部触发启动(规则通道或注入通道) 如果一个规则通道转换完成,则: 转换结果数据被存储在16位的ADC_DR寄存器中饭* ?7 F- z' _, y EOC转换结束标志被置1- K6 ^$ c* t4 i, m, L7 ?5 `1 h 如果设置了EOCIE,则产生中断/ T1 ?5 d1 G/ z) y( Q K 如果一个注入通道被转换,则:% L1 e; T8 b% F. `$ C } 转换结果数据被存储在16位的ADC_DRJ1寄存器中饭. y6 ~0 g6 W* O2 V JEOC注入转换结束标志被置1 如果设置了JEOCIE,则产生中断 2. 连续转换模式 ADC转换已结束马上启动另一次转换8 h) e2 K) {4 Q4 A 4 n+ J$ s4 H, \5 w& v+ Z# F B 此模式可以通过外部触发启动或通过设置ADC_CR2寄存器的ADON位启动2 h% ~, {- t$ D3 z 如果一个规则通道转换完成,则: 转换结果数据被存储在16位的ADC_DR寄存器中饭- n9 ?4 B8 J7 C+ K9 ^; _1 n0 a+ I EOC转换结束标志被置14 u& | Q; q( i 如果设置了EOCIE,则产生中断. c4 G, O3 v3 C" M 2 S% P E. }: E 如果一个注入通道被转换,则:9 w A/ B! T* Z4 \! E" k T 转换结果数据被存储在16位的ADC_DRJ1寄存器中饭" k$ D" m# x- j0 t7 p h JEOC注入转换结束标志被置1 如果设置了JEOCIE,则产生中断- }2 F( M! b& r, U) e; q& O 3 P" o: L. }7 \ 3. 扫描模式 用于扫描一组模拟通道3 C" j+ R3 U' l8 b* `, m9 _7 ] ( {$ O2 T1 P4 i# m) e 可以通过设置ADC_CR1的SCAN位来控制 一旦开启,ADC将会扫描所有被ADC_SQRX寄存器(针对规则通道)或ADC_JSQR寄存器(针对注入通道)选中的通道" R/ l' ]4 ]3 A% a) L 在每个扫描组的每个通道上执行单次转换,每次转换结束时,同一组的下一个通道被自动转换4 i" n ?# |" z! [ 如果设置了CONT位,则转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换 2 o" C, e+ R# V' e- s. y! o 如果设置了DMA位,每次EOC后,DMA控制器把规则通道的转换数据传输到SRAM中,而注入通道转换的数据总是存储在ADC_JDRx寄存器中' Z' v! q3 e/ [ ADC的中断/ g( E# ]) _- V. B! B0 V 规则通道转换结束和注入通道转换结束都能产生中断,有独立的中断使能位( x2 y" V* G( a# o% z/ N ) p! o# y# W, D ADC1和ADC2的中断映射在同一个中断向量上,而ADC3的中断有自己的中断向量. t: U- I: G/ M+ _" V5 `4 z - E! {2 f) V! g \, L o
ADC的时钟7 R7 W, y8 x. ^ RCC_CFGR寄存器 3 L; X* [0 D L/ q+ j* N. r# w2 ^/ z7 d
& G; d( s+ A; O+ A* I 注意不要让ADC的时钟超过14 MHz ADC控制寄存器, ]) o8 h. m1 o+ T J5 A# { ADC_CR1" s/ ~: s* |. p; B * S& }! e, h: j, m
3 H, M$ I; e/ V* x
9 ^+ P% P& o3 O& u% |' C
" V* k! @5 P3 i5 Y% M ]% m7 ?7 L ADC_CR2控制器
- Q9 \) E: C; o) Y& j: x$ j
. _4 c9 o0 t% W% C* r5 ~1 D [0 x % ^/ y- u5 Z8 ~ ADC的数据对齐+ r0 ?7 \7 F4 u$ c, P 左对齐或右对齐( N$ d5 i. ?$ g 由于STMF1自带的ADC是12位的,而数据寄存器是16位的,因此可以设置转化结果为左对齐或右对齐. r7 q, R H2 x p$ v7 Z 2 i6 n! g" x7 n1 P% f2 m
" n0 M! w" p6 Y& L- x
/ P2 L* `0 h+ s) t ADC的采样时间设置4 X2 \/ v/ Q4 }! k 设置好预分频后相当于确定了ADC的时钟,即ADC时钟的周期(ADC_CLK) 需要用多少的ADC采样周期来完成一次采样,可以在这2个寄存器里进行设置 总的转换时间为采样时间+12.5个ADC时钟周期 通过计算可知,STM32F1自带ADC的最小转换时间是1微秒
ADC的规则转换通道寄存器
ADC的注入转换通道寄存器 ( m; \8 P( D2 l( L5 v# t$ t 9 T1 z- h1 h6 F4 _. R
: s9 Z' S6 `6 d$ q ADC数据寄存器6 ]5 S- X# D! W% ?5 ^
& Q) U l/ \& E4 [4 w ADC状态寄存器( S" J8 {, P S! `% Q) v
ADC使用的配置过程; i2 I$ k7 j# o$ l- A7 }( j( H! \ 1. 开启相关时钟,记住配置相应的GPIO引脚为模拟输入 开启相关时钟, Z: z r' {5 X
配置GPIO引脚 ( L! m7 _6 A. d& U
1 c% C5 @- g# p/ M 2. 设置ADC时钟8 ^6 A9 b) q/ b3 a l ! Q% T' E% q4 U I, x9 d
$ v1 ^! `! O- e3 t! r1 T' I 设置完后复位0 [# Z: F: Q0 D! K& d0 u
这里的ADC_DeInit函数的实现如下0 E$ b4 z6 V8 N8 E, G. Q5 d9 h3 N
' ^3 h' ], G9 i' h3 L. N& q 3. 初始化ADC的相关参数 ADC初始化 ) X5 S$ w6 _5 Y5 @
. u" |& V" n0 |0 i. z3 ~3 D 这个函数的实现如下+ G$ r/ r/ `: L: C6 Y & I3 C6 C1 X. R
初始化的结构体如下:7 r" ~3 V. _0 |) { ADC_InitTypeDef * W! `% [# j, C
3 {$ Z3 t2 F. m9 V; e( Z 使用单次转换还是连续转换,可以选择的参数:
1 e1 V1 D( R9 V' D* x 触发方式的可选择项:
数据对齐方式的可选性: * [2 L1 g1 S& x: C7 d3 X
, U9 m) Q s! n: c# C8 j 4. 使能ADC并进行校准* V8 ?% P1 j0 h! S+ B' m ) W6 ?- ]2 I% j& Y9 Y2 ~
. J, i. g3 _( V4 v ADC_Cmd函数的实现如下
ADC_ResetCalibration函数实现如下$ ~ ~7 s$ ~4 `# r
& Y" M1 B; U# c. a B 5. ADC配置规则转换通道参数使能软件启动并获取结果 - \# _6 e& F' z$ j/ \) T5 |( R
% \0 ?' Z; r" R) c+ b$ X ADC_GetConversionValue函数的实现* A5 n0 y) `2 i* n" v) \
. a+ G5 E9 u9 a5 [+ o ADC_SoftwareStartConvCmd函数的实现 # Y) Q, y4 L, C, ^$ f& Q6 {5 Q- H
ADC_ITConfig的实现
ADC_StartCalibration的实现+ y9 J& I. T1 H0 e; I4 F " a2 @' J# n" _5 z" P
3 N/ Y8 [. v4 E3 S a) K! [ ————————————————4 y9 \9 |, x# z& \4 S; ^1 D 版权声明:CodeForCoffee: ]7 {, [! b9 r5 d! g; W |
【STM32H5 评测】ADC 电压表
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
经验分享 | 通过STM32 TIMER的PWM功能模拟输出正弦波
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
STM32H563 ADC+TIM+DMA应用演示
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
经验分享 | STM32N6 ADC DMA 传输失败案例分享
微信公众号
手机版