Skip to main content
Explorer
January 5, 2024
Question

Spi clock is not generated

  • January 5, 2024
  • 3 replies
  • 2341 views

Hello, 

I am trying to generate spi clock(100kz) in stm32g473,but desired output not getting in DSO .I tried to change  stm32cubemx configuration then i changed the user code then also not getting desired output.

Please help me what changes I needed to generate clock.

 

 Thank you in advance.

    This topic has been closed for replies.

    3 replies

    Graduate
    January 5, 2024

    It's impossible to suggest the changes without seeing the code. SPI clock is output only when you send the data. SPI will not output the clock signal unless you transmit something.

    Explorer
    January 6, 2024

     

     

    here is configuration i did in the stm32cubemx

    void MX_SPI1_Init(void)
    {

     

    hspi1.Instance = SPI1;
    hspi1.Init.Mode = SPI_MODE_MASTER;
    hspi1.Init.Direction = SPI_DIRECTION_2LINES;

    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
    hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
    hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
    hspi1.Init.NSS = SPI_NSS_SOFT;
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
    hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
    hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    hspi1.Init.CRCPolynomial = 7;
    hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
    hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
    if (HAL_SPI_Init(&hspi1) != HAL_OK)
    {
    Error_Handler();
    }

    }

    void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
    {

    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if(spiHandle->Instance==SPI1)
    {
    /* USER CODE BEGIN SPI1_MspInit 0 */

    /* USER CODE END SPI1_MspInit 0 */
    /* SPI1 clock enable */
    __HAL_RCC_SPI1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**SPI1 GPIO Configuration
    PA5 ------> SPI1_SCK
    PA6 ------> SPI1_MISO
    PA7 ------> SPI1_MOSI
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* USER CODE BEGIN SPI1_MspInit 1 */

    /* USER CODE END SPI1_MspInit 1 */
    }
    }

    void MX_GPIO_Init(void)
    {

    GPIO_InitTypeDef GPIO_InitStruct = {0};

    /* GPIO Ports Clock Enable */
    __HAL_RCC_GPIOF_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();

    /*Configure GPIO pin Output Level */
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);

    /*Configure GPIO pin : PA4 */
    GPIO_InitStruct.Pin = GPIO_PIN_4;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    }

    user code

    while (1)
    {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
    HAL_Delay(1000);
    HAL_SPI_Transmit(&hspi1,&data,1,HAL_MAX_DELAY);
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
    HAL_Delay(1000);
    }
    /* USER CODE END 3 */
    }

     

    Super User
    January 6, 2024

    Hi,

    Just to clarify: you send 1 byte every 2 seconds ;

    set data to something ? like : 0xAA , then you see some pulses on data line ?

    + 8 pulses on clk line ? ( every 2 seconds )

    Super User
    January 5, 2024

    Read out and check/post content of SPI and relevant GPIO registers.

    What hardware? You can check proper connection of SPI_SCK by setting given pin to GPIO Output and toggling "manually" (i.e. doing a basic "blinky").

    JW

    Explorer
    January 6, 2024

    yes i tried  this clock is toggling.

    Super User
    January 7, 2024

    Read out and check/post content of SPI and relevant GPIO registers.

    JW