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

查看: 1551|回复: 0

STM32 SPI2无论是读还是写SPI_DR都是0000,求帮助

[复制链接]

1

主题

10

回帖

0

蝴蝶豆

初级会员

最后登录
2018-8-4
发表于 2013-7-10 17:59:23 | 显示全部楼层 |阅读模式
.h文件部分代码
#define AFE4490_FLAG_TIMEOUT       ((uint32_t)0x1000)     //用于延时

      /* AFE4490 SPI Interface pins */           //AFE4490连接SPI2,对应PB12~PB15
#define AFE4490_SPI           SPI2
#define AFE4490_SPI_CLK       RCC_APB1Periph_SPI2 

#define AFE4490_SPI_SCLK_PIN          GPIO_Pin_13     //PB13
#define AFE4490_SPI_SCLK_GPIO_PORT    GPIOB
#define AFE4490_SPI_SCLK_GPIO_CLK     RCC_AHB1Periph_GPIOB
#define AFE4490_SPI_SCLK_SOURCE       GPIO_PinSource13
#define AFE4490_SPI_SCLK_AF           GPIO_AF_SPI2

#define AFE4490_SPI_SOMI_PIN          GPIO_Pin_14    //PB14
#define AFE4490_SPI_SOMI_GPIO_PORT    GPIOB
#define AFE4490_SPI_SOMI_GPIO_CLK      RCC_AHB1Periph_GPIOB
#define AFE4490_SPI_SOMI_SOURCE       GPIO_PinSource14
#define AFE4490_SPI_SOMI_AF           GPIO_AF_SPI2

#define AFE4490_SPI_SIMO_PIN          GPIO_Pin_15   //PB15
#define AFE4490_SPI_SIMO_GPIO_PORT    GPIOB
#define AFE4490_SPI_SIMO_GPIO_CLK     RCC_AHB1Periph_GPIOB
#define AFE4490_SPI_SIMO_SOURCE       GPIO_PinSource15
#define AFE4490_SPI_SIMO_AF           GPIO_AF_SPI2

#define AFE4490_SPI_STE_PIN           GPIO_Pin_12   //PB12
#define AFE4490_SPI_STE_GPIO_PORT     GPIOB
#define AFE4490_SPI_STE_GPIO_CLK      RCC_AHB1Periph_GPIOB

.c文件,SPI设置
void AFE4490_Init(void)   //SPI设置
{
  GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;

  /* Enable the SPI periph */
  RCC_APB1PeriphClockCmd(AFE4490_SPI_CLK,ENABLE);

  /* Enable SCLK, SOMI, SIMO ,and STE GPIO clocks */
  RCC_AHB1PeriphClockCmd(AFE4490_SPI_SCLK_GPIO_CLK| AFE4490_SPI_SOMI_GPIO_CLK | AFE4490_SPI_SIMO_GPIO_CLK, ENABLE);
  RCC_AHB1PeriphClockCmd(AFE4490_SPI_STE_GPIO_CLK, ENABLE);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  /* SPI SCLK pin configuration */
  GPIO_InitStructure.GPIO_Pin = AFE4490_SPI_SCLK_PIN;
  GPIO_Init(AFE4490_SPI_SCLK_GPIO_PORT, &GPIO_InitStructure);

  /* SPI SOMI pin configuration */
  GPIO_InitStructure.GPIO_Pin = AFE4490_SPI_SOMI_PIN;
  GPIO_Init(AFE4490_SPI_SOMI_GPIO_PORT, &GPIO_InitStructure);

  /* SPI SIMO pin configuration */
  GPIO_InitStructure.GPIO_Pin = AFE4490_SPI_SIMO_PIN;
  GPIO_Init(AFE4490_SPI_SIMO_GPIO_PORT, &GPIO_InitStructure);
  
    
  GPIO_PinAFConfig(AFE4490_SPI_SCLK_GPIO_PORT, AFE4490_SPI_SCLK_SOURCE, AFE4490_SPI_SCLK_AF);
  GPIO_PinAFConfig(AFE4490_SPI_SOMI_GPIO_PORT, AFE4490_SPI_SOMI_SOURCE, AFE4490_SPI_SOMI_AF);
  GPIO_PinAFConfig(AFE4490_SPI_SIMO_GPIO_PORT, AFE4490_SPI_SIMO_SOURCE, AFE4490_SPI_SIMO_AF);
   
    /* SPI configuration -------------------------------------------------------*/
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_Init(AFE4490_SPI, &SPI_InitStructure);
  /* Enable SPI2  */
  SPI_Cmd(AFE4490_SPI, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin =AFE4490_SPI_STE_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(AFE4490_SPI_STE_GPIO_PORT, &GPIO_InitStructure); 
  GPIO_SetBits(AFE4490_SPI_STE_GPIO_PORT, AFE4490_SPI_STE_PIN);
  

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_SetBits(GPIOB, GPIO_Pin_11); 
  GPIO_SetBits(GPIOB, GPIO_Pin_11); 
  
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE); 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  GPIO_SetBits(GPIOC, GPIO_Pin_5); 

    /* CPIO clksel reset */
  delay(1000);
  GPIO_ResetBits(GPIOC, GPIO_Pin_5);
  delay(1000);
  GPIO_SetBits(GPIOC, GPIO_Pin_5);

}

uint8_t AFE4490_SendByte(uint8_t byte)

  AFE4490Timeout = AFE4490_FLAG_TIMEOUT;
//等待发送信号寄存器为非空,然后发送一个字节到spi总线上
  while (SPI_I2S_GetFlagStatus(AFE4490_SPI, SPI_I2S_FLAG_TXE) == RESET)
  {
    if((AFE4490Timeout--) == 0) return AFE4490_TIMEOUT_UserCallback();
  }
//只管发送即可
  SPI_I2S_SendData(AFE4490_SPI, byte);
  AFE4490Timeout = AFE4490_FLAG_TIMEOUT;
//等待接收信号寄存器为非空,然后从spi总线上接收一个字节
  while (SPI_I2S_GetFlagStatus(AFE4490_SPI, SPI_I2S_FLAG_RXNE) == RESET)
  {
    if((AFE4490Timeout--) == 0) return AFE4490_TIMEOUT_UserCallback();
  }
//需要返回一个字节
  return (uint8_t)SPI_I2S_ReceiveData(AFE4490_SPI);  

}
QQ截图20130710151546.jpg
回复

使用道具 举报

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