mình code DMA thế này mà ko biết vì sao nó ko chạy: đoạn code này khởi rạo DMA theo chế độ vòng tròn để chuyển dữ liệu nhận được từ UART vào rx, sau đó liên tục kiểm tra rx[0] ==‘a’ không, nếu bằng thì nháy led và gửi lại chuỗi hello về máy tính
int main(void)
{
/* USER CODE BEGIN 1 */
uint8_t rx[10],tx[] = "hello world\r\n";
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LPUART1_UART_Init();
MX_DMA_Init();
/* USER CODE BEGIN 2 */
//HAL_UART_Receive_IT(&hlpuart1,tx,1);
HAL_UART_Receive_DMA(&hlpuart1,rx,4);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//HAL_UART_Transmit(&hlpuart1,tx,13,1000);
//HAL_UART_Receive(&hlpuart1, rx, 1, 1000);
//HAL_UART_Receive_DMA(&hlpuart1,rx,1);
if(rx[0]=='a')
{
HAL_GPIO_TogglePin(LED_0_GPIO_Port,LED_0_Pin);
rx[0] = 0;
HAL_UART_Transmit(&hlpuart1,tx,13,1000);
//HAL_GPIO_TogglePin(
}
//HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}