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

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

[复制链接]
STMCU小助手 发布时间:2022-4-30 22:53
概述
! N* w/ h/ M- {8 p/ s. q本篇文章主要介绍如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通过DAC输出电压,在芯片中有2个12位的DAC口可以供选择。$ F# Q5 r% I0 }% y; r: W9 ?

: y. h+ y+ T- Q4 t4 ? 2020102909502888.jpg
( k5 `9 p, {5 W) V/ j
% O) o6 `) M# {5 y硬件准备
( s  ?" z; n% U* f7 x$ q! |; I
首先需要准备一个开发板,这里我准备的是雅特力AT32F403AVGT7的开发板:+ R2 [) w( x! ^7 @6 t. }

6 g- b4 ^5 p8 t( s8 ?8 Q 20201029095916480.png * m* D, t7 \6 e8 ~$ \* `
9 c% T4 |% m: M; y5 _/ }
选择芯片型号
# w3 y  W. V2 n7 Z- f$ s7 i, U雅特力AT32F403AVGT7兼容STM32F103系列,故选取STM32f103VG进行开发。
4 u' ?* f9 o+ a0 N, J3 m* d
9 l: j8 g& z8 }! q- |9 Y 20201029095947312.png 6 g0 e1 T* U$ c& P7 D! m- G7 X, L' U
( D% s2 C/ h5 ]: m" q* ]
配置时钟源/ F4 E, R% t  t; l3 B3 z
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:
, t0 o+ C/ z8 i+ R$ w& h5 B. `" J; _. p9 {1 J
20201029100201630.png
6 R* I2 G! ^9 _- n0 }6 t- f8 {/ Y0 H  O+ D2 `8 ?: @9 d% v( `
配置时钟树5 }7 P3 ]% [, |/ P, ]. R
雅特力AT32F403AVGT7最高频率到240M,但是STM32F1的最高主频到72M,同时使用不使用外部晶振时候,最高速度只能到64M,所以配置64即可:
4 Q* {; L- x' E- c; f/ C+ D/ }/ [5 m  Y: l
20201029100257355.png % v0 l8 |6 T" @' e
! [/ p; w. c) @" O3 F
DAC配置
% R7 |0 i1 ~; g9 Z然后设置PA4为DAC_OUT1, 完整引脚配置如下图。
! s. L8 z5 m. [" L* H. h9 a' [: w( l7 w- |9 J& H7 @& J, ~
20201029100616228.png 0 m! @9 y( P1 Z  C+ |6 H

4 X2 e$ O5 P. w; u! k生成工程设置# a8 t" J& A; j+ G. Z, Z/ [
注意在生产工程设置中不能出现中文,不然会报错。* ^" n$ w+ J6 Y
- p" u# t/ m: B4 |' O# C
20201029100813678.png & L5 O% q6 K/ p2 x

5 d, F6 N4 O; n$ p$ x8 H7 }代码生成设置
9 M! x3 X8 l: a5 d* |7 w& x. ~最后设置生成独立的初始化文件。
  G: ^' f8 u- |! ~+ G1 h
: i3 Z2 T. I0 [9 [5 O# v9 m* N& } 20201029100929873.png # ^6 O7 R- a( r3 Q( }
" Q8 K) U* h$ g5 M5 K# t6 O( w
生成代码
/ c) Y4 @4 w/ c6 B7 D* T0 F; R# {' j4 u& v% }# i
20201029100944637.png
) @( c$ x9 b) k  O1 j( {+ P% m: m1 I* d/ A0 M, R: U
代码编写
! L1 g" P8 P* ~6 o# \在main.c中,添加DAC电压变量定义。" ^3 Z/ r+ R2 z0 r$ s
  d, @. z8 U6 i" d8 b; v
  1. /* USER CODE BEGIN PTD */* |6 q1 i5 U; g3 T) n. q" W& Q
  2. int dac_i=0;//定义DAC电压值- i: h: e( X7 e. I# r$ D; r
  3. /* USER CODE END PTD */
复制代码

. A8 y! T. [1 T/ C/ G在main.c中,开启DAC通道1。( y- h! D  `% D1 {- m( z
; m% [2 l" k) n( D: I9 v5 r6 F
  1.   /* USER CODE BEGIN 2 */2 @7 a; P8 q3 ^, m8 u
  2.         HAL_DAC_Start(&hdac, DAC_CHANNEL_1);//开启DAC通道1
    8 ^) ^! m' x- E
  3.   /* USER CODE END 2 */
复制代码

1 m* m6 G! F. \, d7 F2 V在main.c中,主程序输出电压值,因为是12位的dac,所以值只能是0-4095.
8 E9 m) j9 R3 G) Q, O
3 L0 ~$ P  ~* r8 u( N
  1.   /* USER CODE BEGIN WHILE */+ }9 g6 k! R4 g" d
  2.   while (1)" J- J! r( w5 ~% `% M# G# D7 x
  3.   {
    " P7 Q1 b) X( ^. ~/ h
  4.     /* USER CODE END WHILE */
    ; p# ~( W+ E4 I
  5.                
    $ m( E% R$ b* @5 E
  6.     /* USER CODE BEGIN 3 */' u$ W- `4 j% y7 e7 s
  7.                 if(dac_i<4096)
    ( _* V: c' ~0 ~8 e" z3 ?% i) T
  8.                 {
    0 A! H' m5 M& G' K
  9.                         dac_i++;/ J4 \4 O* g0 d2 A3 w# y7 d" |
  10.                         if(dac_i%512==0)//使得输出波形为阶梯状8 a; L- Z% R. h- D& O8 G: v9 }
  11.                                 HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_i);//设置DAC值为dac_i
    0 e! t' C% U6 o4 }
  12.                 }
    / C' V+ C% M3 @
  13.                 else( B2 f. M! q* k3 t- k. o2 [
  14.                         dac_i=0;2 M& L1 M5 g4 n% L2 @! B+ s
  15.   }
      p$ F8 T8 K0 X
  16.   /* USER CODE END 3 */
复制代码

/ d. ]2 g2 ~$ h, _& C, ^1 M+ [结果演示
4 o7 w2 t$ s4 Q( X5 w) x. M
因为是输出为阶梯状,每变量每增加512,电压改变一次,故应该有8个阶梯,分别是0,512,1024,1536,2048,2560,3072,3584。
& v, a- x. a9 C3 {
& @# r" W" i+ n# f0 O 20201029102017315.jpg ; k9 b$ M- ^( o+ s" q
) X3 v& f% |* o- B
赞 收藏 评论0 发布时间:2022-4-30 22:53

举报

0个回答

所属标签

相似技术帖

官网相关资源

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