打印
[STM8]

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

[复制链接]
3806|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 insect2006 于 2015-12-6 15:41 编辑

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

ADC配置成左对齐,10位ADC,那么转换结果必然是0-1024了,然后调用这个库函数ADC1_GetConversionValue()返回的ADC内码有效数据仍然放在bit15-bit6上,何解?

11.jpg (86.4 KB )

11.jpg

22.jpg (128.27 KB )

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 | 只看该作者
没有问题

使用特权

评论回复
5
kseeker| | 2015-11-27 23:27 | 只看该作者
有些人总是能发现官方的低级错误。

使用特权

评论回复
6
gmm2015| | 2015-11-28 08:40 | 只看该作者
库没问题的。楼主先理解  左对齐和右对齐的含义吧

使用特权

评论回复
7
chinasunjia123| | 2015-11-28 10:26 | 只看该作者
左对齐没有问题的,templ(char)左移6位,有效数据位在第6、7位上,temph(int16)左移8位,有效数据在8~15上,然后数据相或,这样整体的有效数据就在6~15位上。

使用特权

评论回复
8
丁弋宇| | 2015-11-28 13:34 | 只看该作者
有些人总是能发现官方的低级错误。

使用特权

评论回复
9
放放| | 2015-11-28 14:25 | 只看该作者
你真厉害

使用特权

评论回复
10
cedar_renjun| | 2015-11-28 14:45 | 只看该作者
库代码没有问题
建议楼主先百度下什么叫左对齐

使用特权

评论回复
11
morniglory| | 2015-11-28 15:06 | 只看该作者
楼主自己先学习基础知识

使用特权

评论回复
12
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上呢?我定义一个变量接收了这个数据后我还要将有效数据移位操作到低位上,有什么意义?

使用特权

评论回复
13
sting_yang| | 2015-12-6 10:47 | 只看该作者
insect2006 发表于 2015-12-5 22:41
寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要 ...

楼主先去把基础学会

使用特权

评论回复
14
insect2006|  楼主 | 2015-12-6 15:37 | 只看该作者
本帖最后由 insect2006 于 2015-12-6 15:42 编辑

大家可以批判我,本人水平确实不高~~~
但是也希望大家在批判我的同时帮我解答下为啥左对齐的寄存器数据经过库函数里处理后的返回值仍然要把有效数据放在bit15-6上而不是放在bit9-bit0?
左对齐的数据格式有什么应用上的意义?

使用特权

评论回复
15
zhangbin_abc| | 2015-12-13 14:56 | 只看该作者
代码应该没问题吧。

使用特权

评论回复
16
chinasunjia123| | 2016-1-6 19:12 | 只看该作者
insect2006 发表于 2015-12-5 22:41
寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要 ...

左对齐对于你这个12位的AD来说,数值直接放大了64倍。可以节省你人为的一个乘法运算,也可以在计算结果上增加一点精度。分子越大对计算结果精度越有帮助。

使用特权

评论回复
17
konway| | 2016-11-21 10:44 | 只看该作者
chinasunjia123 发表于 2015-11-28 10:26
左对齐没有问题的,templ(char)左移6位,有效数据位在第6、7位上,temph(int16)左移8位,有效数据在8~1 ...

怪不得转出来的数据不对,数值非常大
以前自己写都是高位左移2位,再跟低位与

使用特权

评论回复
18
konway| | 2016-11-21 10:45 | 只看该作者
insect2006 发表于 2015-12-5 22:41
寄存器左对齐很好理解,但是为什么要把有效数据存放在bit6-15上呢?我定义一个变量接收了这个数据后我还要 ...

同问。。。。一般都是放在低位撒~~

使用特权

评论回复
19
hglhgl021| | 2017-7-18 10:11 | 只看该作者
感觉很多人 对简单问题都不屑回答 或者答非所问 我也看了这个库函数 左对齐的时候是有点问题 输出结果是扩大了的 如果不注意看源库函数就会得到莫名其妙的结果

使用特权

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

本版积分规则

25

主题

146

帖子

1

粉丝