[STM32F3] STM32CubeMX生成硬件SPI1代码的问题

[复制链接]
416|0
 楼主| 比神乐 发表于 2023-5-5 20:03 | 显示全部楼层 |阅读模式
先贴两段代码,第一段芯片是STM32F303ZET6:
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url] SPI1 Initialization Function
  3.   * @param None
  4.   * @retval None
  5.   */
  6. static void MX_SPI1_Init(void)
  7. {

  8.   /* USER CODE BEGIN SPI1_Init 0 */

  9.   /* USER CODE END SPI1_Init 0 */

  10.   /* USER CODE BEGIN SPI1_Init 1 */

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

  32.   /* USER CODE END SPI1_Init 2 */

  33. }

  34. /**
  35.   * @brief GPIO Initialization Function
  36.   * @param None
  37.   * @retval None
  38.   */
  39. static void MX_GPIO_Init(void)
  40. {
  41.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  42. /* USER CODE BEGIN MX_GPIO_Init_1 */
  43. /* USER CODE END MX_GPIO_Init_1 */

  44.   /* GPIO Ports Clock Enable */
  45.   __HAL_RCC_GPIOA_CLK_ENABLE();
  46.   __HAL_RCC_GPIOD_CLK_ENABLE();

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

  49.   /*Configure GPIO pin Output Level */
  50.   HAL_GPIO_WritePin(RST_GPIO_Port, RST_Pin, GPIO_PIN_SET);

  51.   /*Configure GPIO pin : CS_Pin */
  52.   GPIO_InitStruct.Pin = CS_Pin;
  53.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  54.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  55.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  56.   HAL_GPIO_Init(CS_GPIO_Port, &GPIO_InitStruct);

  57.   /*Configure GPIO pin : RST_Pin */
  58.   GPIO_InitStruct.Pin = RST_Pin;
  59.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  60.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  61.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  62.   HAL_GPIO_Init(RST_GPIO_Port, &GPIO_InitStruct);

  63. /* USER CODE BEGIN MX_GPIO_Init_2 */
  64. /* USER CODE END MX_GPIO_Init_2 */
  65. }
STM32F103标准库
  1. /*******************************************************************************
  2. * 函数名  : SPI_Configuration
  3. * 描述    : W5500 SPI初始化配置(STM32 SPI1)
  4. * 输入    : 无
  5. * 输出    : 无
  6. * 返回值  : 无
  7. * 说明    : 无
  8. *******************************************************************************/
  9. void SPI_Configuration(void)
  10. {
  11.         GPIO_InitTypeDef         GPIO_InitStructure;
  12.         SPI_InitTypeDef           SPI_InitStructure;          

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

  14.         /* 初始化SCK、MISO、MOSI引脚 */
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  18.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  19.         GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);

  20.         /* 初始化CS引脚 */
  21.         GPIO_InitStructure.GPIO_Pin = W5500_SCS;
  22.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  23.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  24.         GPIO_Init(W5500_SCS_PORT, &GPIO_InitStructure);
  25.         GPIO_SetBits(W5500_SCS_PORT, W5500_SCS);

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

  37.         SPI_Cmd(SPI1,ENABLE);        //STM32使能SPI1
  38. }
我有两个疑问:
1.是不是STM32F303有SPI,I2C等功能时,不需要设置AFIO功能。
2.我看STM32标准库初始化硬件SPI时,把相应管教初始化为
GPIO_Mode_AF_PP,而自动生成的代码没有。是不需要初始化还是要自己添上?
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

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