打印
[STM32F1]

stm32中 SPI驱动控制数字电位计时datasize的配置问题

[复制链接]
2203|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  stm32单片机配置SPI时发现SPI_DataSize只能配置成8位或者16位,但是现在使用的数字电位计要求是17位数据,我就不知道该怎么办了,求大神解答,是不是我的想法理解错了,在线等,谢谢。
沙发
mmuuss586| | 2015-4-1 23:06 | 只看该作者

看看数字电位器的资料,发24位会怎么样,如果发24位,后7位不处理的话;
你就发24位好了;

不行的话,就只能模拟SPI了;

使用特权

评论回复
板凳
mmuuss586| | 2015-4-1 23:07 | 只看该作者
发24位的话,片选先选中,8位的发3次;
我以前就这么干的;

使用特权

评论回复
地板
mmuuss586| | 2015-4-4 18:44 | 只看该作者
zhangheze2011 发表于 2015-4-4 14:26
你好,谢谢你的回复,可是我看数字电位计的资料,也没有说发24位的情况如何呀,只是说有17位数据,只有17 ...

那你可以试试看;
一般看时序图可以看出来‘

使用特权

评论回复
5
小浣熊| | 2015-4-6 21:35 | 只看该作者
楼主的问题解决了吗??不知是否是按照楼上那样修正呢?

使用特权

评论回复
6
zhangheze2011|  楼主 | 2015-4-11 15:02 | 只看该作者
本帖最后由 zhangheze2011 于 2015-4-11 15:09 编辑
mmuuss586 发表于 2015-4-4 18:44
那你可以试试看;
一般看时序图可以看出来‘

     你好,这个是数字电位计DS1267B芯片的时序图,我已经自己用GPIO模拟出CLK,reset与DQ信号,这个能看出来发送24位,17位有效吗??


还有就是虽然用GPIO模拟了一个控制数字电位计但是发现出来的结果很诡异,与自己说明书上看到的结果不一样,想问一下为什么
从时序图,芯片手册上看DS1267B bit0是选择通道,之后按照顺序是将bit1~bit16传输进去控制数字电位计,所以程序上应该是               
               for(i=0;i<8;i++)
                {
                                if(res_temp&(0x01<<i))
                                {        DS1267B_DQ_1();
                                    delay_us(1);}
                                else
                                {        DS1267B_DQ_0();
                                    delay_us(1);}
                                
                                DS1267B_CLK_1();
                                delay_us(1);
                                DS1267B_CLK_0();
                                delay_us(1);
                }

但是这样编写,给数字电位计输入0,1,128,255。测得的电阻变化是无序的,倒是后来编程试了一下先将高位传输进去,再传低位,如下所示:               
                 for(i=0;i<8;i++)
                {
                                if(res_temp&(0x80>>i))
                                {                DS1267B_DQ_1();
                                    delay_us(1);}
                                else
                                {                DS1267B_DQ_0();
                                    delay_us(1);}
                                
                                DS1267B_CLK_1();
                                delay_us(1);
                                DS1267B_CLK_0();
                                delay_us(1);
                }
却发现输入0,128,255电阻变化是有规律的,但是我就不理解了,这样的话不就跟数据手册上写的不一样了吗?数据手册上应该不会出错吧,求解答。。。。

360截图20150411144204180.jpg (43.93 KB )

360截图20150411144204180.jpg

360截图20150411144238932.jpg (52.48 KB )

360截图20150411144238932.jpg

使用特权

评论回复
7
mm7989680| | 2017-9-10 22:55 | 只看该作者
The internal shift register ignores leading bits before the 22 required bits

使用特权

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

本版积分规则

2

主题

4

帖子

0

粉丝