OpenEdv-开源电子网

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

ADC实验 显示的是小数,整数没有!!!!!!

[复制链接]

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2017-2-25
在线时间
19 小时
发表于 2017-3-15 23:15:41 | 显示全部楼层 |阅读模式
1金钱
用的开发板式stm32f407zgt6,自己仿照视频写的代码,不知道哪里有问题,lcd显示的只有小数,没有整数部分!!!麻烦大家指导一下!!


#include "adc.h"
#include "stm32f4xx.h"
#include "delay.h"


void Adc_Init(void)
{
        ADC_CommonInitTypeDef ADC_CommonInitADC;
        GPIO_InitTypeDef GPIO_InitADC;
        ADC_InitTypeDef ADC_InitADC;
       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
       
        GPIO_InitADC.GPIO_Pin=GPIO_Pin_5;       
        GPIO_InitADC.GPIO_Mode=GPIO_Mode_AN;
        GPIO_InitADC.GPIO_PuPd=GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOA,&GPIO_InitADC);
       
  RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE);
        RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE);
       
        ADC_CommonInitADC.ADC_Mode=ADC_Mode_Independent;
        ADC_CommonInitADC.ADC_Prescaler=ADC_Prescaler_Div4;
        ADC_CommonInitADC.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;
        ADC_CommonInitADC.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;
        ADC_CommonInit(&ADC_CommonInitADC);
       
        ADC_InitADC.ADC_Resolution=ADC_Resolution_12b;
        ADC_InitADC.ADC_ScanConvMode=DISABLE;
        ADC_InitADC.ADC_ContinuousConvMode=DISABLE;
        ADC_InitADC.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
        ADC_InitADC.ADC_DataAlign=ADC_DataAlign_Right;
        ADC_InitADC.ADC_NbrOfConversion=1;
        ADC_Init(ADC1,&ADC_InitADC);
       
        ADC_Cmd(ADC1,ENABLE);
       
}



/*
ADC_Channel_1 || ADC_Channel_2||  ADC_Channel_3 ||ADC_Channel_4 ||ADC_Channel_5 ||ADC_Channel_6 || ADC_Channel_7 ||
ADC_Channel_8 || ADC_Channel_9 ||  ADC_Channel_10 ||  ADC_Channel_11 || ADC_Channel_12 ||ADC_Channel_13 ||
ADC_Channel_14 ||ADC_Channel_15 || ADC_Channel_16 || ADC_Channel_17 ||ADC_Channel_18

*/

u8 Get_ADCVal(u8 ch)
{
  ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_480Cycles);
       
        ADC_SoftwareStartConv(ADC1);
       
        while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0);
       
        return ADC_GetConversionValue(ADC1);
       
}

u16 Get_ADC_avergeVal(u8 ch,u8 time)
{
  u32 sum=0;
        u8 i;
        for(i=0;i<time;i++)
        {
          sum+=Get_ADCVal(ch);
                delay_ms(5);
        }


  return sum/time;
}







#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "adc.h"


int main(void)
{
        float temp;
        u16 adcx;
        delay_init(168);      //3&#245;ê&#188;&#187;ˉ&#209;óê±oˉêy
        uart_init(115200);                //3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú2¨ì&#216;&#194;ê&#206;a115200
        LED_Init();                                          //3&#245;ê&#188;&#187;ˉLED
        LCD_Init();           //3&#245;ê&#188;&#187;ˉLCD FSMC&#189;ó&#191;ú
        Adc_Init();
        POINT_COLOR=RED;      //&#187;-±ê&#209;&#213;é&#171;£ooìé&#171;                        
        LCD_ShowString(30,40,210,24,24,"Explorer STM32F4");       
        LCD_ShowString(30,70,200,16,16,"ADC TEST");
       
        LCD_ShowString(30,130,200,16,16,"ADC1_CH5_VAL:");             
        LCD_ShowString(30,150,200,16,16,"ADC1_CH5_VOL:0.000V");
       
        while(1)
        {
                adcx=Get_ADC_avergeVal(ADC_Channel_5,20);
                LCD_ShowxNum(134,130,adcx,4,16,0);
                temp=(float)adcx*(3.3/4096);
                adcx=temp;//&#213;&#251;êy2&#191;·&#214;
                LCD_ShowxNum(134,150,adcx,1,16,0);
                temp-=adcx;
                temp*=1000;
                LCD_ShowxNum(150,150,temp,3,16,0x80);
                LED0=!LED0;
                delay_ms(300);
        }

}





IMAG0047.jpg

最佳答案

查看完整内容[请看2#楼]

给你跑了一遍,你的u16 Get_Adc(u8 ch)函数返回值是u8类型 溢出啦!!!!!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2017-6-13
在线时间
10 小时
发表于 2017-3-15 23:15:42 | 显示全部楼层
本帖最后由 976657271 于 2017-6-13 20:52 编辑

给你跑了一遍,你的u16 Get_Adc(u8 ch)函数返回值是u8类型 溢出啦!!!!!!!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-17 00:19:17 | 显示全部楼层
帮顶
回复

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2017-6-13
在线时间
10 小时
发表于 2017-6-13 17:26:46 | 显示全部楼层
本帖最后由 976657271 于 2017-6-13 20:13 编辑

评论不能删除吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-6-14 21:08:21 | 显示全部楼层

我可以删
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 03:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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