野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 226761|回复: 446

如何使用STM32F103DAC发出指定电压教程(调了一天总算调通了)

  [复制链接]
发表于 2017-12-15 16:25:05 | 显示全部楼层 |阅读模式
  一直用官方给的例程修改,结果一直不成功,跑回去看官方手册才明白,调试了一天了。累的我啊,下面吧代码分享给大家。
优化到,只要在任意地方调用一个函数,就可以实现改变电压角度了。
#define POINT_NUM 1           //DMAÅäÖÃo궨òå
#define DAC_DHR12RD_ADDRESS      (DAC_BASE+0x20)    //DACμØÖ·
/* 2¨DÎêy¾Y ---------------------------------------------------------*/
uint32_t DualSine12bit = 0;     //DMAÄú′æμØÖ·

static void DAC_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
        DAC_InitTypeDef  DAC_InitStructure;

  /* ê1ÄüGPIOAê±Öó */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);       
       
        /* ê1ÄüDACê±Öó */       
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
       
  /* DACμÄGPIOÅäÖã¬Ä£Äaêäèë */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
       


  /* ÅäÖÃDAC í¨μà1 */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;                                                //ê1óÃTIM2×÷Îa′¥·¢Ô′  DAC_Trigger_Softwar
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;        //2»ê1óÃ2¨Dη¢éúÆ÷
  DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
        DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;        //2»ê1óÃDACêä3ö»o3å
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  /* ÅäÖÃDAC í¨μà2 */
  DAC_Init(DAC_Channel_2, &DAC_InitStructure);

  /* ê1Äüí¨μà1 óéPA4êä3ö */
  DAC_Cmd(DAC_Channel_1, ENABLE);
  /* ê1Äüí¨μà2 óéPA5êä3ö */
  DAC_Cmd(DAC_Channel_2, ENABLE);

  /* ê1ÄüDACμÄDMAÇëÇó */
  DAC_DMACmd(DAC_Channel_2, ENABLE);
        DAC_DMACmd(DAC_Channel_1, ENABLE);
       
        DAC_SetChannel1Data(DAC_Align_12b_R,0);
}


/**
  * @brief  ÅäÖÃTIM
  * @param  ÎT
  * @retval ÎT
  */

/**
  * @brief  ÅäÖÃDMA
  * @param  ÎT
  * @retval ÎT
  */
static void DAC_DMA_Config(void)
{       
        DMA_InitTypeDef  DMA_InitStructure;

        /* ê1ÄüDMA2ê±Öó */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
       
        /* ÅäÖÃDMA2 */
  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12RD_ADDRESS;                                        //íaéèêy¾YμØÖ·
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&DualSine12bit ;                                //Äú′æêy¾YμØÖ· DualSine12bit
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;                                                                                        //êy¾Y′«êä·½ÏòÄú′æÖáíaéè
  DMA_InitStructure.DMA_BufferSize = POINT_NUM;                                                                                                                                        //»o′æ′óD¡ÎaPOINT_NUM×Ö½ú       
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                                //íaéèêy¾YμØÖ·1춨       
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                                                        //Äú′æêy¾YμØÖ·×ÔÔö
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;        //íaéèêy¾YòÔ×ÖÎaμ¥λ
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;                                        //Äú′æêy¾YòÔ×ÖÎaμ¥λ       
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                                                                        //Ñ-»·Ä£ê½
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;                                                                                        //¸ßDMAí¨μàóÅÏ輶
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                                                                                                                //·ÇÄú′æÖáÄú′æģ꽠      

  DMA_Init(DMA2_Channel4, &DMA_InitStructure);
       
  /* ê1ÄüDMA2-14í¨μà */
  DMA_Cmd(DMA2_Channel4, ENABLE);
}

void DAC_Mode_Init(void)
{
       
        DAC_Config();
        DAC_DMA_Config();
}



