八十五:我现在串口常用的一种接收数据方式(DMA)

 

 

HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx1_buf, sizeof(rx1_buf));//再次开启接收

#define BUFFERSIZE 255 //可接收的最大数据量
extern uint8_t rx1_buf[BUFFERSIZE];//串口1DMA缓存数组
extern uint16_t rx1_size;//串口1DMA数组长度

 

 uint8_t rx1_buf[] = {0};//串口1DMA缓存数组
 uint16_t rx1_size = 0;//串口1DMA数组长度
uint8_t i=0;
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)//串口DMA数据接收回调
{
    if (huart == &huart1) {//串口1中断,处理屏幕数据
        __HAL_UART_CLEAR_IDLEFLAG(&huart1);//清除中断标志
     HAL_UART_DMAStop(&huart1);// 暂停DMA接收数据 rx1_buf
     if (Size >= sizeof(rx1_buf))//sizeof返回数组长度
Size = sizeof(rx1_buf) – 1;
         rx1_size = Size; // 接收数据长度
         /*把接收的数据进行判断(速度/温度)*/
        if(rx1_buf[0] == 0x55)
        {
//判断是速度,串口3发送数据
   MotorSpeed();
        }
if(rx1_buf[0] == 0x05)
        {
//判断是温度,串口2发送数据
TempErature();
//osDelay(100);
        }
         HAL_UARTEx_ReceiveToIdle_DMA(&huart1,rx1_buf, sizeof(rx1_buf));//再次开启接收
   }
}

 

发送

 

 

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注