[STM8] STM8S的官方库ADC数据左对齐问题!?(图)

[复制链接]
 楼主| insect2006 发表于 2015-11-27 15:43 | 显示全部楼层 |阅读模式
本帖最后由 insect2006 于 2015-12-6 15:41 编辑

图1是STM8S官方手册里面描述的ADC转换结果寄存器的对齐方式
图2的官方库里面的读取ADC转换结果寄存器的函数,

ADC配置成左对齐,10位ADC,那么转换结果必然是0-1024了,然后调用这个库函数ADC1_GetConversionValue()返回的ADC内码有效数据仍然放在bit15-bit6上,何解?
11.jpg
22.jpg
 楼主| insect2006 发表于 2015-11-27 15:51 | 显示全部楼层
右对齐没问题

可是看左对齐:
temph = (uint16_t)((uint16_t)((uint16_t)templ << 6) | (uint16_t)((uint16_t)temph << 8));

这个代码有点让人崩溃。。。
sting_yang 发表于 2015-11-27 19:44 | 显示全部楼层
看不出stm8官方哪里有错?
这代码也很简单,妳会崩溃,表示妳对C不熟
Serge_Ding 发表于 2015-11-27 20:20 | 显示全部楼层
没有问题
kseeker 发表于 2015-11-27 23:27 | 显示全部楼层
有些人总是能发现官方的低级错误。
gmm2015 发表于 2015-11-28 08:40 | 显示全部楼层
库没问题的。楼主先理解  左对齐和右对齐的含义吧
chinasunjia123 发表于 2015-11-28 10:26 | 显示全部楼层
左对齐没有问题的,templ(char)左移6位,有效数据位在第6、7位上,temph(int16)左移8位,有效数据在8~15上,然后数据相或,这样整体的有效数据就在6~15位上。
丁弋宇 发表于 2015-11-28 13:34 | 显示全部楼层
有些人总是能发现官方的低级错误。
放放 发表于 2015-11-28 14:25 来自手机 | 显示全部楼层
你真厉害
cedar_renjun 发表于 2015-11-28 14:45 | 显示全部楼层
库代码没有问题
建议楼主先百度下什么叫左对齐
morniglory 发表于 2015-11-28 15:06 | 显示全部楼层
楼主自己先学习基础知识
 楼主| insect2006 发表于 2015-12-5 22:41 | 显示全部楼层
本帖最后由 insect2006 于 2015-12-5 22:54 编辑
chinasunjia123 发表于 2015-11-28 10:26
左对齐没有问题的,templ(char)左移6位,有效数据位在第6、7位上,temph(int16)左移8位,有效数据在8~1 ...

寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要将有效数据移位操作到低位上,有什么意义?
sting_yang 发表于 2015-12-6 10:47 | 显示全部楼层
insect2006 发表于 2015-12-5 22:41
寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要 ...

楼主先去把基础学会
 楼主| insect2006 发表于 2015-12-6 15:37 | 显示全部楼层
本帖最后由 insect2006 于 2015-12-6 15:42 编辑

大家可以批判我,本人水平确实不高~~~
但是也希望大家在批判我的同时帮我解答下为啥左对齐的寄存器数据经过库函数里处理后的返回值仍然要把有效数据放在bit15-6上而不是放在bit9-bit0?
左对齐的数据格式有什么应用上的意义?
zhangbin_abc 发表于 2015-12-13 14:56 | 显示全部楼层
代码应该没问题吧。
chinasunjia123 发表于 2016-1-6 19:12 | 显示全部楼层
insect2006 发表于 2015-12-5 22:41
寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要 ...

左对齐对于你这个12位的AD来说,数值直接放大了64倍。可以节省你人为的一个乘法运算,也可以在计算结果上增加一点精度。分子越大对计算结果精度越有帮助。
konway 发表于 2016-11-21 10:44 | 显示全部楼层
chinasunjia123 发表于 2015-11-28 10:26
左对齐没有问题的,templ(char)左移6位,有效数据位在第6、7位上,temph(int16)左移8位,有效数据在8~1 ...

怪不得转出来的数据不对,数值非常大
以前自己写都是高位左移2位,再跟低位与
konway 发表于 2016-11-21 10:45 | 显示全部楼层
insect2006 发表于 2015-12-5 22:41
寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要 ...

同问。。。。一般都是放在低位撒~~
hglhgl021 发表于 2017-7-18 10:11 | 显示全部楼层
感觉很多人 对简单问题都不屑回答 或者答非所问 我也看了这个库函数 左对齐的时候是有点问题 输出结果是扩大了的 如果不注意看源库函数就会得到莫名其妙的结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

146

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部