OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5657|回复: 2

原子哥DAC实验的一个小BUG、c语言小陷阱、请看

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
发表于 2014-5-9 19:35:56 | 显示全部楼层 |阅读模式
5金钱
亲爱的原子哥、我今天在研究DAC的实验时候、发现了一个BUG,程序中我并没有假如按键的程序、、我使用调试组件串口调试的、、当我输入800(1000以下的数据),LCD的显示都为零、、
您的程序如下:

[mw_shl_code=c,true]void Dac1_Set_Vol(u16 vol) { float temp=vol; temp/=1000; temp=temp*4096/3.3; DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12?????????????????è??DAC?? }[/mw_shl_code]
我就觉得很奇怪、、然后研究这段代码、、结果发现您这个  temp/ =1000,
当temp的值小于1000时,最终的temp是为0的、、这个c语言的小小陷阱、、

后来我改了一下:
[mw_shl_code=c,true]void Set_Dac1(u16 vol) { float temp = (float)vol ; temp = temp/1000; temp = temp *4096/3.3;//12bit = 0~4095 /* Set DAC Channel1 DHR12L register */ DAC_SetChannel1Data(DAC_Align_12b_R, temp); }[/mw_shl_code]
把它强制转化为float型就行了、、、LCD显示的数据经计算器计算、、完全正确、、请原子哥明鉴、、、

最佳答案

查看完整内容[请看2#楼]

额、、原子哥的程序没有BUG、、抱歉、、我自己写的时候把temp的类型给声明为u16了、、结果弄错了、、虚惊一场、、抱歉哈
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-5-9 19:35:57 | 显示全部楼层
额、、原子哥的程序没有BUG、、抱歉、、我自己写的时候把temp的类型给声明为u16了、、结果弄错了、、虚惊一场、、抱歉哈
回复

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-5-9 21:23:55 | 显示全部楼层
回复【2楼】墨迹:
---------------------------------
哈哈 常有的事。所以凡是发现什么错误时 优先想是不是自己的问题。
不用谢了……
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 03:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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