We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi,
I'm working with B-L072Z-LRWAN1 platform and struggle to see a signal on SPI2.
My SPI2 is connected on an accelerometer. It is configured as follow:
void HW_IMU_SPI_Init( void ) { /*##-1- Configure the SPI peripheral */ /* Set the SPI parameters */ hspi2.Instance = SPI2; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; IMU_SPI_CLK_ENABLE(); if(HAL_SPI_Init( &hspi2) != HAL_OK) { /* Initialization Error */ Error_Handler(); } /*##-2- Configure the SPI GPIOs */ HW_IMU_SPI_IoInit( ); } void HW_IMU_SPI_IoInit( void ) { GPIO_InitTypeDef initStruct={0}; IMU_GPIO_CLK_ENABLE(); initStruct.Pin = IMU_SCLK_PIN | IMU_MISO_PIN | IMU_MOSI_PIN; initStruct.Mode =GPIO_MODE_AF_PP; initStruct.Pull =GPIO_NOPULL ; initStruct.Speed = GPIO_SPEED_HIGH; initStruct.Alternate= IMU_SPI2_AF ; HAL_GPIO_Init(GPIOB, &initStruct); initStruct.Mode = GPIO_MODE_OUTPUT_PP; initStruct.Pull = GPIO_NOPULL; HW_GPIO_Init( IMU_NSS_PORT, IMU_NSS_PIN, &initStruct ); HW_GPIO_Write ( IMU_NSS_PORT, IMU_NSS_PIN, 1 ); }
Systemclock is configured as follow:
void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitTypeDef RCC_OscInitStruct = {0}; /* Enable HSE Oscillator and Activate PLL with HSE as source */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSEState = RCC_HSE_OFF; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6; RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /* Set Voltage scale1 as MCU will run at 32MHz */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */ while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {}; /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */ RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { Error_Handler(); } }
Chip select is defined as GPIO. I can see it toggling.
I'm not quite sure what I'm missing here. Could anyone help?
Thank you
Hi Andy,
Yes I had a look on ST forum as well but couldn't find the answer. I tried different things.
Other SPI lines (PB15,PB14 and PB13) are defined as Alternate Function Push-Pull.
I even checked with code generator and had a look at what is done for SPI1 (connected to transceiver).