【问题标题】:STM32F401 Nucleo SPI Clock issue, using STM32CubeF4STM32F401 Nucleo SPI 时钟问题,使用 STM32CubeF4
【发布时间】:2014-07-02 04:58:51
【问题描述】:

STM32F401RE --> CortexM4 我正在使用带有 HAL 低级驱动程序 STM32CubeF4 的 SPI1。 我使用了以下 SPI 配置:-

SPI_HandleTypeDef hspi;
hspi.Instance=SPI1;
hspi.Init.Mode=SPI_MODE_MASTER;
hspi.Init.Direction=SPI_DIRECTION_2LINES;
hspi.Init.DataSize=SPI_DATASIZE_8BIT;
hspi.Init.CLKPolarity=SPI_POLARITY_HIGH;
hspi.Init.CLKPhase=SPI_PHASE_1EDGE;
hspi.Init.NSS=SPI_NSS_SOFT;
hspi.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;
hspi.Init.FirstBit=SPI_FIRSTBIT_MSB;
hspi.Init.TIMode=SPI_TIMODE_ENABLED;
hspi.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLED;
hspi.Init.CRCPolynomial=0;
HAL_SPI_Init(&hspi);

在 MOSI 上发送一些字节后。在逻辑分析仪上,我看到时钟和 MOSI 数据不匹配。 这是一张非常放大的图片,如果需要,我可以发送整个逻辑分析仪文件。

对于读写,我正在使用 HAL_spi_transmit(&hspi, Byte, 1, 5); HAL_spi_Receive(&hspi, Byte, 1, 5);

我用stm32l151rct6a做了几乎相同的spi配置,使用std periph库,它正在工作。

问题:为什么时钟与 MOSI 不同步?

【问题讨论】:

    标签: c stm32 spi


    【解决方案1】:

    我可以想象只有一个类似的命令流

    SET_SCK_HIGH();
    SET_MOSI_HIGH();
    

    在母版中,因此效果在稍微不同的时间可见。

    【讨论】:

    • 呃!不,我使用了 HAL_spi_transmit(&hspi, Byte, 1, 5);,这个 API 通过 MOSI 传输 1 个字节,hspi 是定义的配置结构。问题是,它是随机的,因为有时它们确实是同步的。但是,大多数情况下,如果我发送 0x31,从属板有时会收到 0x73 或 0x63。
    • 问题在我看来,是我做的 SPI 配置。但是,到目前为止,我还没有找到解决方案。
    • @Ishmeet 那么我们对“同步”的含义有了不同的想象。我的观点是,这些信号不一定必须在完全相同的时间出现。即使你使用HAL_spi_transmit(),这个函数在内部也会做我写过的事情,这很好。但是可能有参数,例如字节优先或MSB优先)和SPI模式,指的是0或1中的哪一个是SCK的默认值以及数据实际传输的边缘。
    猜你喜欢
    • 2021-09-24
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2019-09-09
    • 2012-02-10
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多