| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #include "soft_usart.h"
- #include "common.h"
- #include "main.h"
- #include "system_init.h"
- #include "usart_data_handle.h"
- #include "string.h"
- #include "main_task.h"
- extern UART_HandleTypeDef huart1;
- uint8_t FMU_uart_buf[MAX_UART_BUF] = {0};
- /**
- * @file USER_UART_IRQHandler
- * @brief 串口中断处理
- * @param
- * @details
- * @author Zhang Sir
- **/
- void USER_UART_IRQHandler(UART_HandleTypeDef *huart)
- {
- uint32_t recv_count = 0;
- if (huart == &huart1)
- {
- if (RESET != __HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE))
- {
- __HAL_UART_CLEAR_IDLEFLAG(huart);
- HAL_UART_AbortReceive(huart);
- recv_count = MAX_UART_BUF - __HAL_DMA_GET_COUNTER(huart->hdmarx);
- rkfifo_in(&uart_rkfifo,FMU_uart_buf,recv_count);
-
- memset(FMU_uart_buf,0,MAX_UART_BUF);
- HAL_UART_Receive_DMA(huart, FMU_uart_buf, MAX_UART_BUF);
- rt_sem_release(&uart1_sem);
- }
- }
- }
- /**
- * @file HAL_UART_ErrorCallback
- * @brief uart错误中断回调函数
- * @param
- * @details
- * @author Zhang Sir
- **/
- void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
- {
- if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) //接收溢出检测
- {
- __HAL_UART_CLEAR_OREFLAG(huart);
- }
- if (__HAL_UART_GET_FLAG (huart, UART_FLAG_RXNE) != RESET)//接收数据
- {
- __HAL_UART_CLEAR_FLAG (huart, UART_FLAG_RXNE);
- }
- __HAL_UART_CLEAR_PEFLAG (huart);
- if (huart == &huart1)
- {
- HAL_UART_Receive_DMA(huart, FMU_uart_buf, MAX_UART_BUF);
- }
- }
- /**
- * @file usart1_send_msg
- * @brief 串口发送数据
- * @param
- * @details
- * @author Zhang Sir
- **/
- uint32_t uart2_send_delay_time = 0;
- void usart1_send_msg(uint8_t *data, uint8_t size)
- {
- // HAL_UART_Transmit_DMA(&huart1, data, size);
- // uart2_send_delay_time = HAL_GetTick();
- rkfifo_in(&send_uart_rkfifo,data,size);
- }
- uint8_t send_uart_buf[512] = {0};
- void send_uartfifo_msg(void)
- {
- uint16_t len = 0;
- if(uart_send_is_ok(USART_1) == true)
- {
- len = rkfifo_out(&send_uart_rkfifo, &send_uart_buf, 512);
- if(len > 0)
- {
- HAL_UART_Transmit_DMA(&huart1, send_uart_buf, len);
- uart2_send_delay_time = HAL_GetTick();
- }
- }
- }
- /**
- * @file uart_send_is_ok
- * @brief 检测串口是否可用
- * @param uart_num 串口号
- * @details
- * @author Zhang Sir
- **/
- bool uart_send_is_ok(uint8_t uart_num)
- {
- //设备升级不发送
- // if(radar_update_flag == true)
- // return false;
- if (uart_num == USART_1)
- {
- if (huart1.gState == HAL_UART_STATE_READY && (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) != RESET && __HAL_UART_GET_FLAG(&huart1, UART_FLAG_TXE) != RESET))
- {
- }
- else
- {
- return false;
- }
- //延迟1ms发送,防止如果是空闲中断接收,连续发送变成一包
- if(HAL_GetTick() - uart2_send_delay_time <= 1)
- {
- return false;
- }
- }
- return true;
- }
|