|
两个单片机使用串口进行数据交互,一个stm32f105(使用串口4,uart4),一个stm32h723vgt6(使用串口7,uart7)
f105发送数据,h7这个单片机每次在接收数据的一半触发中断,导致接收的数据被截断了。
但是单独使用usb转串口测试h7的收发都是没问题的。
下面是代码,有哪个大佬帮我瞅一眼感激不尽!!
__ALIGNED(32) uint8_t g_U7RxBuffer[U7_RX_SIZE];
__ALIGNED(32) uint8_t g_U7TxBuffer[U7_TX_SIZE];
uint8_t __IO g_U7RxCplt = 0; /* 未被DMA使用 */
uint8_t __IO g_U7RxSize = 0; /* 未被DMA使用 */
void AppUART7_Init(void)
{
// 1.打开空闲接收中断
HAL_UARTEx_ReceiveToIdle_DMA(&huart7, g_U7RxBuffer, U7_RX_SIZE*2);
}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
/* HAL_UART_RECEPTION_TOIDLE 说明是DMA接收完成,或者半传输完成 */
if(huart->Instance == UART7)
{
SCB_InvalidateDCache_by_Addr((uint32_t *)g_U7RxBuffer, U7_RX_SIZE*2);
if (Size <= U7_RX_SIZE)
{
LOG_INFO(2,"\r\n data_recv: %s Size = %d\r\n", g_U7RxBuffer,Size);
g_U7RxCplt = 1;
g_U7RxSize = Size;
HAL_UARTEx_ReceiveToIdle_DMA(huart, g_U7RxBuffer, U7_RX_SIZE*2); // 接收完毕后重启
}
else // 接收数据长度大于BUFF_SIZE,错误处理
{
HAL_UARTEx_ReceiveToIdle_DMA(huart, g_U7RxBuffer, U7_RX_SIZE*2); // 接收完毕后重启
memset(g_U7RxBuffer, 0, U7_RX_SIZE);
}
}
}
下面是中断服务函数
void UART7_IRQHandler(void)
{
/* USER CODE BEGIN UART7_IRQn 0 */
/* USER CODE END UART7_IRQn 0 */
HAL_UART_IRQHandler(&huart7);
/* USER CODE BEGIN UART7_IRQn 1 */
HAL_UARTEx_ReceiveToIdle_DMA(&huart7, g_U7RxBuffer, U7_RX_SIZE*2);
/* USER CODE END UART7_IRQn 1 */
}
|
|