From 71c2e83a7acd276e93788dae9548239046cfc044 Mon Sep 17 00:00:00 2001 From: Robofish <1683502971@qq.com> Date: Fri, 8 Aug 2025 00:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E9=99=80=E8=9E=BA?= =?UTF-8?q?=E4=BB=AA=EF=BC=8C=E4=B9=9F=E4=BF=AE=E5=A4=8D=E4=BA=86gpio?= =?UTF-8?q?=E5=92=8Cspi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 ++- assets/User_code/bsp/gpio.c | 6 +++++- assets/User_code/bsp/gpio.h | 2 +- assets/User_code/bsp/spi.c | 14 ++++++++------ assets/User_code/device/bmi088.c | 19 ++++++++----------- 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3778a0b..d8ea43e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,6 +8,7 @@ "string_view": "c", "vector": "c", "can.h": "c", - "device.h": "c" + "device.h": "c", + "gpio.h": "c" } } \ No newline at end of file diff --git a/assets/User_code/bsp/gpio.c b/assets/User_code/bsp/gpio.c index 59acc4f..5001f39 100644 --- a/assets/User_code/bsp/gpio.c +++ b/assets/User_code/bsp/gpio.c @@ -31,9 +31,13 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { } /* Exported functions ------------------------------------------------------- */ -int8_t BSP_GPIO_RegisterCallback(uint16_t pin, void (*callback)(void)) { +int8_t BSP_GPIO_RegisterCallback(BSP_GPIO_t gpio, void (*callback)(void)) { if (callback == NULL) return BSP_ERR_NULL; + if (gpio >= BSP_GPIO_NUM) return BSP_ERR; + // 从GPIO映射中获取对应的pin值 + uint16_t pin = GPIO_Map[gpio].pin; + for (uint8_t i = 0; i < 16; i++) { if (pin & (1 << i)) { GPIO_Callback[i] = callback; diff --git a/assets/User_code/bsp/gpio.h b/assets/User_code/bsp/gpio.h index d7e4ec1..75027f1 100644 --- a/assets/User_code/bsp/gpio.h +++ b/assets/User_code/bsp/gpio.h @@ -20,7 +20,7 @@ typedef enum { } BSP_GPIO_t; /* Exported functions prototypes -------------------------------------------- */ -int8_t BSP_GPIO_RegisterCallback(uint16_t pin, void (*callback)(void)); +int8_t BSP_GPIO_RegisterCallback(BSP_GPIO_t gpio, void (*callback)(void)); int8_t BSP_GPIO_EnableIRQ(BSP_GPIO_t gpio); int8_t BSP_GPIO_DisableIRQ(BSP_GPIO_t gpio); diff --git a/assets/User_code/bsp/spi.c b/assets/User_code/bsp/spi.c index 26474cf..b4701de 100644 --- a/assets/User_code/bsp/spi.c +++ b/assets/User_code/bsp/spi.c @@ -1,6 +1,6 @@ /* Includes ----------------------------------------------------------------- */ #include -#include "bsp\spi.h" +#include "bsp/spi.h" /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ @@ -10,7 +10,8 @@ static void (*SPI_Callback[BSP_SPI_NUM][BSP_SPI_CB_NUM])(void); /* Private function -------------------------------------------------------- */ static BSP_SPI_t SPI_Get(SPI_HandleTypeDef *hspi) { -/* AUTO GENERATED SPI_GET */ + if (hspi->Instance == SPI1) + return BSP_SPI_BMI088; else return BSP_SPI_ERR; } @@ -83,7 +84,8 @@ void HAL_SPI_AbortCpltCallback(SPI_HandleTypeDef *hspi) { /* Exported functions ------------------------------------------------------- */ SPI_HandleTypeDef *BSP_SPI_GetHandle(BSP_SPI_t spi) { switch (spi) { -/* AUTO GENERATED BSP_SPI_GET_HANDLE */ + case BSP_SPI_BMI088: + return &hspi1; default: return NULL; } @@ -104,7 +106,7 @@ int8_t BSP_SPI_Transmit(BSP_SPI_t spi, uint8_t *data, uint16_t size, bool dma) { if (dma) { return HAL_SPI_Transmit_DMA(hspi, data, size)!= HAL_OK;; } else { - return HAL_SPI_Transmit_IT(hspi, data, size)!= HAL_OK;; + return HAL_SPI_Transmit(hspi, data, size, 20)!= HAL_OK;; } } @@ -116,7 +118,7 @@ int8_t BSP_SPI_Receive(BSP_SPI_t spi, uint8_t *data, uint16_t size, bool dma) { if (dma) { return HAL_SPI_Receive_DMA(hspi, data, size)!= HAL_OK;; } else { - return HAL_SPI_Receive_IT(hspi, data, size)!= HAL_OK;; + return HAL_SPI_Receive(hspi, data, size, 20)!= HAL_OK;; } } @@ -129,7 +131,7 @@ int8_t BSP_SPI_TransmitReceive(BSP_SPI_t spi, uint8_t *txData, uint8_t *rxData, if (dma) { return HAL_SPI_TransmitReceive_DMA(hspi, txData, rxData, size)!= HAL_OK;; } else { - return HAL_SPI_TransmitReceive_IT(hspi, txData, rxData, size)!= HAL_OK;; + return HAL_SPI_TransmitReceive(hspi, txData, rxData, size, 20)!= HAL_OK;; } } diff --git a/assets/User_code/device/bmi088.c b/assets/User_code/device/bmi088.c index e9c083d..599ff39 100644 --- a/assets/User_code/device/bmi088.c +++ b/assets/User_code/device/bmi088.c @@ -103,7 +103,7 @@ static void BMI_WriteSingle(BMI_Device_t dv, uint8_t reg, uint8_t data) { break; } - HAL_SPI_Transmit(BSP_SPI_GetHandle(BSP_SPI_BMI088), buffer, 2u, 20u); + BSP_SPI_Transmit(BSP_SPI_BMI088, buffer, 2u, false); switch (dv) { case BMI_ACCL: @@ -128,8 +128,8 @@ static uint8_t BMI_ReadSingle(BMI_Device_t dv, uint8_t reg) { break; } buffer[0] = (uint8_t)(reg | 0x80); - HAL_SPI_Transmit(BSP_SPI_GetHandle(BSP_SPI_BMI088), buffer, 1u, 20u); - HAL_SPI_Receive(BSP_SPI_GetHandle(BSP_SPI_BMI088), buffer, 2u, 20u); + BSP_SPI_Transmit(BSP_SPI_BMI088, buffer, 1u, false); + BSP_SPI_Receive(BSP_SPI_BMI088, buffer, 2u, false); switch (dv) { case BMI_ACCL: @@ -155,16 +155,16 @@ static void BMI_Read(BMI_Device_t dv, uint8_t reg, uint8_t *data, uint8_t len) { break; } buffer[0] = (uint8_t)(reg | 0x80); - HAL_SPI_Transmit(BSP_SPI_GetHandle(BSP_SPI_BMI088), buffer, 1u, 20u); - HAL_SPI_Receive_DMA(BSP_SPI_GetHandle(BSP_SPI_BMI088), data, len); + BSP_SPI_Transmit(BSP_SPI_BMI088, buffer, 1u, false); + BSP_SPI_Receive(BSP_SPI_BMI088, data, len, true); } static void BMI088_RxCpltCallback(void) { - if (HAL_GPIO_ReadPin(ACCL_CS_GPIO_Port, ACCL_CS_Pin) == GPIO_PIN_RESET) { + if (BSP_GPIO_ReadPin(BSP_GPIO_ACCL_CS) == GPIO_PIN_RESET) { BMI088_ACCL_NSS_SET(); osThreadFlagsSet(thread_alert, SIGNAL_BMI088_ACCL_RAW_REDY); } - if (HAL_GPIO_ReadPin(GYRO_CS_GPIO_Port, GYRO_CS_Pin) == GPIO_PIN_RESET) { + if (BSP_GPIO_ReadPin(BSP_GPIO_GYRO_CS) == GPIO_PIN_RESET) { BMI088_GYRO_NSS_SET(); osThreadFlagsSet(thread_alert, SIGNAL_BMI088_GYRO_RAW_REDY); } @@ -205,10 +205,9 @@ int8_t BMI088_Init(BMI088_t *bmi088, const BMI088_Cali_t *cali) { BSP_SPI_RegisterCallback(BSP_SPI_BMI088, BSP_SPI_RX_CPLT_CB, BMI088_RxCpltCallback); - // BSP_GPIO_RegisterCallback(ACCL_INT_Pin, BMI088_AcclIntCallback); - // BSP_GPIO_RegisterCallback(GYRO_INT_Pin, BMI088_GyroIntCallback); BSP_GPIO_RegisterCallback(BSP_GPIO_ACCL_INT, BMI088_AcclIntCallback); BSP_GPIO_RegisterCallback(BSP_GPIO_GYRO_INT, BMI088_GyroIntCallback); + /* Accl init. */ /* Filter setting: Normal. */ /* ODR: 0xAB: 800Hz. 0xAA: 400Hz. 0xA9: 200Hz. 0xA8: 100Hz. 0xA6: 25Hz. */ @@ -248,8 +247,6 @@ int8_t BMI088_Init(BMI088_t *bmi088, const BMI088_Cali_t *cali) { inited = true; - // BSP_GPIO_EnableIRQ(ACCL_INT_Pin); - // BSP_GPIO_EnableIRQ(GYRO_INT_Pin); BSP_GPIO_EnableIRQ(BSP_GPIO_ACCL_INT); BSP_GPIO_EnableIRQ(BSP_GPIO_GYRO_INT); return DEVICE_OK;