OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7359|回复: 4

关于ADC,转换出错问题,求大神帮忙

[复制链接]

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
发表于 2014-5-23 22:13:06 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]大神,看看我这个为啥出错了 #include "led.h" #include "delay.h" #include "sys.h" #include "usart.h" #include "adc.h" #include "usmart.h" //ALIENTEK战舰STM32开发板实验17 //ADC 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 /************************************* 连接:LED连PB0和PB1 ADC通道内部连接温度传感器 ((uint8_t)ADC_Channel_16) 串口连接PA9和PA10 *************************************/ int main(void) { u16 adcx; float temp; float temperate; delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 T_Adc_Init(); //ADC初始化 usmart_dev.init(SystemCoreClock/1000000); //初始化USMART while(1) { // adcx=Get_Adc_Average(ADC_Channel_TempSensor,10); adcx=T_Get_Temp(); printf("ADC值: %d\n",adcx);//显示ADC的值 temp=(float)adcx*(3.3/4096); //ADC为12位,2^12=4096 temperate=temp;//保存温度传感器的电压值 adcx=temp; printf("电压值整数部分:%dV\n",adcx);//显示电压值整数部分 temp-=(u8)temp; //减掉整数部分 printf("电压小数部分:%gV\n",temp*1000); temperate=(1.43-temperate)/0.0043+25; //计算出当前温度值 printf("温度整数部分:%g",temperate); //显示温度整数部分 temperate-=(u8)temperate; printf("温度小数部分:%g",temperate*100); LED0B=!LED0B; delay_ms(300); } } 结果成这样了: ADC值: 2387 电压值整数部分:1V 电压小数部分:923.12V 温度整数部分:-89.6791温度小数部分:-17867.9ADC值: 2392 电压值整数部分:1V 电压小数部分:927.148V 温度整数部分:-90.6159温度小数部分:-18061.6ADC值: 2387 电压值整数部分:1V 电压小数部分:923.12V 温度整数部分:-89.6791温度小数部分:-17867.9ADC值: 2388 电压值整数部分:1V 电压小数部分:923.926V 温度整数部分:-89.8665温度小数部分:-17886.6ADC值: 2383 电压值整数部分:1V 电压小数部分:919.897V 温度整数部分:-88.9296温度小数部分:-17693[/mw_shl_code]
[mw_shl_code=c,true]我没有动原子哥的tsensor.h和tsensor.c文件,原封不动粘贴到我的acd.h和acd.c里面的,能出结果,说明驱动没问题,就是主函数出错了 原子哥的主函数是这样的: #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "tsensor.h" //ALIENTEK战舰STM32开发板实验18 //内部温度传感器 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 int main(void) { u16 adcx; float temp; float temperate; delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 LCD_Init(); T_Adc_Init(); //ADC初始化 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,16,16,"WarShip STM32"); LCD_ShowString(60,70,200,16,16,"ADC TEST"); LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,16,16,"2012/9/7"); //显示提示信息 POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(60,130,200,16,16,"TEMP_VAL:"); LCD_ShowString(60,150,200,16,16,"TEMP_VOL:0.000V"); LCD_ShowString(60,170,200,16,16,"TEMPERATE:00.00C"); while(1) { adcx=T_Get_Adc_Average(ADC_CH_TEMP,10); LCD_ShowxNum(132,130,adcx,4,16,0);//显示ADC的值 temp=(float)adcx*(3.3/4096); temperate=temp;//保存温度传感器的电压值 adcx=temp; LCD_ShowxNum(132,150,adcx,1,16,0); //显示电压值整数部分 temp-=(u8)temp; //减掉整数部分 LCD_ShowxNum(148,150,temp*1000,3,16,0X80); //显示电压小数部分 temperate=(1.43-temperate)/0.0043+25; //计算出当前温度值 LCD_ShowxNum(140,170,(u8)temperate,2,16,0); //显示温度整数部分 temperate-=(u8)temperate; LCD_ShowxNum(164,170,temperate*100,2,16,0X80);//显示温度小数部分 LED0=!LED0; delay_ms(250); } }[/mw_shl_code]


愈挫愈勇
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-23 22:49:38 | 显示全部楼层
表示没有用过%g,这种输出...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-5-23 23:15:35 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,那我该用什么呢?%f  %d  %c  %s  ?
我刚才试了%d,也是出错,%d是适用于整数部分的吧,%f 和%g都是用于浮点型的
愈挫愈勇
回复

使用道具 举报

25

主题

139

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2014-5-10
在线时间
0 小时
 楼主| 发表于 2014-5-23 23:20:15 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
%f也是错的,肿么办,哥。都是显示的负值。是不是我上面的计算出错了啊,我都是贴原子哥的代码,应该不会出错吧。
愈挫愈勇
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-23 23:30:03 | 显示全部楼层
回复【4楼】非常完美:
---------------------------------
我这些数据,都是转换为整数了的....
你的printf用的不熟,好好自己研究下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 22:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表