然后把
DAC_Mode_Init();
放MAIN函数里面初始化。
接着要用的时候
调用
DAC_SetChannel1Data(DAC_Align_12b_R,0);
就可以了。最后的0就是你的电压值。取值0-4096
回复

使用道具 举报

 楼主| 发表于 2017-12-15 16:26:27 | 显示全部楼层
就两个函数,一个配置DMA,一个配置DAC。然后一个初始化函数吧两个包起来。接着随便调用。。辛苦了一天的结果。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-15 16:29:03 | 显示全部楼层
排版有点问题- -!如果程序有优化的空间,欢迎大家指教
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-15 16:33:08 | 显示全部楼层
额,更正一下,取值0-4095.取4096会溢出变成0
回复 支持 反对

使用道具 举报

发表于 2017-12-15 17:53:55 | 显示全部楼层
6966666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2017-12-15 22:00:44 | 显示全部楼层
666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2017-12-16 15:38:49 | 显示全部楼层
66666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2017-12-17 14:00:24 | 显示全部楼层
99999999999999999999999
回复 支持 反对

使用道具 举报

发表于 2017-12-18 09:45:36 | 显示全部楼层
66666666666
回复 支持 反对

使用道具 举报

发表于 2017-12-18 09:49:46 | 显示全部楼层
666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2017-12-26 16:59:27 | 显示全部楼层
楼主是雷锋!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-26 17:06:29 | 显示全部楼层
微微 发表于 2017-12-26 16:59
楼主是雷锋!!!

共同学习,共同进步。,
回复 支持 反对

使用道具 举报

发表于 2017-12-27 13:31:40 | 显示全部楼层
这个非常好
回复 支持 反对

使用道具 举报

发表于 2017-12-27 13:32:00 | 显示全部楼层
这个 非常好
回复 支持 反对

使用道具 举报

发表于 2017-12-27 18:05:21 | 显示全部楼层
学习..................
回复

使用道具 举报

发表于 2018-1-2 15:45:56 | 显示全部楼层
正好在调试这一部分
回复 支持 反对

使用道具 举报

发表于 2018-1-3 11:23:24 | 显示全部楼层
1111111111111111111111111111111
回复 支持 反对

使用道具 举报

发表于 2018-1-3 11:24:02 | 显示全部楼层
6666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2018-1-3 12:49:00 | 显示全部楼层
这个不错啊。
回复 支持 反对

使用道具 举报

发表于 2018-1-3 14:12:30 | 显示全部楼层
66666666666
回复 支持 反对

使用道具 举报

发表于 2018-1-3 15:34:49 | 显示全部楼层
999999999999999999
回复 支持 反对

使用道具 举报

发表于 2018-1-4 18:01:52 | 显示全部楼层
这样很好。谢谢分享方法
回复 支持 反对

使用道具 举报

发表于 2018-1-4 20:44:11 | 显示全部楼层
111111111111
回复 支持 反对

使用道具 举报

发表于 2018-1-5 09:36:58 | 显示全部楼层
看看学习学习,
回复 支持 反对

使用道具 举报

发表于 2018-1-5 14:36:28 | 显示全部楼层
非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2018-1-5 17:15:17 | 显示全部楼层
感谢指点啊
回复 支持 反对

使用道具 举报

发表于 2018-1-5 18:55:29 | 显示全部楼层
666666666666
回复 支持 反对

使用道具 举报

发表于 2018-1-8 11:13:47 | 显示全部楼层
辛苦了!!!!
回复

使用道具 举报

发表于 2018-1-9 08:46:31 | 显示全部楼层
!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2018-1-9 09:04:01 | 显示全部楼层
注释乱码。。。。。。。
回复

使用道具 举报

发表于 2018-1-9 14:42:52 | 显示全部楼层
看看,学习学习。
回复 支持 反对

使用道具 举报

发表于 2018-1-9 14:43:26 | 显示全部楼层
看看,学习学习。
回复 支持 反对

