进一步迭代优化统一管理
This commit is contained in:
@ -12,8 +12,9 @@
|
||||
|
||||
/**
|
||||
* @brief Initialize UART hardware
|
||||
* @retval HAL status code
|
||||
*/
|
||||
void hal_uart_init(void) {
|
||||
hal_ret_t hal_uart_init(void) {
|
||||
/* Call architecture specific UART initialization */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
hal_stm32f1_uart_init();
|
||||
@ -25,14 +26,25 @@ void hal_uart_init(void) {
|
||||
hal_stm32l4_uart_init();
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_RET_ERROR;
|
||||
#endif
|
||||
return HAL_RET_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Configure UART parameters for specific instance
|
||||
* @param config: UART configuration structure
|
||||
* @retval HAL status code
|
||||
*/
|
||||
void hal_uart_config(const hal_uart_config_t *config) {
|
||||
hal_ret_t hal_uart_config(const hal_uart_config_t *config) {
|
||||
if (config == NULL) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (config->instance >= HAL_UART_INSTANCE_MAX) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific UART configuration */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
hal_stm32f1_uart_config(config);
|
||||
@ -44,7 +56,9 @@ void hal_uart_config(const hal_uart_config_t *config) {
|
||||
hal_stm32l4_uart_config(config);
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_RET_ERROR;
|
||||
#endif
|
||||
return HAL_RET_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,8 +66,17 @@ void hal_uart_config(const hal_uart_config_t *config) {
|
||||
* @param instance: UART instance identifier
|
||||
* @param data: Pointer to data buffer
|
||||
* @param length: Data length in bytes
|
||||
* @retval HAL status code
|
||||
*/
|
||||
void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t length) {
|
||||
hal_ret_t hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t length) {
|
||||
if (data == NULL || length == 0) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_UART_INSTANCE_MAX) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific UART send implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
hal_stm32f1_uart_send(instance, data, length);
|
||||
@ -65,7 +88,9 @@ void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t len
|
||||
hal_stm32l4_uart_send(instance, data, length);
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return HAL_RET_ERROR;
|
||||
#endif
|
||||
return HAL_RET_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -73,62 +98,92 @@ void hal_uart_send(hal_uart_instance_t instance, const uint8_t *data, size_t len
|
||||
* @param instance: UART instance identifier
|
||||
* @param data: Pointer to data buffer
|
||||
* @param length: Data length to receive in bytes
|
||||
* @retval Number of bytes received
|
||||
* @param received: Pointer to store number of bytes received
|
||||
* @retval HAL status code
|
||||
*/
|
||||
size_t hal_uart_receive(hal_uart_instance_t instance, uint8_t *data, size_t length) {
|
||||
hal_ret_t hal_uart_receive(hal_uart_instance_t instance, uint8_t *data, size_t length, size_t *received) {
|
||||
if (data == NULL || received == NULL || length == 0) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_UART_INSTANCE_MAX) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific UART receive implementation */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
return hal_stm32f1_uart_receive(instance, data, length);
|
||||
*received = hal_stm32f1_uart_receive(instance, data, length);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
return hal_stm32f4_uart_receive(instance, data, length);
|
||||
*received = hal_stm32f4_uart_receive(instance, data, length);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
return hal_stm32f7_uart_receive(instance, data, length);
|
||||
*received = hal_stm32f7_uart_receive(instance, data, length);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
return hal_stm32l4_uart_receive(instance, data, length);
|
||||
*received = hal_stm32l4_uart_receive(instance, data, length);
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return 0;
|
||||
return HAL_RET_ERROR;
|
||||
#endif
|
||||
return HAL_RET_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if specific UART instance is ready to send
|
||||
* @param instance: UART instance identifier
|
||||
* @retval 1 if ready, 0 otherwise
|
||||
* @param ready: Pointer to store ready status (1 if ready, 0 otherwise)
|
||||
* @retval HAL status code
|
||||
*/
|
||||
uint8_t hal_uart_is_tx_ready(hal_uart_instance_t instance) {
|
||||
hal_ret_t hal_uart_is_tx_ready(hal_uart_instance_t instance, uint8_t *ready) {
|
||||
if (ready == NULL) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_UART_INSTANCE_MAX) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific UART TX ready check */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
return hal_stm32f1_uart_is_tx_ready(instance);
|
||||
*ready = hal_stm32f1_uart_is_tx_ready(instance);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
return hal_stm32f4_uart_is_tx_ready(instance);
|
||||
*ready = hal_stm32f4_uart_is_tx_ready(instance);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
return hal_stm32f7_uart_is_tx_ready(instance);
|
||||
*ready = hal_stm32f7_uart_is_tx_ready(instance);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
return hal_stm32l4_uart_is_tx_ready(instance);
|
||||
*ready = hal_stm32l4_uart_is_tx_ready(instance);
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return 0;
|
||||
return HAL_RET_ERROR;
|
||||
#endif
|
||||
return HAL_RET_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if specific UART instance has data to receive
|
||||
* @param instance: UART instance identifier
|
||||
* @retval 1 if data available, 0 otherwise
|
||||
* @param ready: Pointer to store ready status (1 if data available, 0 otherwise)
|
||||
* @retval HAL status code
|
||||
*/
|
||||
uint8_t hal_uart_is_rx_ready(hal_uart_instance_t instance) {
|
||||
hal_ret_t hal_uart_is_rx_ready(hal_uart_instance_t instance, uint8_t *ready) {
|
||||
if (ready == NULL) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
if (instance >= HAL_UART_INSTANCE_MAX) {
|
||||
return HAL_RET_INVALID_PARAM;
|
||||
}
|
||||
|
||||
/* Call architecture specific UART RX ready check */
|
||||
#if HAL_TARGET_ARCH == HAL_ARCH_STM32F1
|
||||
return hal_stm32f1_uart_is_rx_ready(instance);
|
||||
*ready = hal_stm32f1_uart_is_rx_ready(instance);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F4
|
||||
return hal_stm32f4_uart_is_rx_ready(instance);
|
||||
*ready = hal_stm32f4_uart_is_rx_ready(instance);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32F7
|
||||
return hal_stm32f7_uart_is_rx_ready(instance);
|
||||
*ready = hal_stm32f7_uart_is_rx_ready(instance);
|
||||
#elif HAL_TARGET_ARCH == HAL_ARCH_STM32L4
|
||||
return hal_stm32l4_uart_is_rx_ready(instance);
|
||||
*ready = hal_stm32l4_uart_is_rx_ready(instance);
|
||||
#else
|
||||
#error "Unsupported HAL architecture"
|
||||
return 0;
|
||||
return HAL_RET_ERROR;
|
||||
#endif
|
||||
return HAL_RET_OK;
|
||||
}
|
||||
Reference in New Issue
Block a user