[STM32F3] 用STM32CubeMX生成的SPI初始化代码的问题

[复制链接]
556|0
 楼主| 比神乐 发表于 2023-5-2 11:40 | 显示全部楼层 |阅读模式
我前段时间买了个SPI接口的网口模块,有STM32F103例程,初始化如下:
  1. GPIO_InitTypeDef         GPIO_InitStructure;
  2.         SPI_InitTypeDef           SPI_InitStructure;          

  3.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE);       

  4.         /* 初始化SCK、MISO、MOSI引脚 */
  5.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  6.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  8.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  9.         GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

  10.         /* 初始化CS引脚 */
  11.         GPIO_InitStructure.GPIO_Pin = W5500_SCS;
  12.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  14.         GPIO_Init(W5500_SCS_PORT, &GPIO_InitStructure);
  15.         GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);

  16.         /* 初始化配置STM32 SPI1 */
  17.         SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;        //SPI设置为双线双向全双工
  18.         SPI_InitStructure.SPI_Mode=SPI_Mode_Master;                                                        //设置为主SPI
  19.         SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;                                                //SPI发送接收8位帧结构
  20.         SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;                                                        //时钟悬空低
  21.         SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;                                                        //数据捕获于第1个时钟沿
  22.         SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;                                                                //NSS由外部管脚管理
  23.         SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_2;        //波特率预分频值为2
  24.         SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;                                        //数据传输从MSB位开始
  25.         SPI_InitStructure.SPI_CRCPolynomial=7;                                                                //CRC多项式为7
  26.         SPI_Init(SPI1,&SPI_InitStructure);                                                                        //根据SPI_InitStruct中指定的参数初始化外设SPI1寄存器

  27.         SPI_Cmd(SPI1,ENABLE);        //STM32使能SPI1
用STM32CubeMX生成的STM32F303的SPI代码如下:
  1. static void MX_SPI4_Init(void)
  2. {

  3.   /* USER CODE BEGIN SPI4_Init 0 */

  4.   /* USER CODE END SPI4_Init 0 */

  5.   /* USER CODE BEGIN SPI4_Init 1 */

  6.   /* USER CODE END SPI4_Init 1 */
  7.   /* SPI4 parameter configuration*/
  8.   hspi4.Instance = SPI4;
  9.   hspi4.Init.Mode = SPI_MODE_MASTER;
  10.   hspi4.Init.Direction = SPI_DIRECTION_2LINES;
  11.   hspi4.Init.DataSize = SPI_DATASIZE_8BIT;
  12.   hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
  13.   hspi4.Init.CLKPhase = SPI_PHASE_1EDGE;
  14.   hspi4.Init.NSS = SPI_NSS_SOFT;
  15.   hspi4.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  16.   hspi4.Init.FirstBit = SPI_FIRSTBIT_MSB;
  17.   hspi4.Init.TIMode = SPI_TIMODE_DISABLE;
  18.   hspi4.Init.CRCCalculation = SPI_CRCCALCULATION_ENABLE;
  19.        
  20.   hspi4.Init.CRCPolynomial = 7;
  21.   hspi4.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  22.        
  23.   hspi4.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
  24.   if (HAL_SPI_Init(&hspi4) != HAL_OK)
  25.   {
  26.     Error_Handler();
  27.   }
  28.   /* USER CODE BEGIN SPI4_Init 2 */

  29.   /* USER CODE END SPI4_Init 2 */

  30. }
  31. static void MX_GPIO_Init(void)
  32. {
  33.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  34. /* USER CODE BEGIN MX_GPIO_Init_1 */
  35. /* USER CODE END MX_GPIO_Init_1 */
  36.        
  37.         __HAL_RCC_SPI4_CLK_ENABLE();
  38.   /* GPIO Ports Clock Enable */
  39.   __HAL_RCC_GPIOE_CLK_ENABLE();
  40.   
  41.   __HAL_RCC_GPIOA_CLK_ENABLE();
  42.         __HAL_RCC_GPIOB_CLK_ENABLE();
  43.         __HAL_RCC_GPIOD_CLK_ENABLE();
  44.   /*Configure GPIO pin Output Level */
  45.   HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET);

  46.   /*Configure GPIO pin Output Level */
  47.   HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);

  48.   /*Configure GPIO pin : RST_Pin */
  49.   GPIO_InitStruct.Pin = RST_Pin;
  50.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  51.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  52.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  53.   HAL_GPIO_Init(RST_GPIO_Port, &GPIO_InitStruct);

  54.   /*Configure GPIO pin : CS_Pin */
  55.   GPIO_InitStruct.Pin = CS_Pin;
  56.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  57.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  58.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  59.   HAL_GPIO_Init(CS_GPIO_Port, &GPIO_InitStruct);
  60.        
  61.         GPIO_InitStruct.Pin = LED_Pin;
  62.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  63.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  64.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  65.   HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
  66.        
  67.         GPIO_InitStruct.Pin = GPIO_PIN_2  |GPIO_PIN_5  | GPIO_PIN_6;
  68.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  69.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  70.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  71.   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  72.        
  73.        
  74. //        GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6;
  75. //  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  76. //  GPIO_InitStruct.Pull = GPIO_NOPULL;
  77. //  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  78. //  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  79. /* USER CODE BEGIN MX_GPIO_Init_2 */
  80. /* USER CODE END MX_GPIO_Init_2 */
  81. }
大神看看,初始化有没有错误?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部