百思不得其解!!用spi驱动74HC595扩展IO一个奇怪的问题??

[复制链接]
7134|10
 楼主| 2009chinalj 发表于 2013-5-27 14:40 | 显示全部楼层 |阅读模式
stm32 的spi 设置如下  
   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
   SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
   SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
   SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;  ///SPI_CPOL_High sck 空闲时 为高电平
   SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//在sck第一个跳沿对输入 输出数据采样
   SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;//需要考虑芯片的速度
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;


发送程序 如下
while(1){
       LowSpiLatch();
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
          SPI2->DR = 0x88;//(u16)(SPI_OutExpland>>16) ;                //输出到扩展IO,先发低16位
            /* Wait for SPI2 Tx buffer empty */
          while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
        SPI2->DR = 0x11;                //输出到扩展IO,先发低16位
          if(TypeMode==General_IO)
        Hight_Latch_O;//the 595 need a positive-going signel

}
输出应该是DO1~DO2=0x11   ; DO1~DO2=0x88;
但是输出时DO1~DO2=0xC4   ; DO1~DO2=0x01;
即整个32bit 循环右移动了一位,是什么导致这样的呢???

       

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 2009chinalj 发表于 2013-5-27 14:42 | 显示全部楼层
以前只是没加三极管时用spi +595 扩展都没什么问题,测试时坏了好几个595,但是目前看应该不是595的问题
ayb_ice 发表于 2013-5-27 15:23 | 显示全部楼层
多看时序开始与结尾信号

评分

参与人数 1威望 +3 收起 理由
2009chinalj + 3 赞一个!

查看全部评分

 楼主| 2009chinalj 发表于 2013-5-27 17:50 | 显示全部楼层
收尾的时序不对,但是spi单次16bit发送时不会出现这个问题,有眉目了
gx_huang 发表于 2013-5-27 18:00 | 显示全部楼层
注意三极管电路的开关频率,太快就不行了。
huangxz 发表于 2013-5-27 18:08 | 显示全部楼层
为啥要加三极管?直接连接有什么问题么
 楼主| 2009chinalj 发表于 2013-5-28 13:42 | 显示全部楼层
huangxz 发表于 2013-5-27 18:08
为啥要加三极管?直接连接有什么问题么

直接驱动上门者四个595是没问题的,但是我还有其它ic挂在spi上,不加三极管,驱动能力恐怕不够
 楼主| 2009chinalj 发表于 2013-5-28 13:44 | 显示全部楼层
gx_huang 发表于 2013-5-27 18:00
注意三极管电路的开关频率,太快就不行了。

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;//需要考虑芯片的速度

最低速了,对8050而已没什么问题
gx_huang 发表于 2013-5-28 14:43 | 显示全部楼层
三极管对CLK反向了,注意初始化程序中CLK的锁存极性,极性错了,就相当于移位了一bit。
 楼主| 2009chinalj 发表于 2013-5-29 21:51 | 显示全部楼层
gx_huang 发表于 2013-5-28 14:43
三极管对CLK反向了,注意初始化程序中CLK的锁存极性,极性错了,就相当于移位了一bit。 ...

谢谢,问题已解决
tuzihog 发表于 2014-3-6 20:42 | 显示全部楼层
关注一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:改变这个世界的不是MBA是工程师。。其实我是一名电工

13

主题

177

帖子

0

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