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

SPI配置有问题

[复制链接]
yllqabz 提问时间:2019-3-28 11:26 /
SPI_HandleTypeDef hspi2;

/* SPI2 init function */
void MX_SPI2_Init(void)
{
  hspi2.Instance               = SPI2;
  hspi2.Init.Mode              = SPI_MODE_SLAVE;//SPI_MODE_MASTER;//
  hspi2.Init.Direction         = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize          = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity       = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase          = SPI_PHASE_1EDGE;
  hspi2.Init.NSS               = SPI_NSS_SOFT;//SPI_NSS_HARD_OUTPUT;//SPI_NSS_HARD_INPUT;//
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi2.Init.FirstBit          = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode            = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial     = 7;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
}

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(spiHandle->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspInit 0 */

  /* USER CODE END SPI2_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI2_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
                GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

                GPIO_InitStruct.Pin = GPIO_PIN_15;
                HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
               
    GPIO_InitStruct.Pin = GPIO_PIN_14;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
               
                HAL_NVIC_SetPriority(SPI2_IRQn, 3, 0);
    HAL_NVIC_EnableIRQ(SPI2_IRQn);
  /* USER CODE BEGIN SPI2_MspInit 1 */

  /* USER CODE END SPI2_MspInit 1 */
  }
}

void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
{

  if(spiHandle->Instance==SPI2)
  {
  /* USER CODE BEGIN SPI2_MspDeInit 0 */

  /* USER CODE END SPI2_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_SPI2_CLK_DISABLE();

    /**SPI2 GPIO Configuration   
    PB12     ------> SPI2_NSS
    PB13     ------> SPI2_SCK
    PB14     ------> SPI2_MISO
    PB15     ------> SPI2_MOSI
    */
    HAL_GPIO_DeInit(GPIOB, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);

                HAL_NVIC_DisableIRQ(SPI2_IRQn);
  }
  /* USER CODE BEGIN SPI2_MspDeInit 1 */

  /* USER CODE END SPI2_MspDeInit 1 */
}

SPI配置如上所示,现在问题是配置成从机模式,芯片能正常运行,但是配置成主模式就无法运行了?请问STM32F103的SPI主机模式有什么特别的地方吗?我应该怎么解决这个问题呢?

收藏 评论3 发布时间:2019-3-28 11:26

举报

3个回答
jeffhe1 回答时间:2019-3-28 13:08:31
1:
hspi2.Init.NSS   = SPI_NSS_SOFT , 設置成 軟體控制 ,   PB12     ------> SPI2_NSS ,  那SPI 在讀寫的時候, 有下指令 , 主動把 CS PIN 拉 high / low 嗎?  
2:
  hspi2.Init.Mode              = SPI_MODE_SLAVE;//SPI_MODE_MASTER;//  , 這有改成 SPI_MODE_MASTER 嗎?

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

yllqabz 回答时间:2019-3-28 16:05:41
jeffhe1 发表于 2019-3-28 13:08
1:
hspi2.Init.NSS   = SPI_NSS_SOFT , 設置成 軟體控制 ,   PB12     ------> SPI2_NSS ,  那SPI 在讀寫的 ...

先说你说的第二点,我这个地方换成MASTER,程序根本就无法仿真,运行不了。至于第一点就更不知道是什么状态了
jeffhe1 回答时间:2019-3-28 17:08:00
那就整個設定有問題了

要不要從新建一個 project  , 設定直接改成 master 試看看 ?

CS pin 最好查一些資料看 , 這支pin 沒用好 , SPI 完全不會通 , SPI 一開始 是 CS pin 要先正常運做 , 才有後續動作 , 尤其是 master 模式

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版