STM32f407 ADC DMA采集
STM32内部温湿度采集(参考原子的程序.)我使用DMA传输的方法采集,但是总有问题,之后我使用同一个Get_Temprate,(程序在下面)然后用串口查看了数据打印出来的adcx值明明是一样的,为什么下面打印temperate数值就不对了
串口助手截图已上传,求解,谢谢
//得到温度值
//返回值:温度值(扩大了100倍,单位:℃.)
short Get_Temprate(void)
{
u32 adcx;
short result;
double temperate;
adcx=ADC_ConvertedValue; //读取通道16内部温度传感器通道,10次取平均
printf("\r\n The current AD value = %f V \r\n",adcx);
temperate =(float)adcx*(3.3/4096); //电压值
printf("\r\n The current AD value = %f V \r\n",temperate);
temperate=(temperate-0.76)/0.0025 + 25; //转换为温度值
printf("\r\n The current AD value = %f V \r\n",temperate);
result=temperate*=100; //扩大100倍.
return result;
定义temperate时赋值为0,试一试;仿真检查一下ADC的DR寄存器里面的数值 将temperate 定义为float型计算的时候不用强制转换 mylovemcu 发表于 2020-5-7 10:11
将temperate 定义为float型计算的时候不用强制转换
不行,结果没变化 likang1202 发表于 2020-5-7 08:59
定义temperate时赋值为0,试一试;仿真检查一下ADC的DR寄存器里面的数值
emperate时赋值为0
DMA的这个DR寄存器数值是0,
用原子的例程仿真,虽然DR寄存器有数值,
但是数值运行过程中根本不变化,
除非复位以后重新运行才会有新的值,,但是也不会变化,尽管LCD的读书一直在变化.
请问keil的仿真是不是有问题啊,还是我设置的不对? 换一个外部通道试试,看看你软硬件平台是否是期望值:) 在函数内定义的double改为static float试试看 看一下你的DMA配置和ADC_Convertedvalue的值
页:
[1]