 
        
        
    | 请问各位,我使用CubeMX生成STM32F103C8T6的DMA ADC代码,工程配置请看附件,我运行如下代码为什么无效: /* USER CODE BEGIN Includes */ #include "main.h" #include "stdio.h" uint32_t ADC_Value=0; int main(void) { HAL_Init(); SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC1_Init(); MX_DMA_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ printf("---211220---\r\n"); HAL_ADC_Start_DMA(&hadc1,&ADC_Value,1); printf("Value=%d\r\n",ADC_Value); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) {} } 输出结果总是“0”。 | 
串口输出的ADC值
 
 
ADC-CubeMX.rar
下载2.6 KB, 下载次数: 4, 下载积分: ST金币 -1
配置
//STM32H7A3VGT6 QSPI的DMA方式无法正常工作
STM32H7A3VGTA QSPI读W25Q128J DMA模式不能工作
用F103的串口能跑多快?
F103和G474的180°移相區別
怎么将keil工程更换为vscode工具链?
ST25R3911B无法读取到标签,MCU采用的是STM32F103C8
STM32F103 PA0 EXIT 上拉电阻不能太大
HAL_TIM_IC_Start_DMA的回调函数是HAL_TIM_IC_CaptureCpltCallback吗?为什么进不去?
低速晶振不起振问题
使用STM32F1能实现USB和fatfs同时访问SD卡吗
 微信公众号
                微信公众号
             手机版
                手机版
             
		
	
	
	
弄个延迟试一试
一定要把MX_DMA_Init()初始化放在ADC1初始化前面,因为ADC初始化最后会调用ADC_MSP,此时会设置DMA的参数,由于DMA的时钟还没有开启,DMA的设置是无效的,可以说是cubemx的bug, 除非要进入到高级页面,刻意把初始化的顺序排正确,否则默认的排序是有问题的.
现在MX_DMA_Init()放在ADC前面初始化了,和之前是有变化,可是值好像一直不变。没有随着电压变化,还有可能是哪里的问题?
谢谢,我在HAL_ADC_Start_DMA()后面加了HAL_Delay(500),没效果。
楼主,请确定配置采集的IO口电压是多少。最好描述一下采集的IO口,还有ADC的带贴一下。仿真枪模式下,HAL_ADC_ConvCpltCallback这个是采集完成后调用的回调函数,是否可以进入?
通过仿真,发现ADC的DR寄存器是有变化的,但是DMA寄存器没变化。
楼主,您好。删除AN1的配置试试,另外看一下DMA是否能够产生中断,DMA和ADC的寄存器检查一下。
ok.
还要注意DMA初始化顺序要先于外设配置,这个你可能知道了,还是提醒下。
另外,你如果是调用HAL_ADC_Start_DMA(&hadc1, ADCData, 1);函数的话,ADCdata的数据宽度定义为32位。那么在CubeMx配置DMA的那个地方,Memory宽度选择为WORD。你不妨验证之。