新手入门
- 积分
- 8
- 金钱
- 8
- 注册时间
- 2019-11-18
- 在线时间
- 3 小时
|
8金钱
下面是我的接收部分代码:
void UART4_IRQHandler(void)
{
uint32_t tmp_flag = 0;
uint32_t temp;
HAL_UART_IRQHandler(&UART4_Handler); //调用HAL库中断处理公用函数
if(UART4== UART4_Handler.Instance)
{
tmp_flag =__HAL_UART_GET_FLAG(&UART4_Handler,UART_FLAG_IDLE); //获取IDLE标志位
if((tmp_flag != RESET))//idle标志被置位
{
REC_U4_FLAG = 0; // 接收完成标志置1
__HAL_UART_CLEAR_IDLEFLAG(&UART4_Handler); //清除标志位
HAL_UART_DMAStop(&UART4_Handler); //先停止DMA,暂停接收
temp = __HAL_DMA_GET_COUNTER(&UART4RxDMA_Handler);// 获取DMA未传输个数
RX_U4_Count = BUF4_LENGTH - temp ;//总数减去未传输个数,得到已接收数据的个数
printf("UART4:%3d|%3d|%3d|\r\n",RX_U4_Count,temp,BUF4_LENGTH);
if(RX_U4_Count == 4)
{
if(U4_BUF[0]== 'A')
{
LED_G_Toggle;
printf("GET\r\n");
}
printf("S\r\n");
}
else if(RX_U4_Count == 8)
{
// HAL_UART_Transmit(&UART3_Handler,USART4_BUF,8,50);
printf("B\r\n");
}
else if(RX_U4_Count == 9)
{
// HAL_UART_Transmit(&UART3_Handler,USART4_BUF,9,50);
printf("A\r\n");
}
// HAL_UART_Transmit(&UART3_Handler,USART4_BUF,9,50);//空闲状态查询
// if(USART4_BUF[3]==0X41 && USART4_BUF[7]==0X4F)
// {
// LED_G(0);
// }
REC_U4_FLAG = 1; // 接收完成标志置1
HAL_UART_Receive_DMA(&UART4_Handler,U4_BUF,BUF4_LENGTH); //打开DMA接收,指定接收缓存区和接收大小
}
}
}
每次接收完成我都重新打开DMA接收,但是有收到数据并且知道收到了多少,但是指定的接收数组里面没有,下面是调试图片:
|
-
这是发送的测试数据
-
这是接收的回传数据
|