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

【经验分享】STM32CUBEMX--移植雅特力AT32F403AVGT(兼容STM32F103VGT6),DAC输出电压

[复制链接]
STMCU小助手 发布时间:2022-5-1 15:14
概述* ?0 d/ H; x& [" i
本篇文章主要介绍如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通过DAC输出电压,在芯片中有2个12位的DAC口可以供选择。
$ T) Q+ R2 Z/ D- R' F; ?
9 m" Y  J9 h( Y1 l; ` 1G(_MOEJPMF{KNACK5@0IOT.png
( F  \3 }) _# T1 I# Q8 V
2 t, r' @3 J- @! Y硬件准备
) ^: C* g$ R6 }: j4 D6 J9 \首先需要准备一个开发板,这里我准备的是雅特力AT32F403AVGT7的开发板:( O4 h4 n4 a" \% a: b' b

/ G2 E. e; f, K4 t+ d( L1 g/ A 20201029095916480.png
5 q5 x) ]* B( ~2 A. S  b7 S/ ^: q% v& z  A" q( X& v8 q2 g. C$ a% m  q
选择芯片型号8 M, N3 z; t5 }5 ~, q# k( Y- |
雅特力AT32F403AVGT7兼容STM32F103系列,故选取STM32f103VG进行开发。
: Y" s/ ?8 ?& ]+ B5 I8 s5 }
) q. t# q8 f1 V  i! f 20201029095947312.png + y4 g8 Z& K  [+ T

5 ]) M7 D7 o; M配置时钟源% J( J7 `# v1 Q. N0 T# |, B" S
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:
, F7 N' S2 v3 N2 f! `/ H" l( |! M- {; D1 B- F1 w  s
20201029100201630.png - Z  f" {! L+ @0 c

' c% G6 y' M/ [  c6 C: @9 x- G2 Y配置时钟树. U8 f9 ^+ z( v# k: W
雅特力AT32F403AVGT7最高频率到240M,但是STM32F1的最高主频到72M,同时使用不使用外部晶振时候,最高速度只能到64M,所以配置64即可:
" P) r3 }% d5 ?6 c) {6 B1 V
: T! K/ O5 @+ h0 l4 I 20201029100257355.png
, y4 y1 ~1 v( ~, @9 a4 T
- [& P( ]( L8 _8 u0 o% QDAC配置& o, u- a( p: i: R+ S1 N" T
然后设置PA4为DAC_OUT1, 完整引脚配置如下图。  a; `. d0 L- D8 ?1 |* Q; k6 G$ w( `
# S. R# Y) D- j
M~GP_FZRFU_AI%W4Y46QNWR.png : m1 Y$ [) [3 W. r* N4 W  e' L

3 R  K* X: ]8 ^, u生成工程设置5 r, z! S/ d9 \( g; q
注意在生产工程设置中不能出现中文,不然会报错。
' f% \* A9 x& K$ X; z0 Y; Z4 y8 W6 L3 C  \0 G( ], q
ZED7IM`){RKEMEZ3X0]PUG6.png ! {' j. I( y3 [' _. r; i
5 z+ J( V# W+ i! G7 C! n1 J
代码生成设置+ R* L4 H9 k' y! M  z% c; \
最后设置生成独立的初始化文件。; y- _/ p8 w) V7 E3 |$ Y) l3 `5 u
7 z3 z  O' n- V6 O5 A7 s  \* C0 A3 t
AHTFY]DA}%K`[YL44R99536.png
" o' k5 B2 l# Y8 q
" P0 f/ R" q" N+ T生成代码9 P6 @/ g+ R6 D2 k7 J+ `+ H

) D5 \% x% N( y
($HRLMH6BSEA8}8Z7n_]U.png
5 R. ^" M6 o: ^4 x
$ n" p- a$ @4 ~# e0 k7 O1 b代码编写

9 K. c! b1 A* E5 s) m8 H1 d在main.c中,添加DAC电压变量定义。! W/ A; Y- s% Q. O. e" K

3 K7 ?# u  `9 C
  1. /* USER CODE BEGIN PTD */
    ' [, p. x9 u: M5 w' }0 t
  2. int dac_i=0;//定义DAC电压值
    2 C" p4 L$ N2 M* w
  3. /* USER CODE END PTD */
复制代码
3 [4 s: H3 }- m  g4 q9 O& j
在main.c中,开启DAC通道1。
. o3 Y/ _8 s- g- ]
& L  L5 G1 w( p/ t6 ?
  1.   /* USER CODE BEGIN 2 */( s+ F: X8 A$ z0 O; x
  2.         HAL_DAC_Start(&hdac, DAC_CHANNEL_1);//开启DAC通道1
    2 _$ W! `7 A! R3 C, C; p& }8 g6 Z
  3.   /* USER CODE END 2 */
复制代码
0 V7 n& Z' b5 Y" ?0 [7 r) U- q
在main.c中,主程序输出电压值,因为是12位的dac,所以值只能是0-4095.
$ i& M8 q; ~7 o% |/ A4 g0 M, g* x4 ^; d& ~2 c$ N  _( r1 I
  1.   /* USER CODE BEGIN WHILE */  g9 Y9 S: z1 y6 h( l% `
  2.   while (1)2 o+ t; P4 {  w5 [1 V
  3.   {
    2 P1 n. A6 `& w' x3 D
  4.     /* USER CODE END WHILE */+ e/ h' a( z% v4 Y0 F& Z, x0 y
  5.                
    , V1 t. ]' X+ M( F3 P
  6.     /* USER CODE BEGIN 3 *// @: P4 r6 T$ B* ^, _  T9 h; P
  7.                 if(dac_i<4096)
    1 k% H( J/ d8 ~, I' o0 q5 U
  8.                 {
    , L6 z4 X1 I+ M( i+ D4 `3 Y. F
  9.                         dac_i++;; \0 W. B) o3 X( X( u; j1 k  y6 I
  10.                         if(dac_i%512==0)//使得输出波形为阶梯状5 U/ D. R  q- W
  11.                                 HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_i);//设置DAC值为dac_i, ]4 z/ a" O3 @9 e
  12.                 }4 H6 n9 i. V4 C" x4 Q- Y& B
  13.                 else
    5 w# u7 C8 M, {6 {; _, q; v
  14.                         dac_i=0;
    ( t" ]; T! o# f6 F8 p/ X: v, K! h; E
  15.   }- T2 y4 r- {+ X  g
  16.   /* USER CODE END 3 */
复制代码
5 M- f' x. O* |- B
结果演示
" }- B# S. R1 g8 Q4 F; w
因为是输出为阶梯状,每变量每增加512,电压改变一次,故应该有8个阶梯,分别是0,512,1024,1536,2048,2560,3072,3584。
& l) Y! `' P6 y% C9 E1 r3 e, t0 }! {
VQ$[10]`0YHDYTG}}10HP.png + O4 ]/ {/ R/ H/ e# a' k

# w1 r. y, D( U5 P+ k( @4 Z
赞 收藏 评论0 发布时间:2022-5-1 15:14

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版