如题,开了两个ADC都是单通道,定义了一个数组adc_data[]来接收DMA的输出数据。...
if (HAL_ADC_Start_DMA(&ADC1_Handler,(u32*)&adc_data[0],1) != HAL_OK)
{
while(1);
}
if (HAL_ADC_Start_DMA(&ADC2_Handler,(u32*)&adc_data[1],1) != HAL_OK)
{
while(1);
}
...
然后配置DMA、ADC代码就不放了,严格按照STM32CubeH7中的例程写的。。
然后开了一个定时器timer,每隔0.01s中断一次,去读取adc_data[]中的数据,即当前ADC采样值,并转换成电压值,由于是差分输入的所以temp1是那个样子。。。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM3_Handler))
{
adcx1=adc_data[0];//执行过后,adcx1仍然是0x0000000,但是同时adc_data[0]有值!
temp1=(float)(3300*((2.0*adc_data[0]/65536.0)-1.0));
...
}
然后重点来了!玄幻了!Debug可以看到,adc_data[]中的数是不断自动变化的,然而adcx1永远是0x00000000!!!!
这就一个简单的赋值语句啊,而且我看到例程里面也都是这么处理的,无非是加了一个定时器。
memcpy(adcx,adc_data,1);内存复制函数已经尝试过了,无效
求各位大佬走过路过给看看原因。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
数据通过外设到内存,内存:ADC_ConvertedValueRead
外设:ADC>DR寄存器
一周热门 更多>