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

stmf32f051 dac 无论怎么配置 pa4都没有输出

[复制链接]
xxw-370311 提问时间:2017-12-12 19:27 /
初始化后,每次写入2900的数据,示波器测量输出为0,代码如下:
        DAC_InitTypeDef dactype;
        GPIO_InitTypeDef gpioinit;
          /* GPIOA clock enable */                  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
          /* Configure PA.04 (DAC_OUT1) as analog */
          gpioinit.GPIO_Pin =  GPIO_Pin_4;
          gpioinit.GPIO_Mode = GPIO_Mode_AN;
          gpioinit.GPIO_PuPd = GPIO_PuPd_NOPULL;
          GPIO_Init(GPIOA, &gpioinit);
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
        dactype.DAC_Trigger = DAC_Trigger_Software;
        dactype.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
        dactype.DAC_WaveGeneration = DAC_WaveGeneration_None;
        dactype.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
        DAC_Init(DAC_Channel_1, &dactype);
        DAC_Cmd(DAC_Channel_1, ENABLE);
上面是初始化dac部分,

        DAC_SetChannel1Data(DAC_Align_12b_R, 2900);
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
上面是写入部分

请问各位大神,代码有什么问题没有呢?


收藏 2 评论14 发布时间:2017-12-12 19:27

举报

14个回答
五哥1 回答时间:2018-1-29 00:44:21
楼主可以用官方例程和你的程序对比的看下
黑皮男 回答时间:2018-3-1 09:24:50
GPIOA的端口时钟没有使能

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wudianjun2001 回答时间:2018-3-1 09:25:09
还是网上找个现成的例程,测试通过后对比修改下比较直接,底层的东西大部分不需要花大量时间去弄

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

琦子 回答时间:2018-3-1 09:26:21
pa4 你设置为上拉看看,外围电路上有没有负载啊,还有就是a口时钟我没看见使能的代码啊

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhjb1 回答时间:2018-3-1 09:38:05
您设置PA5作为DAC输出试试。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-3-1 09:42:40
本帖最后由 wenyangzeng 于 2018-3-1 09:56 编辑

少了DAC触发源:
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
当然还要对对应的定时器进行配置。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wolfgang 回答时间:2018-3-1 10:05:52
wenyangzeng 发表于 2018-3-1 09:42
少了DAC触发源:
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
当然还要对对应的定时器进行配置 ...

“dactype.DAC_Trigger = DAC_Trigger_Software;”
有,他用的是软件触发源。
wolfgang 回答时间:2018-3-1 10:09:25
一般来说
初始化后,每次写入2900的数据,示波器测量输出为0
1、换个口子试试,很有可能DAC被静电击穿,导致不能输出这个有案例的;
2、输出0,看电路是否对地短路。
3、初始化大程度是对dactype 结构的了解。看看相关配置参数;多半是这里的问题;

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jcx0324 回答时间:2018-3-1 10:23:35
ADC的输出能力很弱的,看看是否带负载太大,或者外接运放试试看

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2018-3-1 10:23:53
本帖最后由 无薪税绵 于 2018-3-1 11:13 编辑

看看 VDDA 和 VSSA 的电压是否正常。

  1. void MyDAC_Init(void)                        //DAC channel1 Configuration
  2. {
  3.           unsigned int tmpreg1=0,tmpreg2=0;
  4.          RCC->APB2ENR|=1<<2;                       //使能PORTA时钟
  5.         RCC->APB1ENR|=RCC_APB1Periph_DAC;         //使能DAC时钟
  6.          GPIOA->CRL&=0XFF00FFFF;
  7.         GPIOA->CRL|=0X00440000;                   //PA4,5 浮空输入            

  8.           tmpreg1=DAC->CR;                          //Get the DAC CR value  
  9.           tmpreg1&=~(CR_CLEAR_Mask<<DAC_Channel_1); //Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits  
  10.           tmpreg2=(DAC_Trigger_Software|DAC_WaveGeneration_None|DAC_LFSRUnmask_Bits8_0|DAC_OutputBuffer_Enable);
  11.           tmpreg1|=tmpreg2<<DAC_Channel_1;          //Calculate CR register value depending on DAC_Channel
  12.           DAC->CR=tmpreg1;                          //Write to DAC CR
  13.         DAC->CR|=CR_EN_Set<<DAC_Channel_1;        //DAC Channel1使能,PA4自动连接到DAC
  14.         DAC1_SetData(2900);

  15. }

  16. void DAC1_SetData(u16 data)
  17. {
  18.         DAC->DHR12R1=data;                        //通道1的12位右对齐数据
  19.         DAC->SWTRIGR|=0x01;                       //软件启动转换
  20. }

复制代码

再上个STM32F05X系列的参考代码:
STM32F05x系列Code.7z.rar (967.94 KB, 下载次数: 6)

DAC输出配置

DAC输出配置

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

七哥 回答时间:2018-3-1 10:35:31
本帖最后由 toofree 于 2018-3-1 10:40 编辑

刚看了STM32F0的固件库,DAC样例非常简单。只不过触发方式为 DAC_Trigger_None,初始化完成后,随时刷DAC_SetChannel1Data(DAC_Align_12b_R, ADCVal);,DAC立即输出。 傲游截图20180301103159.png

傲游截图20180301103238.png

傲游截图20180301103303.png


总之,先跑个样例程序,排除管脚或其它硬件故障,然后再自己发挥。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-3-1 11:04:13
可能是硬件连接异常,输出0的话,再检查下配置是否正确,不行的话,再去查官方资料DAC部分,尝试样例检测,再来对比DAC_Init(DAC_Channel_1, &dactype);DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_SetChannel1Data(DAC_Align_12b_R,修改了看看对比下);DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Stm32McuLover 回答时间:2018-3-1 17:13:59
用HAL库的例程试试吧,标准库过时了

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

hello_bug 回答时间:2018-3-1 22:36:22
DAC是复用功能吗,是否需要开启AFIO复用。另外就是DAC的配置是否正确,先看看官方例程吧。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版