HAL库ADC+USART发送使用DMA遇到的问题点记录

 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传输和中断

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值