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主机模式有什么特别的地方吗?我应该怎么解决这个问题呢? |
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 嗎?
评分
查看全部评分
先说你说的第二点,我这个地方换成MASTER,程序根本就无法仿真,运行不了。至于第一点就更不知道是什么状态了
要不要從新建一個 project , 設定直接改成 master 試看看 ?
CS pin 最好查一些資料看 , 這支pin 沒用好 , SPI 完全不會通 , SPI 一開始 是 CS pin 要先正常運做 , 才有後續動作 , 尤其是 master 模式
评分
查看全部评分