进一步迭代优化统一管理
This commit is contained in:
218
HAL/Src/hal_i2c.c
Normal file
218
HAL/Src/hal_i2c.c
Normal file
@ -0,0 +1,218 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : hal_i2c.c
|
||||
* @brief : I2C hardware abstraction layer source file
|
||||
******************************************************************************
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#include "hal.h"
|
||||
#include "hal_i2c.h"
|
||||
|
||||
/**
|
||||
* @brief Initialize I2C hardware
|
||||
* @param config: I2C configuration structure
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_i2c_init(const hal_i2c_config_t *config) {
|
||||
if (config == NULL) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (config->instance >= HAL_I2C_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific I2C initialization */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 I2C initialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 I2C initialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 I2C initialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 I2C initialization */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Deinitialize I2C hardware
|
||||
* @param instance: I2C instance identifier
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_i2c_deinit(hal_i2c_instance_t instance) {
|
||||
if (instance >= HAL_I2C_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific I2C deinitialization */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 I2C deinitialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 I2C deinitialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 I2C deinitialization */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 I2C deinitialization */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Transmit data to I2C slave
|
||||
* @param instance: I2C instance identifier
|
||||
* @param dev_address: Slave device address
|
||||
* @param data: Pointer to data buffer
|
||||
* @param length: Data length in bytes
|
||||
* @param timeout: Timeout in milliseconds
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_i2c_master_transmit(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *data, uint16_t length, uint32_t timeout) {
|
||||
if (data == NULL || length == 0) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_I2C_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific I2C transmit implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 I2C transmit */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 I2C transmit */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 I2C transmit */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 I2C transmit */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Receive data from I2C slave
|
||||
* @param instance: I2C instance identifier
|
||||
* @param dev_address: Slave device address
|
||||
* @param data: Pointer to data buffer
|
||||
* @param length: Data length to receive in bytes
|
||||
* @param timeout: Timeout in milliseconds
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_i2c_master_receive(hal_i2c_instance_t instance, uint16_t dev_address, uint8_t *data, uint16_t length, uint32_t timeout) {
|
||||
if (data == NULL || length == 0) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_I2C_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific I2C receive implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 I2C receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 I2C receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 I2C receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 I2C receive */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Transmit and receive data from I2C slave
|
||||
* @param instance: I2C instance identifier
|
||||
* @param dev_address: Slave device address
|
||||
* @param tx_data: Pointer to transmit data buffer
|
||||
* @param tx_length: Transmit data length in bytes
|
||||
* @param rx_data: Pointer to receive data buffer
|
||||
* @param rx_length: Receive data length in bytes
|
||||
* @param timeout: Timeout in milliseconds
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_i2c_master_transmit_receive(hal_i2c_instance_t instance, uint16_t dev_address, const uint8_t *tx_data, uint16_t tx_length, uint8_t *rx_data, uint16_t rx_length, uint32_t timeout) {
|
||||
if (tx_data == NULL || rx_data == NULL || tx_length == 0 || rx_length == 0) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_I2C_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific I2C transmit and receive implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 I2C transmit and receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 I2C transmit and receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 I2C transmit and receive */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 I2C transmit and receive */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if I2C bus is ready
|
||||
* @param instance: I2C instance identifier
|
||||
* @param dev_address: Slave device address
|
||||
* @param trials: Number of trials
|
||||
* @param timeout: Timeout in milliseconds
|
||||
* @retval HAL status code
|
||||
*/
|
||||
hal_status_t hal_i2c_is_device_ready(hal_i2c_instance_t instance, uint16_t dev_address, uint32_t trials, uint32_t timeout) {
|
||||
if (instance >= HAL_I2C_INSTANCE_MAX) {
|
||||
return HAL_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific I2C device ready check implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
/* TODO: Implement STM32F1 I2C device ready check */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
/* TODO: Implement STM32F4 I2C device ready check */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
/* TODO: Implement STM32F7 I2C device ready check */
|
||||
return HAL_OK;
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
/* TODO: Implement STM32L4 I2C device ready check */
|
||||
return HAL_OK;
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_ERROR;
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user