如何解决如何在不使用下拉电阻浪费电流的情况下使SPI SCK线空闲至低电平?
我正在使用STM32L475 MCU,并且正在使用SPI与SD卡通信。
当我配置SPI SCK GPIO引脚时,我将其配置为PushPull模式下的备用功能SPI。我将ClockPolarity设置为空闲低,这使我认为SCK线在不活动时将保持为低,但事实并非如此。取而代之的是,SCK线空闲为高电平,直到SPI通信开始。这意味着,如果我执行SPI写和随后的读取操作,则会触发额外的时钟脉冲,从而中断我的通信。
我发现能够解决此问题的唯一方法是进一步配置GPIO引脚以使其具有下拉电阻,但是在我看来,这似乎在电流消耗方面是浪费的。将引脚配置为漏极开路也不能解决问题,因为无论如何我都需要添加上拉电阻。最后,我尝试写入SCK引脚的GPIO引脚的输出寄存器并将其设置为低电平,但这并没有任何改变。
在我看来,我唯一的选择是在下拉电阻上放置一个下拉电阻并不断浪费电流,以使SCK线保持低电平。我想知道这是否是人们用于SPI通信的常规解决方案?我无法想象是这样。
解决方法
CPOL
是SPIx_CR1的第一位,用于控制特定SPI的CLK引脚的空闲状态。
因此,如果您想在空闲时将SCK引脚保持在低电平状态,请尝试:
SPI1->CR1 &= 0xFFFE;
您还可以在STM32CubeMX中配置时钟极性: screenshot。
我还没有亲自尝试过这些方法,但是根据官方文档,这两种方法都可以使用。 Official STM32L47xxx Reference
42.4.6通信格式
时钟相位和极性控制 可以通过软件使用CPOL和CPHA选择四种可能的时序关系 SPIx_CR1寄存器中的位。当没有数据传输时,CPOL(时钟极性)位控制时钟的空闲状态值。该位同时影响主模式和从模式。 如果将CPOL复位,则SCK引脚将处于低电平空闲状态。如果设置了CPOL,则SCK引脚将处于高电平空闲状态。
...
Bit 1 CPOL:时钟极性
0.空闲时CK为0
1:空闲时CK为1
注意:正在进行通信时,请勿更改此位。
除了在TI模式下应用CRC的情况外,该位在SPI TI模式下不使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。