1、DMA USART发送完成后,未关闭串口DMA会造成程序死机。
解决:需在串口DMA中断中关闭串口DMA,如下:
__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_FLAG_TC1); //清除传输完成标志
HAL_UART_DMAStop(&huart1); //传输完成以后关闭串口DMA,缺了这一句会死机
2、DMA USART发送字符串,只发送了部分字符串
printf("芯片flash的容量为: %dK \r\n", *(__IO uint16_t *)(0X1FFFF7E0));
HAL_UART_Transmit_DMA(&huart1,(uint8_t *) "66666666666666\r\n",strlen("66666666666666\r\n"));
解决:发送长度改为原来的2倍,原因暂未找到。
printf("芯片flash的容量为: %dK \r\n", *(__IO uint16_t *)(0X1FFFF7E0));
HAL_UART_Transmit_DMA(&huart1,(uint8_t *) "66666666666666\r\n",strlen("66666666666666\r\n")*2);
3、DMA ADC采集多组数据求均值,只获取到一次的采集数据
解决:存储数组改为二维数组,启动ADC转换和 DMA传输函数长度改为数组大小
uint16_t ADC_ConvertedValue[NUM][1]; // AD转换结果值
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&ADC_ConvertedValue,NUM); //启动AD转换并使能DMA传输和中断