不知道代码中变量的作用

问题遇到的现象和发生背景

这个代码的volatile uint8_t receive;是什么作用,receive = huart6.Instance->DR;这一句是什么意思

问题相关代码,请勿粘贴截图

void USART6_IRQHandler(void)
{

volatile uint8_t receive;
if(huart6.Instance->SR & UART_FLAG_RXNE)
{
    receive = huart6.Instance->DR;
    HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);
          HAL_GPIO_TogglePin(b_GPIO_Port, b_Pin);
          
}
else if(huart6.Instance->SR & UART_FLAG_IDLE)
{
    receive = huart6.Instance->DR;
    HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_RESET);
          HAL_GPIO_WritePin(b_GPIO_Port, b_Pin, GPIO_PIN_RESET);
}

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

receive是接收的数据缓冲
加一个volatile修饰符,使变量实时更新,加快数据访问的速度