diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.c b/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.c index eadf5eb4f3..fae3841a6f 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.c @@ -209,11 +209,12 @@ int rt_hw_softspi_init(void) for (int i = 0; i < obj_num; i++) { - stm32_soft_spi_ops.data = (void *)&soft_spi_config[i]; + memcpy(&spi_obj[i].ops, &stm32_soft_spi_ops, sizeof(struct rt_spi_bit_ops)); + spi_obj[i].ops.data = (void *)&soft_spi_config[i]; spi_obj[i].spi.ops = &stm32_soft_spi_ops; spi_obj[i].cfg = (void *)&soft_spi_config[i]; stm32_spi_gpio_init(&spi_obj[i]); - result = rt_spi_bit_add_bus(&spi_obj[i].spi, soft_spi_config[i].bus_name, &stm32_soft_spi_ops); + result = rt_spi_bit_add_bus(&spi_obj[i].spi, soft_spi_config[i].bus_name, &spi_obj[i].ops); RT_ASSERT(result == RT_EOK); } diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.h b/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.h index 9f70d61562..d6415875e8 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.h +++ b/bsp/stm32/libraries/HAL_Drivers/drv_soft_spi.h @@ -28,6 +28,7 @@ struct stm32_soft_spi_config struct stm32_soft_spi { struct rt_spi_bit_obj spi; + struct rt_spi_bit_ops ops; struct stm32_soft_spi_config *cfg; };