打印

STM32的DAC一个程序好使另一个不好使,怎样查出原因在哪里。

[复制链接]
6603|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mazhanping123|  楼主 | 2011-9-21 23:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mazhanping123 于 2011-9-22 12:25 编辑

STM32F103RC的DAC问题,一个程序有输出,另一个程序没有输出,请教各位大侠如何能查出没有输出的程序原因在哪里。
    没有输出的程序比较大,不好查。自己编了个小的DAC测试程序是有输出的。说明硬件没问题。已经查了好久,两个程序DAC部分的设置一模一样。
    那位大侠支个招啊。先谢过!!
沙发
airwill| | 2011-9-22 09:36 | 只看该作者
不知道不好使是什么问题? 应该有个准确技术化的说明.
比如说, 输出有错误, 或者干脆不输出.
有没有端口冲突, 或者大程序的 bug 错误篡改了 寄存器.
所以, 可以先用调试器, 在程序中读出 状态寄存器来看看, 分析一下

使用特权

评论回复
板凳
mazhanping123|  楼主 | 2011-9-22 12:26 | 只看该作者
应该是一个程序有输出,另一个程序没有输出。 2# airwill

使用特权

评论回复
地板
香水城| | 2011-9-22 12:35 | 只看该作者
可以考虑在应该输出但没有输出的时候,暂停程序运行,察看各个寄存器的内容,对照可以正常输出的程序运行的状态,看看有什么区别。

使用特权

评论回复
5
baidudz| | 2011-9-22 18:14 | 只看该作者
比较一下寄存器的内容

使用特权

评论回复
6
mazhanping123|  楼主 | 2011-9-22 22:59 | 只看该作者
谢谢楼上几位大侠的指点,今天吧问题查出来了,函数如下所示,经过对比两个不同程序运行DAC输出程序后的寄存器状态。原来是DAC_InitStructure结构体赋值出错了,不知道是被什么篡改了。根本原因没查出来。然后我把DAC_InitTypeDef            DAC_InitStructure;定义成全局变量就对了。最后的解决方法是在定义DAC_InitStructure的语句前加static,即static DAC_InitTypeDef            DAC_InitStructure;
我的函数是:
       void DAC_INIT(void)
          {
           static DAC_InitTypeDef            DAC_InitStructure;
           /* DAC channel1 Configuration */
          DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
        DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
          DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
          DAC_Init(DAC_Channel_1, &DAC_InitStructure);
                /* Enable DAC Channel1 */
        DAC_Cmd(DAC_Channel_1, ENABLE);
      }

使用特权

评论回复
7
mazhanping123|  楼主 | 2011-9-22 23:14 | 只看该作者
不输出的原因是DAC控制寄存器0X40007400本来应该是0X30,却被篡改成0X70,致使本不需要触发就输出到输出寄存器的值需要定时器触发才能输出。但是确实不明白为什么会被篡改。程序里这样的初始化函数还有很多,为什么其他的没出错。考虑是不是函数库有BUG呢。
香版主再帮忙分析一下根本原因吧,谢谢;

使用特权

评论回复
8
mazhanping123|  楼主 | 2011-9-22 23:22 | 只看该作者
我的函数库用的2.0.2版本。
我调试看到的现象是进入函数DAC_INIT()后,单步运行,
运行DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;后,DAC_Trigger 并没有被清零,还是一个杂数,运行DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;后,DAC_Trigger 才被清零以此类推赋值都慢了一拍,也就是数据向左移了一位,0X03就变成0X07了。
香版主帮忙分析下,先谢过了!

使用特权

评论回复
9
香水城| | 2011-9-23 09:49 | 只看该作者
在调用DAC_Init()之前,请使用DAC_InitStruct()初始化DAC_InitStructure结构。

使用特权

评论回复
10
madcc| | 2014-2-21 19:31 | 只看该作者
谢谢,终于解决了我的问题。
6#的初始化函数中没有对 DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude 做赋值。
如果是局部变量,是分配在 栈空间中,里面的值不可预测,刚好DAC_LFSRUnmask_TriangleAmplitude 这里没有配置,所以再调用DAC_Init 就会导致DAC没有输出。不是库函数的问题。

使用特权

评论回复
11
negiul| | 2014-7-30 14:58 | 只看该作者
mazhanping123 发表于 2011-9-22 22:59
谢谢楼上几位大侠的指点,今天吧问题查出来了,函数如下所示,经过对比两个不同程序运行DAC输出程序后的寄 ...

刚开始用,请教一个好像挺幼稚的问题,DA输出固定电压,这个电压值是怎么设的呀,比如我想输出30MV的电压,要怎么在程序中实现呢?

使用特权

评论回复
12
negiul| | 2014-7-30 15:01 | 只看该作者
mazhanping123 发表于 2011-9-22 22:59
谢谢楼上几位大侠的指点,今天吧问题查出来了,函数如下所示,经过对比两个不同程序运行DAC输出程序后的寄 ...

刚开始使用,问一个好像挺幼稚的问题,STM32自带DA实现固定电压输出,请问这个电压是怎么在软件中设定呢,比如说我想实现输出30mA的电压,这个程序能实现吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

55

帖子

0

粉丝