关于SPI总线的时钟极性(CLKPolarity)和时钟相位(CLKPhase)以及时钟计算

本文深入解析SPI时钟极性和相位配置,通过实例说明时钟在高位和低位的变化,以及采样发生在第一个或第二个边沿的具体含义。同时,通过具体频率设置,解释了SPI时钟频率的计算方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;//时钟极性为高的时候,就是平时都是高电平
    //这里的high就是1,low就是0
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;//1就是第一个时钟沿,2就是第二个时钟沿

有一些文章写得上升沿下降沿真的不如第一个边沿和第二个来的易懂

看第一张图,空闲时是高电平,第二个时钟沿采样

看第二张图,频率设置的是4MHz,64分频,那么就是62.5KHz的时钟,而事实上是125K的

### SPI通信中时钟极性时钟相位的设置与作用 #### 时钟极性(CPOL) 时钟极性决定了SPI总线在空闲状态下的时钟线电平。具体来说: - 当 **CPOL=0** 时,空闲时钟为低电平,数据传输从上升沿开始[^4]。 - 当 **CPOL=1** 时,空闲时钟为高电平,数据传输从下降沿开始[^4]。 #### 时钟相位(CPHA) 时钟相位定义了数据采样的时刻,即是在时钟的第一个边沿还是第二个边沿进行采样。具体描述如下: - 当 **CPHA=0** 时,数据在时钟的第一个跳变沿被采样。 - 当 **CPHA=1** 时,数据在时钟的第二个跳变沿被采样[^4]。 #### 四种工作模式 根据CPOLCPHA的不同组合,SPI定义了四种标准工作模式: 1. **模式0(CPOL=0, CPHA=0)** - 空闲时:时钟线为低电平。 - 数据采样:第一个跳变沿(上升沿)。 - 效果图:数据在第一个上升沿采样,随后在下降沿更新下一位。 2. **模式1(CPOL=0, CPHA=1)** - 空闲时:时钟线为低电平。 - 数据采样:第二个跳变沿(下降沿)。 - 效果图:第一个跳变沿用于准备数据,第二个跳变沿(下降沿)用于采样[^4]。 3. **模式2(CPOL=1, CPHA=0)** - 空闲时:时钟线为高电平。 - 数据采样:第一个跳变沿(下降沿)。 - 效果图:数据在第一个下降沿采样,在下一个上升沿准备下一位。 4. **模式3(CPOL=1, CPHA=1)** - 空闲时:时钟线为高电平。 - 数据采样:第二个跳变沿(上升沿)。 - 效果图:第一个跳变沿准备数据,第二个跳变沿(上升沿)采样数据。 #### 示例代码 以下是一个配置SPI时钟极性相位的示例代码(以LPSPI为例): ```c typedef enum { LPSPI_ACTIVE_HIGH = 1U, /*!< Signal is Active High (idles low). */ LPSPI_ACTIVE_LOW = 0U /*!< Signal is Active Low (idles high). */ } lpspi_signal_polarity_t; void configure_spi(lpspi_signal_polarity_t cpol, uint8_t cpha) { if (cpol == LPSPI_ACTIVE_HIGH) { // 配置时钟极性为低电平时空闲 } else { // 配置时钟极性为高电平时空闲 } if (cpha == 0) { // 配置数据在第一个跳变沿采样 } else { // 配置数据在第二个跳变沿采样 } } ``` ### 总结 SPI通信中的时钟极性时钟相位是两个关键参数,它们共同决定了数据的采样时刻时钟信号的行为。通过合理配置CPOLCPHA,可以实现不同的SPI工作模式,从而满足各种设备间的通信需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值