对于DMA连续请求,程序将仅在DMA1_Channel1_IRQHandler中循环,而FreeRTOS线程未运行。
有人知道如何解决吗?
{
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_I2C2_Init();
MX_IWDG_Init();
MX_USART1_UART_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
uprintf("Before dma\n");
HAL_ADC_Start_DMA(&hadc1, adcBuffer, 2);
uprintf("After dma\n");
/* Call init function for freertos objects (in freertos.c) */
MX_FREERTOS_Init();
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
答案 0 :(得分:1)
听起来您的DMA通道具有比FreeRTOS任务(NVIC优先级)更高的优先级(NVIC优先级),并且正在使调度程序处于饥饿状态。要进行故障排除,请尝试将DMA通道设置为与FreeRTOS任务设置(NVIC优先级)匹配,或将FreeRTOS的优先级提高到比DMA高的水平。
将DMA设置为连续请求可能不是您的应用程序所需的配置,或者只是您想要的配置。