使用道具 举报

发表于 2018-1-11 22:05:21 | 显示全部楼层
楼主,你好,新手一枚,不知道如何调用DAC_SetChannel1Data(DAC_Align_12b_R,0);能否详细说一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-12 09:05:44 | 显示全部楼层
请叫我天天V5 发表于 2018-1-11 22:05
楼主,你好,新手一枚,不知道如何调用DAC_SetChannel1Data(DAC_Align_12b_R,0);能否详细说一下

这你就太新了。。。。。还是好好学习一下基础吧。。前面4行是宏定义之类的,然后两个初始化函数,再加一个函数吧刚刚两个初始化函数放在一起,然后你在MAIN函数里面吧这个函数放进去,就可以了。然后调用就是,在你需要执行的地方用这个就行。
回复 支持 反对

使用道具 举报

发表于 2018-1-12 09:29:45 | 显示全部楼层
乱世 发表于 2018-1-12 09:05
这你就太新了。。。。。还是好好学习一下基础吧。。前面4行是宏定义之类的,然后两个初始化函数,再加一 ...

已经弄懂了。查了库函数
回复 支持 反对

使用道具 举报

发表于 2018-1-12 09:30:36 | 显示全部楼层
乱世 发表于 2018-1-12 09:05
这你就太新了。。。。。还是好好学习一下基础吧。。前面4行是宏定义之类的,然后两个初始化函数,再加一 ...

已经弄懂了。。。。
回复 支持 反对

使用道具 举报

发表于 2018-1-12 09:31:00 | 显示全部楼层
乱世 发表于 2018-1-12 09:05
这你就太新了。。。。。还是好好学习一下基础吧。。前面4行是宏定义之类的,然后两个初始化函数,再加一 ...

谢谢了。非常感谢
回复 支持 反对

使用道具 举报

发表于 2018-1-12 09:31:22 | 显示全部楼层
乱世 发表于 2018-1-12 09:05
这你就太新了。。。。。还是好好学习一下基础吧。。前面4行是宏定义之类的,然后两个初始化函数,再加一 ...

谢谢了。非常感谢。。
回复 支持 反对

使用道具 举报

发表于 2018-1-12 15:27:57 | 显示全部楼层
:dsfcvsdvcdsvcsdvsdvsvdvadvad
回复 支持 反对

使用道具 举报

发表于 2018-1-12 20:37:54 | 显示全部楼层
谢谢分享,非常感谢!
回复 支持 反对

使用道具 举报

发表于 2018-1-13 16:41:34 | 显示全部楼层
看看
回复

使用道具 举报

发表于 2018-1-13 20:44:39 | 显示全部楼层
ipx天线接口
回复 支持 反对

使用道具 举报

发表于 2018-1-15 11:33:28 | 显示全部楼层
学习学习!!!!!!!!!!!
回复

使用道具 举报

发表于 2018-1-15 12:41:19 | 显示全部楼层
学习一下~~~
回复

使用道具 举报

 楼主| 发表于 2018-1-15 13:40:26 | 显示全部楼层
limh 发表于 2018-1-9 09:04
注释乱码。。。。。。。

额,KEIL的中文编码问题
回复 支持 反对

使用道具 举报

发表于 2018-1-15 14:27:19 | 显示全部楼层
谢谢分享,
回复

使用道具 举报

发表于 2018-1-15 15:03:14 | 显示全部楼层
围观一波。。。。。。。。。。
回复

使用道具 举报

发表于 2018-1-16 12:58:50 | 显示全部楼层
0基础初学者 好好学习
回复 支持 反对

使用道具 举报

发表于 2018-1-18 20:16:54 | 显示全部楼层
66666666666666666666
回复 支持 反对

使用道具 举报

发表于 2018-1-19 08:48:52 | 显示全部楼层
楼主辛苦了谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-28 22:34 , Processed in 0.075488 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表