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

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

[复制链接]
STMCU小助手 发布时间:2022-1-9 20:00
大容量的 STM32F103 具有内部 DAC,无线传感器网络实验平台 TDL-02 选择的是
/ j3 x! S/ ?; i; _6 E, d4 z: i: `STM32F103ZET6 属于大容量产品,所以是带有 DAC 模块的。1 }" D$ {1 |! F6 S+ P# B9 P
STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双2 B9 N! x7 d6 i" X: s5 J8 O
DAC 模式下,2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。DAC 可以通过引脚输入参考电压 VREF+以获得更精确的转换结果。7 t- g* H6 J. A: e: x) L; q  b
单片机源程序如下:
% u1 D* `8 \' x  x
  1. #include "LED.h"
    # A5 [& W2 d- k3 p
  2. #include "delay.h"
    4 S$ s. }6 Z8 Y: x" d* ~( L
  3. #include "key.h"
      k- g+ C+ h/ Y! _" K2 ?/ n- w
  4. #include "sys.h"
    . D  k  d& v/ |. W: K) f8 z1 F
  5. #include "lcd.h"
    / _0 o/ {% U& U% B2 q& L1 j/ S
  6. #include "usart.h"
    8 u; _  ~3 t1 K. j
  7. #include "dac.h"
    1 o% A( x  ~/ z0 a$ f9 X& U0 a
  8. #include "adc.h"
    , n' _) M4 a  W5 R% w
  9. int main(void)6 i8 V" A# i8 J  w( Z9 L
  10. {+ w9 X* F$ G; `- M  j0 u. [/ E/ i
  11.         u16 adcx;* `* c6 O& f: k
  12.         float temp;
    6 n" t) ~4 S7 C" M: ^
  13.          u8 t=0;
    0 z* _' [0 J- b3 J6 s
  14.         u16 dacval=0;
    / c' H2 C$ p. s. ]' K
  15.         u8 key;! J/ `& `5 u. T8 f
  16.         delay_init();                     //延时函数初始化
    ) v9 J8 f! d( g6 Z, j
  17.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    2 `6 @1 v3 p1 L
  18.         uart_init(115200);                 //串口初始化为115200& `& E% r4 w5 R  H3 F7 r
  19.         KEY_Init();                          //初始化按键程序
    2 a. i0 W4 E" z8 C
  20.          LED_Init();                             //LED端口初始化
    , w- z4 ~( v0 u( \7 f- }
  21.         LCD_Init();                                  //LCD初始化$ h( ^; _0 Z( W5 F1 i! z
  22.          Adc_Init();                                  //ADC初始化
    + L/ O8 q" ~1 D% Z7 t7 j
  23.         Dac1_Init();                                //DAC初始化; C" |8 t: k* @) A( ~
  24.         POINT_COLOR=RED;//设置字体为红色
    1 U3 y  c7 j% A9 ?* G0 y
  25.         LCD_ShowString(60,50,200,16,16,"Sensor STM32");
    7 x7 Y3 r: l* [/ c/ Y5 A
  26.         LCD_ShowString(60,70,200,16,16,"Temperature TEST");
    $ h8 \8 U( d. ~( M
  27.         LCD_ShowString(60,90,200,16,16,"Waroyal@DezLinc");, ]! `  |: ]9 G$ D3 T3 {
  28.         LCD_ShowString(60,110,200,16,16,"2015/9/2");
    , V2 w# M* }2 |6 u+ [# V
  29.         LCD_ShowString(60,130,200,16,16,"KEY2:+  KEY3:-");
    , p" N6 m# ?( G) O$ J  S6 C1 R9 }# @
  30.         //显示提示信息  L5 r2 E8 Y- _  {& ^
  31.         POINT_COLOR=BLUE;//设置字体为蓝色
    7 u. q4 o. t: V- i- l7 S4 A
  32.         LCD_ShowString(60,150,200,16,16,"DAC VAL:");( D8 I. z5 I9 |
  33.         LCD_ShowString(60,170,200,16,16,"DAC VOL:0.000V");
    + p, Y( ~. z" b& C5 l8 }6 U5 w
  34.         LCD_ShowString(60,190,200,16,16,"ADC VOL:0.000V");- b) y4 a! K. i! @
  35.         DAC_SetChannel1Data(DAC_Align_12b_R, 0);//初始值为0" ^# z4 R5 P/ @, z$ Z
  36.         while(1)
    * T4 F4 g" [, Y! V
  37.         {
    ( {3 |+ ~6 v1 W! j
  38.                 t++;$ B$ f3 l  k' w' P- j) F
  39.                 key=KEY_Scan(0);  g; q4 u" L; y0 d/ d! E
  40.                IF(key==KEY2_PRES)
    7 @- p# r0 d0 Z% h% Q( l
  41.                 {3 w7 Y  {, h* S0 P2 `
  42.                         if(dacval<4000)dacval+=200;5 A0 r: I: o# V0 X, q+ [% d2 f
  43.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
    4 p" j. e$ \4 C8 M) J6 L, `( u9 w% W
  44.                 }else if(key==KEY3_PRES)2 j' P% O, I7 x$ q4 J, Y5 e1 ?
  45.                 {
    / `; y: y4 [2 J, q7 `1 o0 n
  46.                         if(dacval>200)dacval-=200;
    ( U0 z! i' E" n# j
  47.                         else dacval=0;
    / v! c. K, M6 d8 Z. |, ^0 }: J
  48.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
    ) b& |+ {2 b. S3 E3 Q
  49.                 }1 u# F! I  _6 P! }  e
  50.                 if(t==10||key==KEY2_PRES||key==KEY3_PRES) //WKUP/KEY1按下了,或者定时时间到了
    / a* R% n: J, D/ I7 `# ~
  51.                 {
      J* V! S* p: S6 d# [
  52.                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值
    5 `8 N8 `3 \7 @: j
  53.                         LCD_ShowxNum(124,150,adcx,4,16,0);             //显示DAC寄存器值
    0 X5 z4 @. D. p% v' x; ]" F
  54.                         temp=(float)adcx*(3.3/4096);                        //得到DAC电压值% w# ^# R9 h( Z* @" Z
  55.                         adcx=temp;$ f+ V, ^+ }7 N/ l, T
  56.                          LCD_ShowxNum(124,170,temp,1,16,0);             //显示电压值整数部分! u! G. k' v" J; a; n/ O& ?
  57.                          temp-=adcx;
    3 H5 W7 V& s# A
  58.                         temp*=1000;
    , y; A* Z: n* q2 @3 _* j* Z& f
  59.                         LCD_ShowxNum(140,170,temp,3,16,0X80);         //显示电压值的小数部分
    6 a/ o) o  h8 P2 o" P/ e0 i
  60.                          adcx=Get_Adc_Average(ADC_Channel_1,10);                //得到ADC转换值7 x! A  e' \' ~9 j" L
  61.                         temp=(float)adcx*(3.3/4096);                        //得到ADC电压值/ p; _2 Y. w4 N+ b' [
  62.                         adcx=temp;1 \, S% q; Y0 T1 O. l! h1 }
  63.                          LCD_ShowxNum(124,190,temp,1,16,0);             //显示电压值整数部分
    & T7 x# v+ @0 Z* X& o4 ?
  64.                          temp-=adcx;0 y, U( Z2 O1 ]9 L- Q
  65.                         temp*=1000;
    : d$ ?  D+ F8 F2 p
  66.                         LCD_ShowxNum(140,190,temp,3,16,0X80);         //显示电压值的小数部分: y' i' G% s2 A8 i* n) `
  67.                         LED0=!LED0;" o, E) t+ {# W5 _) R6 E7 X- P
  68.                         t=0;1 Z6 u  H. N, J; z
  69.                 }
    4 D' U" m2 y4 \, w1 u( `& q
  70.                 delay_ms(10);" T( ^7 e/ T1 d" I! u% F8 t3 P( h
  71.         }9 d6 B+ x. G- d) f7 A# ^
  72. }! W: ]) }+ f1 P9 p$ _
复制代码
3 @* d4 l/ b* X2 q: d3 f; @
赞 收藏 评论0 发布时间:2022-1-9 20:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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