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

spi设置SPI_CPOL_High模式,输出的CLK只有7个

[复制链接]
jieLee 提问时间:2014-11-17 10:48 /
是这样子的,我想使用stm32内部自带的spi接口进行数据发送,但发现无论怎么设置,只要SPI_CPOL这个设为SPI_CPOL_High,用示波器测量时钟引脚只出现了7个CLK。但是如果把SPI_CPOL这个设为SPI_CPOL_Low,这时候,示波器就是8个CLK。下面是我写的程序:

SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;  
  //配置SPI2管脚
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
  GPIO_Init(GPIOB, &GPIO_InitStructure);  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
  SPI_Cmd(SPI2, DISABLE);            //必须先禁能,才能改变MODE
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //双工模式
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI主模式
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //8bit数据
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //CLK空闲时为高电平
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //CLK上升沿采样
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //片选用软件控制
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; //SPI频率
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前
  SPI_InitStructure.SPI_CRCPolynomial = 7; //crc7,stm32spi带硬件ecc

  SPI_Init(SPI2,&SPI_InitStructure);
  SPI_Cmd(SPI2, ENABLE);

  while(1)
  {
      while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
      SPI_I2S_SendData(SPI2, 0x55);
      while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
      SPI_I2S_ReceiveData(SPI2);
  }

收藏 评论4 发布时间:2014-11-17 10:48

举报

4个回答
jieLee 回答时间:2014-11-17 11:30:41
本帖最后由 jieLee 于 2014-11-17 11:43 编辑

虽然是只有7个CLK,但是已经有8个上升沿了,刚好就输出了8个数据,所以这种SPI_CPOL_High模式是没有问题的。
arm8686 回答时间:2014-11-17 11:43:54
楼主你再仔细数一下,看起来应该是 7个半 周期。

空闲常高、第2个沿触发(即是上升沿触发),到最后一个上升沿时,就保持在高状态了(即是空闲状态)。
arm8686 回答时间:2014-11-17 11:49:25
lt001.jpg
Dylan疾风闪电 回答时间:2014-11-18 20:32:28
SPI_InitStructure.SPI_CPOL 时钟极性,决定空闲时,SCK的电平状态。
SPI_InitStructure.SPI_CPHA 时钟相位,决定数据采样的边沿,上升还是下降沿。
-----------------------------------------------
只要SPI的主从设备设置成相同即可通讯,采样的重点是电平边沿,而不是完整的时钟个数。

所属标签

相似问题

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