OpenEdv-开源电子网

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

用mini学习板比较库函数和寄存器写的例程,后者稳定?

[复制链接]

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
发表于 2016-8-9 21:40:30 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 ba5rw 于 2016-8-9 22:02 编辑

我的测试是库函数写的例程在满电压的时候跳动厉害,而且受闪烁的LED影响,以为是电源不稳定,关闭LED闪烁,在4095和4085之间跳动,相对稳定一些。

但是换成寄存器的例程则丝纹不动,没有任何问题,数字稳定。
这是为什么?希望有朋友指点!谢谢!


寄存器例程在0V的时候偶尔会在0和1之间跳动,但是改用库函数的例程就会在14到0之间跳动。

是不是库函数的配置有问题?

最佳答案

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

终于解决了,原来是例程中有一句开启指定软件的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
 楼主| 发表于 2016-8-9 21:40:31 | 显示全部楼层
终于解决了,原来是例程中有一句开启指定软件的问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-9 23:20:06 | 显示全部楼层
应该是配置的差异,具体的,可以检查对比代码
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-8-10 08:55:55 | 显示全部楼层
理论上这两个东西基本相同。有可能是因为库函数需要的时间稍长造成了误差?
如果寄存器稳定那就用寄存器吧,除非是学习阶段不然不必深究
回复

使用道具 举报

19

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-8-9
在线时间
41 小时
发表于 2016-8-10 09:13:08 | 显示全部楼层
你们大神都用寄存器吗?
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-8-10 09:56:08 | 显示全部楼层
C语言本身只是对寄存器操作进行了一下包装,所以并没有什么特别的影响。而且操作系统也是用C/C++写的,内嵌一点汇编,因为速度快。现在对开发的要求周期越来越短,如果用寄存器,移植可能都是一个问题。现在的公司都会大量的使用开源代码,所以Github特别火。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
 楼主| 发表于 2016-8-10 12:03:06 | 显示全部楼层
大家手头有原子大佬mini板的,可以试试。我试了一个早上,没有找到所以然,屏蔽了库函数例程的ADC_DeInit(ADC1);  //将外设 ADC1 的全部寄存器重设为缺省值,AD口接地显示稳定为0了,偶尔跳变和寄存器写的差不多。但是中间电压,例如,0.3V的时候跳变还是远远大于寄存器例程的范围。

寄存器写的AD采集要更换或增删通道需要查手册,前晚为了了解GPIO口的设置搞了好几个小时,但是用库函数从设置到应用一目了然,步骤逻辑很清晰。可是寄存器有明显说不出来的优势。迷惘中!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-8-10 20:46:03 | 显示全部楼层
ba5rw 发表于 2016-8-10 12:03
大家手头有原子大佬mini板的,可以试试。我试了一个早上,没有找到所以然,屏蔽了库函数例程的ADC_DeInit(A ...

按理说应该是一样的。
你可以对比下库函数和寄存器在ADC初始化完成之后,ADC的所有寄存器值。
从而分析是哪个寄存器哪个位的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
 楼主| 发表于 2016-8-10 21:02:23 | 显示全部楼层
正点原子 发表于 2016-8-10 20:46
按理说应该是一样的。
你可以对比下库函数和寄存器在ADC初始化完成之后,ADC的所有寄存器值。
从而分析 ...

不会用DEBUG啊,谁能帮忙测试看看问题在哪,谢谢了!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 21:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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