你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SPI SPI_CPOL_High,SPI_CPHA_1Edge 模式,在Reset 后第一笔少一个CLK

[复制链接]
zodiac-386300 提问时间:2016-10-10 15:56 /
本帖最后由 zodiac-386300 于 2016-10-11 09:53 编辑

型号:STM32F411RE
如题在8bits mode,SPI SPI_CPOL_High,SPI_CPHA_1Edge模式下,Txdata 为0,1,2,3...
如图1在reset 后 bit 1在第15个 CLK出现,理应在第16个,从wave来看是reset后第一笔数据少了一个CLK导致
如图2 不再reset 再次发送则正常
如图3 在txdata为1,1,2,3... reset 后 bit 1依然在第15个 CLK出现,第一笔data “1” 神秘消失了 ,图4则为不再reset 再次发送正常
其它三种CPOL,CPHA模式下 wave 没有此类异常,还求大神指点
配置代码
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
    GPIOB->BSRRL |= GPIO_Pin_12;

    SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // set to full duplex mode, seperate MOSI and MISO lines
    SPI_InitStruct.SPI_Mode = SPI_Mode_Master;     // transmit in master mode, NSS pin has to be always high
    SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; // one packet of data is 16 bits wide
    SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;        // clock is High when idle
    SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;      // data sampled at first edge
    SPI_InitStruct.SPI_NSS = SPI_NSS_Soft | SPI_NSSInternalSoft_Set; // set the NSS management to internal and pull internal NSS high
    SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
    SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;// data is transmitted MSB first
    SPI_Init(SPI2, &SPI_InitStruct);
    SPI_Cmd(SPI2, ENABLE);

另外:测试过两块 STM32F411 板子都是这样的行为,板子损坏的概率应该比较小,如果理解没错的话,可能是STM32F411 SPI Peripheral 的一个小bug

图2 with no reset

图2 with no reset

图1 with reset

图1 with reset

图3 第一笔为1 with reset

图3 第一笔为1 with reset

图4 第一笔为1 with no reset

图4  第一笔为1 with no reset
收藏 2 评论7 发布时间:2016-10-10 15:56

举报

7个回答
埃斯提爱慕 回答时间:2016-10-10 18:07:06
提示: 作者被禁止或删除 内容自动屏蔽
assssdz 回答时间:2016-10-10 23:00:04

签到签到
签到签到
zhangdaijin 回答时间:2016-10-11 05:42:47
           帮顶
zodiac-386300 回答时间:2016-10-11 09:53:59
                          不要沉啊
zodiac-386300 回答时间:2016-10-11 18:53:58
            顶一下!!!
zodiac-386300 回答时间:2016-10-24 10:32:20
有没有人有相同现象?
zero99 回答时间:2016-11-15 08:08:54
顶一下

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版