你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32f407 ADC DMA采集

[复制链接]
明天会在何方 提问时间:2020-5-6 22:52 /
悬赏1ST金币未解决
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;





串口打印截图

串口打印截图
收藏 评论7 发布时间:2020-5-6 22:52

举报

7个回答
李康1202 回答时间:2020-5-7 08:59:10
定义temperate时赋值为0,试一试;仿真检查一下ADC的DR寄存器里面的数值

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

mylovemcu 回答时间:2020-5-7 10:11:09
将temperate 定义为float型  计算的时候不用强制转换  

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

明天会在何方 回答时间: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
换一个外部通道试试,看看你软硬件平台是否是期望值

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

jhq13 回答时间:2020-6-23 15:06:28
在函数内定义的double改为static float试试看
zhongqm 回答时间:2020-6-24 18:05:37
看一下你的DMA配置和ADC_Convertedvalue的值

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版