mameng 发表于 2015-5-19 10:46:31

根据ADC结果计算电压

/*******************************************************************************
* Function Name : GetVolt
* Description    : 根据ADC结果计算电压
* Input          : u16 advalue
* Output         :
* Return         : u16 temp
*******************************************************************************/
u16 GetVolt(u16 advalue)
{
    return (u16)(advalue * 330 / 4096);
}
                        /*******************************************************************************
* Function Name : RCC_Configuration
* Description    : 系统时钟设置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
    ErrorStatus HSEStartUpStatus;    //使能外部晶振
    RCC_HSEConfig(RCC_HSE_ON);
    //等待外部晶振稳定
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
    //如果外部晶振启动成功,则进行下一步操作
    if(HSEStartUpStatus==SUCCESS)
    {
      //设置HCLK(AHB时钟)=SYSCLK
      RCC_HCLKConfig(RCC_SYSCLK_Div1);      //PCLK1(APB1) = HCLK/2
      RCC_PCLK1Config(RCC_HCLK_Div2);      //PCLK2(APB2) = HCLK
      RCC_PCLK2Config(RCC_HCLK_Div1);
      
      //设置ADC时钟频率
      RCC_ADCCLKConfig(RCC_PCLK2_Div2);      //FLASH时序控制
      //推荐值:SYSCLK = 0~24MHz   Latency=0
      //      SYSCLK = 24~48MHz Latency=1
      //      SYSCLK = 48~72MHz Latency=2
      FLASH_SetLatency(FLASH_Latency_2);
      //开启FLASH预取指功能
      FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);      //PLL设置 SYSCLK/1 * 9 = 8*1*9 = 72MHz
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
      //启动PLL
      RCC_PLLCmd(ENABLE);
      //等待PLL稳定
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
      //系统时钟SYSCLK来自PLL输出
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
      //切换时钟后等待系统时钟稳定
      while(RCC_GetSYSCLKSource()!=0x08);      
    }    //下面是给各模块开启时钟
    //启动GPIO
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | \
                           RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,\
                           ENABLE);
    //启动AFIO
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    //启动USART1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    //启动DMA时钟
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
    //启动ADC1时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);}

巧子儿 发表于 2015-5-20 11:43:50

学习了,也用下

xxp790912 发表于 2015-5-21 09:18:24

不错!顶一个
页: [1]
查看完整版本: 根据ADC结果计算电压