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

【经验分享】STM32F103内部DAC使用源码

[复制链接]
STMCU小助手 发布时间:2022-1-9 20:00
大容量的 STM32F103 具有内部 DAC,无线传感器网络实验平台 TDL-02 选择的是2 {8 r% G5 h4 h5 O
STM32F103ZET6 属于大容量产品,所以是带有 DAC 模块的。
9 d$ }4 C$ t3 l) o+ `STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双( t+ Y: t  c. k8 U" ~6 }
DAC 模式下,2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。DAC 可以通过引脚输入参考电压 VREF+以获得更精确的转换结果。
$ H" v" r7 y7 m7 u8 ^2 X: d! \单片机源程序如下:' w5 G, G- j$ o4 @7 ^2 p
  1. #include "LED.h"/ f, R1 l  V3 _( g1 }: A
  2. #include "delay.h"3 Y+ y' `  \3 d0 x! Y+ }" c
  3. #include "key.h"
    2 }0 ]# ^2 [% C& k  x1 w! M
  4. #include "sys.h"& P. `: c/ Y" a2 Z. `* s
  5. #include "lcd.h"0 f6 m. f' Y/ I$ ^* b
  6. #include "usart.h"5 @9 L- p8 \# m
  7. #include "dac.h"+ E) i: v& @. ]: ^- y3 Z! G
  8. #include "adc.h"" g4 c3 U- f9 U5 t
  9. int main(void)" \+ E) V" A. j  ?9 g% W
  10. {3 [& g* A, _# @) L( U5 T7 L
  11.         u16 adcx;& r( K* [, Q1 X7 Z7 {7 F
  12.         float temp;$ M  S" ~4 f6 c1 p
  13.          u8 t=0;
    3 n( q- Y+ S' v3 i- e4 f, J& t
  14.         u16 dacval=0;' a+ K% o$ d5 a5 r2 m7 m* u! D: w
  15.         u8 key;
    * K8 S8 T+ p# M7 N! p  Q) R
  16.         delay_init();                     //延时函数初始化
    : \3 x  h0 {: |' c6 B" c) J$ p
  17.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
      _6 H" [+ R8 V; r
  18.         uart_init(115200);                 //串口初始化为1152006 R! E1 u1 u9 Y+ M/ b2 M' E
  19.         KEY_Init();                          //初始化按键程序& ^/ m. M2 H3 A" H
  20.          LED_Init();                             //LED端口初始化
    1 z# O, }$ s0 A! ~( p' b5 V
  21.         LCD_Init();                                  //LCD初始化
    + z; N4 F+ k+ L4 {. z2 f
  22.          Adc_Init();                                  //ADC初始化
    - y: b# h5 V. c2 Q! ^
  23.         Dac1_Init();                                //DAC初始化& Z) O. c+ W* w, q% g
  24.         POINT_COLOR=RED;//设置字体为红色
    9 C& @% _- j& G7 }! Q
  25.         LCD_ShowString(60,50,200,16,16,"Sensor STM32");
    # G) y, g% A' M$ j
  26.         LCD_ShowString(60,70,200,16,16,"Temperature TEST");
    , Q. l1 t5 N+ f! v( f
  27.         LCD_ShowString(60,90,200,16,16,"Waroyal@DezLinc");: F, `, I" I, d7 N, a; o$ G
  28.         LCD_ShowString(60,110,200,16,16,"2015/9/2");
    ' d! |" @6 w5 M9 \' l) k
  29.         LCD_ShowString(60,130,200,16,16,"KEY2:+  KEY3:-");; @' q1 P" i/ J, D) e  b. y' U6 N
  30.         //显示提示信息
    1 V! H! u( {, s; d- b/ x
  31.         POINT_COLOR=BLUE;//设置字体为蓝色1 k8 x( o: M1 E* v
  32.         LCD_ShowString(60,150,200,16,16,"DAC VAL:");$ j: h$ B. z1 s. N
  33.         LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");8 e8 s; I( R3 D6 @
  34.         LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");% U1 ?& Q/ i+ u) J
  35.         DAC_SetChannel1Data(DAC_Align_12b_R, 0);//初始值为0
    ; v/ B) o8 G( S) ?
  36.         while(1)
    1 L- X) h+ J* K( \
  37.         {0 y# g3 G# x( i* ]) F  p* I' G
  38.                 t++;8 I; x2 f/ p; B" f3 _; J* Z
  39.                 key=KEY_Scan(0);" Y9 f$ G8 s7 q8 E, f
  40.                IF(key==KEY2_PRES)
    , Q, t9 t" q# V3 [6 n2 @  M5 a
  41.                 {
    4 u9 A# L2 x) ?6 k. [
  42.                         if(dacval<4000)dacval+=200;0 T  [( I) i6 i5 C, U$ V  H2 h7 u4 d$ X
  43.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
    1 r" e$ G& D- ~4 ?$ F& {
  44.                 }else if(key==KEY3_PRES)
    0 B% ^$ d6 X6 Z3 T
  45.                 {
    0 f9 b0 g& k/ s* }3 B
  46.                         if(dacval>200)dacval-=200;
    ! _& V* E- l/ y  _* A) f
  47.                         else dacval=0;: `7 G5 l1 H9 T3 E3 R
  48.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
    1 `* K" M- R1 f+ {! Z# E
  49.                 }) T' S5 B: d+ M- y( h. d8 l, q
  50.                 if(t==10||key==KEY2_PRES||key==KEY3_PRES) //WKUP/KEY1按下了,或者定时时间到了0 S1 q$ |* v) O( @% W/ T# S4 r
  51.                 {
    4 w5 ^9 ^, x0 m/ T
  52.                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值
    & {  v7 q$ v9 y- O) f
  53.                         LCD_ShowxNum(124,150,adcx,4,16,0);             //显示DAC寄存器值
    ) v. q! r5 V6 o: f0 P" n, r
  54.                         temp=(float)adcx*(3.3/4096);                        //得到DAC电压值
    1 K% j1 T& @, P( ?0 N0 A' m9 r/ f
  55.                         adcx=temp;$ X2 X% C5 }- G" {
  56.                          LCD_ShowxNum(124,170,temp,1,16,0);             //显示电压值整数部分
    $ P! Q+ O& k1 |- k: d
  57.                          temp-=adcx;( X: Y  P. W$ F. ?/ O3 n+ W
  58.                         temp*=1000;
    8 I5 R( g! K) I' _
  59.                         LCD_ShowxNum(140,170,temp,3,16,0X80);         //显示电压值的小数部分
    5 a( p; f  A9 p: C' @
  60.                          adcx=Get_Adc_Average(ADC_Channel_1,10);                //得到ADC转换值1 T4 K' H/ A' O% t# F. S1 z; o8 s
  61.                         temp=(float)adcx*(3.3/4096);                        //得到ADC电压值' L% ?3 q' ]# _+ K+ D
  62.                         adcx=temp;' w7 h, Y6 I4 _7 f* X
  63.                          LCD_ShowxNum(124,190,temp,1,16,0);             //显示电压值整数部分
    3 t2 |& l8 j! L4 Q2 L5 {, z3 \) \
  64.                          temp-=adcx;5 p1 e3 Z+ q% W+ `  {/ Z8 E9 {0 p
  65.                         temp*=1000;2 B. O" T& ^' ^+ V% M5 Y. U+ R; x
  66.                         LCD_ShowxNum(140,190,temp,3,16,0X80);         //显示电压值的小数部分
    # p% ?; s* T" W+ N8 e; P! I- A
  67.                         LED0=!LED0;* Q" f8 w) d0 a6 ]" Z$ e7 f
  68.                         t=0;: n0 ^* F; q: r; f' u8 i% l
  69.                 }
    2 j' A9 L7 k0 O: S) T
  70.                 delay_ms(10);
    2 g6 G  S6 U; e1 z' J& ?" s
  71.         }
    1 C9 ]1 n) ^7 U7 B' M/ |
  72. }
    0 L7 \, M  a# Q$ N) x8 }
复制代码

( \7 B: R' b7 `+ x( L( o8 a8 X9 O
收藏 评论0 发布时间:2022-1-9 20:00

举报

0个回答

所属标签

相似分享

官网相关资源

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