进一步迭代优化统一管理
This commit is contained in:
275
HAL/Src/hal_can.c
Normal file
275
HAL/Src/hal_can.c
Normal file
@ -0,0 +1,275 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : hal_can.c
|
||||
* @brief : CAN hardware abstraction layer source file
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#include "hal.h"
|
||||
#include "hal_can.h"
|
||||
|
||||
/**
|
||||
* @brief Initialize CAN hardware
|
||||
* @param config: CAN configuration structure
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_init(const hal_can_config_t *config) {
|
||||
if (config == NULL) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (config->instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN initialization */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN initialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN initialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN initialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN initialization */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Deinitialize CAN hardware
|
||||
* @param instance: CAN instance identifier
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_deinit(hal_can_instance_t instance) {
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN deinitialization */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN deinitialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN deinitialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN deinitialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN deinitialization */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Start CAN peripheral
|
||||
* @param instance: CAN instance identifier
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_start(hal_can_instance_t instance) {
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN start implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN start */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN start */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN start */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN start */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stop CAN peripheral
|
||||
* @param instance: CAN instance identifier
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_stop(hal_can_instance_t instance) {
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN stop implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN stop */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN stop */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN stop */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN stop */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Send CAN message
|
||||
* @param instance: CAN instance identifier
|
||||
* @param message: Pointer to CAN message structure
|
||||
* @param timeout: Timeout in milliseconds
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_send(hal_can_instance_t instance, const hal_can_message_t *message, uint32_t timeout) {
|
||||
if (message == NULL) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN send implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN send */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN send */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN send */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN send */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Receive CAN message
|
||||
* @param instance: CAN instance identifier
|
||||
* @param fifo: FIFO number (0 or 1)
|
||||
* @param message: Pointer to CAN message structure
|
||||
* @param timeout: Timeout in milliseconds
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_receive(hal_can_instance_t instance, uint8_t fifo, hal_can_message_t *message, uint32_t timeout) {
|
||||
if (message == NULL || fifo > 1) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN receive implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN receive */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get CAN receive FIFO message pending count
|
||||
* @param instance: CAN instance identifier
|
||||
* @param fifo: FIFO number (0 or 1)
|
||||
* @param count: Pointer to store pending message count
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_get_pending_count(hal_can_instance_t instance, uint8_t fifo, uint8_t *count) {
|
||||
if (count == NULL || fifo > 1) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN get pending count implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN get pending count */
|
||||
*count = 0;
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN get pending count */
|
||||
*count = 0;
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN get pending count */
|
||||
*count = 0;
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN get pending count */
|
||||
*count = 0;
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configure CAN filter
|
||||
* @param instance: CAN instance identifier
|
||||
* @param filter_config: Pointer to CAN filter configuration structure
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_can_configure_filter(hal_can_instance_t instance, const hal_can_filter_config_t *filter_config) {
|
||||
if (filter_config == NULL) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_CAN_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific CAN filter configuration implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 CAN filter configuration */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 CAN filter configuration */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 CAN filter configuration */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 CAN filter configuration */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user