[STM32F1]

菜鸟求帮忙AD转换的问题

[复制链接]
1150|8
手机看帖
扫描二维码
随时随地手机跟帖
Munich|  楼主 | 2014-7-28 11:25 | 显示全部楼层 |阅读模式
stm32 ADC采样怎么不是0就是4095
Munich|  楼主 | 2014-7-28 11:26 | 显示全部楼层
#include"stm32f10x_lib.h"
#include<stdio.h>

void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(void);
void ADC_Configuration(void);

int fputc(int ch, FILE *f)
{
        //ch发送给USART
        USART_SendData(USART1, (u8)ch);
        //等待发送完毕
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
        //返回ch
        return ch;
}

int main(void)
{
        #ifdef DEBUG
                debug();
        #endif

        float VolValue = 0.00;
        u32 ticks = 0;
        RCC_Configuration();
        GPIO_Configuration();
        USART_Configuration();
        ADC_Configuration();

        printf("\r\n The AD_value is: \r\n");
        while(1)
        {
                if (ticks++ >= 2000000)
                {
                        ticks = 0;
                        printf("Value is %d", ADC_GetConversionValue(ADC1));
                        VolValue = 3.300 * ADC_GetConversionValue(ADC1)/4095;
                        printf("The current VolValue = %.2fv\r\n", VolValue);
                }
        }
}
void RCC_Configuration(void)
{
        ErrorStatus HSEStartUpStatus;
        RCC_DeInit();
        RCC_HSEConfig(RCC_HSE_ON);
        HSEStartUpStatus = RCC_WaitForHSEStartUp();
        if(HSEStartUpStatus == SUCCESS)
        {
                RCC_HCLKConfig(RCC_SYSCLK_Div1);
                RCC_PCLK2Config(RCC_HCLK_Div1);
                RCC_PCLK1Config(RCC_HCLK_Div2);
                FLASH_SetLatency(FLASH_Latency_2);
                FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
                RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
                RCC_PLLCmd(ENABLE);
                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
                while(RCC_GetSYSCLKSource() != 0x08);
        }
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_ADC1
                                                        | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
       
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);
}
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void ADC_Configuration(void)
{
        ADC_InitTypeDef ADC_InitStructure;

        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
        ADC_InitStructure.ADC_ScanConvMode = ENABLE;
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStructure.ADC_NbrOfChannel = 1;
        ADC_Init(ADC1, &ADC_InitStructure);

        ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5);
        ADC_Cmd(ADC1, ENABLE);
        ADC_ResetCalibration(ADC1);
        while(ADC_GetResetCalibrationStatus(ADC1));
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
void USART_Configuration(void)
{
        USART_InitTypeDef USART_InitStructure;
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
//        USART_InitStructure.USART_Clock = USART_Clock_Enable;
//        USART_InitStructure.USART_CPOL = USART_CPOL_High;
//        USART_InitStructure.USART_CPHA = USART_CPHA_1Edge;
//        USART_InitStructure.USART_LastBit = USART_LastBit_Enable;
        USART_Init(USART1, &USART_InitStructure);
        USART_Cmd(USART1, ENABLE);
}

使用特权

评论回复
mmuuss586| | 2014-7-28 12:10 | 显示全部楼层
adc get的值不是0就是4095吗?

使用特权

评论回复
Munich|  楼主 | 2014-7-28 15:37 | 显示全部楼层
mmuuss586 发表于 2014-7-28 12:10
adc get的值不是0就是4095吗?

恩。不是0就是4095.不知道为什么啊!!

使用特权

评论回复
Munich|  楼主 | 2014-7-28 15:39 | 显示全部楼层
Munich 发表于 2014-7-28 15:37
恩。不是0就是4095.不知道为什么啊!!

而且输入我有用示波器测。是有对的。会随旋转电位计变化而变化。。但输出有问题啊。。

使用特权

评论回复
Munich|  楼主 | 2014-7-29 11:56 | 显示全部楼层
求大神教啊啊啊啊啊啊啊啊啊

使用特权

评论回复
kevillu| | 2014-8-1 11:54 | 显示全部楼层
检查检查你的硬件,看看AD采样的片子电压是否对的!

使用特权

评论回复
negiul| | 2014-8-2 20:38 | 显示全部楼层
Munich 发表于 2014-7-28 11:26
#include"stm32f10x_lib.h"
#include

您好,我有个问题想问一下,关于STM32DA  AD 在设置的时候,软件触发是什么原理呢,没弄明白就一直纠结着,是在程序运行的时候,按照某个频率在触发还是说因为一句程序
DAC_SetChannel1Data(DAC_Align_12b_R, 4095);     
    DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); 这两句来实现的?

使用特权

评论回复
Munich|  楼主 | 2014-8-4 17:07 | 显示全部楼层
kevillu 发表于 2014-8-1 11:54
检查检查你的硬件,看看AD采样的片子电压是否对的!

有对啊。。3.58V

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