天越萍踪 发表于 2020-8-15 14:54:47

STM32F405的SPI时钟问题

大家周末好,有个问题请教一下,最近发现STM32F405的SPI在片选信号有效后,需要等1us左右的延时才能发出CLK时钟信号;结束的情况也有类似延时。用的是HAL库。请问这两段时间能缩小或者取消掉么?详见示波器图。

天越萍踪 发表于 2020-8-15 14:57:41

在图上标了一下

陌路夕颜 发表于 2020-8-17 12:09:41

是用硬件控制CS吗,可能是为了使外设和对端设备稳定吧。可以改变一下通讯频率试试,还可以试试SPI 的mode0 mode1 mode2 mode3。具体的只能看看参考手册和数据手册。不过这1us也没什么影响吧

天越萍踪 发表于 2020-8-17 18:05:14

陌路夕颜 发表于 2020-8-17 12:09
是用硬件控制CS吗,可能是为了使外设和对端设备稳定吧。可以改变一下通讯频率试试,还可以试试SPI 的mode0...

软件CS,测试了下这两段时间跟通讯频率没关系;目前结束时的延时,找到原因了,        程序在 Check Busy flag
                if(SPI_CheckFlag_BSY(hspi, Timeout, tickstart) != HAL_OK)
                {
                        errorcode = HAL_ERROR;
                        hspi->ErrorCode = HAL_SPI_ERROR_FLAG;
                        goto error;
                }

但是开始那段延时还没找到原因,手册上没找到。。。目前这段时间勉强够用。

陌路夕颜 发表于 2020-8-18 08:45:22

天越萍踪 发表于 2020-8-17 18:05
软件CS,测试了下这两段时间跟通讯频率没关系;目前结束时的延时,找到原因了,        程序在 Check Busy flag...

可以试试硬件CS

乐天乐 发表于 2020-8-18 09:15:33

是主机双向吗?你是用中断发送还是DMA发的?

天越萍踪 发表于 2020-8-18 13:20:25

乐天乐 发表于 2020-8-18 09:15
是主机双向吗?你是用中断发送还是DMA发的?

在单片机主中断50us里读取编码器位置,软件方式,调用的HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);

天越萍踪 发表于 2020-8-18 13:22:43

陌路夕颜 发表于 2020-8-18 08:45
可以试试硬件CS

硬件NSS没引出来,下次再测试一下这个吧。

乐天乐 发表于 2020-8-18 14:14:47

1us都不能接受吗?时序要求这么高?

天越萍踪 发表于 2020-8-18 14:48:14

乐天乐 发表于 2020-8-18 14:14
1us都不能接受吗?时序要求这么高?

暂时可以接受。后面在看看改为DMA的方式读取能缩短时间不。
页: [1]
查看完整版本: STM32F405的SPI时钟问题