明天会在何方 发表于 2020-5-6 22:52:32

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;





likang1202 发表于 2020-5-7 08:59:10

定义temperate时赋值为0,试一试;仿真检查一下ADC的DR寄存器里面的数值

mylovemcu 发表于 2020-5-7 10:11:09

将temperate 定义为float型计算的时候不用强制转换

明天会在何方 发表于 2020-5-7 18:48:37

mylovemcu 发表于 2020-5-7 10:11
将temperate 定义为float型计算的时候不用强制转换

不行,结果没变化

明天会在何方 发表于 2020-5-7 19:06:44

likang1202 发表于 2020-5-7 08:59
定义temperate时赋值为0,试一试;仿真检查一下ADC的DR寄存器里面的数值

emperate时赋值为0
DMA的这个DR寄存器数值是0,
用原子的例程仿真,虽然DR寄存器有数值,
但是数值运行过程中根本不变化,
除非复位以后重新运行才会有新的值,,但是也不会变化,尽管LCD的读书一直在变化.
请问keil的仿真是不是有问题啊,还是我设置的不对?

butterflyspring 发表于 2020-5-14 17:26:24

换一个外部通道试试,看看你软硬件平台是否是期望值:)

jhq13 发表于 2020-6-23 15:06:28

在函数内定义的double改为static float试试看

zhongqm 发表于 2020-6-24 18:05:37

看一下你的DMA配置和ADC_Convertedvalue的值
页: [1]
查看完整版本: STM32f407 ADC DMA采集