打印

SPI时序问题,MOSI空闲设置,望大神指导

[复制链接]
6523|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
目前使用STM32L系列芯片调试美信AD芯片MAX1032,芯片为SPI接口,时序如图()所示,在MOSI空闲时候手册上为低电平,在第一个字节发送完成后,时钟信号上升沿到来,STM32 SPI配置模式CPOL=0,CPHA=0;但是问题在于CPHA=0的时候,MOSI发送空闲时候为高电平。
有尝试将MOSI与另一IO口进行连接,但是无法将其拉低,有没有大神做过,求指导

)@D`ZP%N0R@AR6XUS0J$MK7.jpg (76.08 KB )

)@D`ZP%N0R@AR6XUS0J$MK7.jpg
沙发
飘呀叶子| | 2014-9-18 17:18 | 只看该作者
我的时钟始终都没信号,一直为高。你的IO和spi是如何配置的能发源码看看吗?谢了

使用特权

评论回复
板凳
呆——呆|  楼主 | 2014-9-18 17:33 | 只看该作者
飘呀叶子 发表于 2014-9-18 17:18
我的时钟始终都没信号,一直为高。你的IO和spi是如何配置的能发源码看看吗?谢了 ...

        SPI_InitTypeDef SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

        // SPI2: NSS, SCK, MISO and MOSI òy??????
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_SPI2);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
        GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);

        SPI_DeInit(SPI2);
        SPI_InitStructure.SPI_Direction         = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode              = SPI_Mode_Master;                //éè???÷SPI
        SPI_InitStructure.SPI_DataSize          = SPI_DataSize_16b;
        SPI_InitStructure.SPI_CPOL              = SPI_CPOL_Low;
        SPI_InitStructure.SPI_CPHA              = SPI_CPHA_2Edge;
        SPI_InitStructure.SPI_NSS               = SPI_NSS_Soft;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
        SPI_InitStructure.SPI_FirstBit          = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial     = 7;
        SPI_Init(SPI2,&SPI_InitStructure);

        SPI_Cmd(SPI2, ENABLE);//ê1?üSPI2

使用特权

评论回复
地板
飘呀叶子| | 2014-9-18 18:07 | 只看该作者
你的片选是在NSS上的吗

使用特权

评论回复
5
mmuuss586| | 2014-9-18 19:27 | 只看该作者
飘呀叶子 发表于 2014-9-18 18:07
你的片选是在NSS上的吗

片选可以接任意IO,IO控制下电平好了;

使用特权

评论回复
6
mmuuss586| | 2014-9-18 19:30 | 只看该作者
看你上面的时序图;
在片选选中后,第一时钟来前,第一位数据已经有效了;
个人看法,用STM32不容易实现或者无法实现;
实在不行,软件模拟吧;

使用特权

评论回复
7
香水城| | 2014-9-19 15:57 | 只看该作者
CPHA和CPOL配置时钟空闲时电平状态和时钟的采样边沿。

根据LZ贴的美信AD的时序图,AD在上升沿读取数据,下降沿把数据打出来,对于MCU这个SPI主设备来说,配置成都是上升沿有效:上升沿把数据打出去,也是上升沿把数据读回来。

至于MOSI的空闲电平是高是低,有什么不同么?

使用特权

评论回复
8
呆——呆|  楼主 | 2014-9-22 11:58 | 只看该作者
香水城 发表于 2014-9-19 15:57
CPHA和CPOL配置时钟空闲时电平状态和时钟的采样边沿。

根据LZ贴的美信AD的时序图,AD在上升沿读取数据,下 ...

感谢香主的回复,在AD芯片手册上有提到在In each conversion mode, the DIN bits must be driven low after the first byte.我理解的意思为单片机的SPI mosi输出脚在空闲时候需要拉低

使用特权

评论回复
9
呆——呆|  楼主 | 2014-9-22 12:00 | 只看该作者
mmuuss586 发表于 2014-9-18 19:30
看你上面的时序图;
在片选选中后,第一时钟来前,第一位数据已经有效了;
个人看法,用STM32不容易实现或 ...

感谢版主,目前使用IO口模拟SPI接口程序已调通,但是速度达不到,最大采集速率只有20k左右

使用特权

评论回复
10
langziyexin| | 2015-5-6 20:00 | 只看该作者
大哥 加一下QQ呗 想问您一些问题 我的级别不够 不能给您留言。。。462421430@qq.com 我的QQ 麻烦您了

使用特权

评论回复
11
zh113214| | 2015-5-6 20:48 | 只看该作者
感谢版主,学习了,很受用,。。

使用特权

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

本版积分规则

6

主题

39

帖子

1

粉丝