功能声明中的错误

时间:2014-03-04 10:53:04

标签: c stm32 function-declaration

我正在为Keil编写stm32微控制器,2天前我将我的源程序和头文件复制到TASKING项目中,经过一些问题后,所有操作完成但是在源文件和头文件中声明的所有函数都有错误。 请问有人说我这里的问题是什么?

标题文件:

#ifndef __CONFIG_H
#define __CONFIG_H

#include "stm32f10x.h"

void init(void);
void config_IO(void);
void config_EXTI(void);
void config_TIM4(void);
void config_TIM3(void);
void config_TIM2(void);
void config_USART3(void);
void config_RTC(void);

#endif

**源文件:**

#include "config.h"
// #include "main.h"

const int t_PLCoff = 1000; // time in ms

void init(void)
{
    RCC_HCLKConfig(RCC_SYSCLK_Div1);// HCLK = 64 MHz, AHB
  RCC_PCLK1Config(RCC_HCLK_Div2); // APB1 = 32 MHz
  RCC_PCLK2Config(RCC_HCLK_Div1); // APB2 = 64 MHz      

    /* set up FLASH */
  FLASH_SetLatency(FLASH_Latency_2);
  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* PLLCLK = 4MHz * 16 = 64 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08);
}   

void config_IO(void)
{
    GPIO_InitTypeDef                    GPIO_InitStructure;

    /* GPIOA Periph clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    /* Configure PB9 in Inpu pullup mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    /* Initialize GPIOA */  
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* GPIOB Periph clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    /* Configure PC5 in Inpu pullup mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    /* Initialize GPIOB */  
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* GPIOB Periph clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    /* Configure PC5 in Inpu pullup mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    /* Initialize GPIOB */  
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* GPIOB Periph clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    /* Configure PC5 in Inpu pullup mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    /* Initialize GPIOB */  
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void config_EXTI(void)
{
    NVIC_InitTypeDef    NVIC_InitStructure;
    EXTI_InitTypeDef    EXTI_InitStructure;
    GPIO_InitTypeDef    GPIO_InitStructure;

    /* GPIOC Periph clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    /* Configure PC5 in Inpu pullup mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    /* Initialize GPIOC */  
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* Enable AFIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  /* Connect EXTI5 Line to PC.05 pin */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource10);
//  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
//  GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
  /* Configure EXTI4 line */
  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
//  EXTI_InitStructure.EXTI_Line = EXTI_Line8 | EXTI_Line9 | EXTI_Line10;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  /* Initilize EXTI */
    EXTI_Init(&EXTI_InitStructure);

//  /* Enable and set EXTI9_5 Interrupt to the lowest priority */
//  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//  NVIC_Init(&NVIC_InitStructure);

        /* Enable and set EXTI15_10 Interrupt to the lowest priority */
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void config_TIM4(void)
{
    NVIC_InitTypeDef                    NVIC_InitStructure;
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseInitStructure;

/* Enable the TIM4 gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIM_CKD_DIV1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    /* Initialize TIM4 Interrupt */
  NVIC_Init(&NVIC_InitStructure);

  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  /* Time base configuration */
  TIM_TimeBaseInitStructure.TIM_Period = 32000 - 1;  // 100 KHz down to 10 Hz (100 ms)
  TIM_TimeBaseInitStructure.TIM_Prescaler = 500 - 1; // 36 MHz Clock down to 100 KHz (adjust per your clock)
  TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  /* Initialize TIM4 */
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);
  /* TIM IT enable */
  TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
  /* TIM4 enable counter */
  TIM_Cmd(TIM4, ENABLE);
}

void config_TIM3(void)  //used for 2Hz output signal timing
{
    NVIC_InitTypeDef                    NVIC_InitStructure;
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseInitStructure;

/* Enable the TIM3 gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIM_CKD_DIV1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    /* Initialize TIM3 Interrupt */
  NVIC_Init(&NVIC_InitStructure);

  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  /* Time base configuration */
  TIM_TimeBaseInitStructure.TIM_Period = 32000 - 1;  // 1 KHz down to 10 Hz (1 ms)
  TIM_TimeBaseInitStructure.TIM_Prescaler = t_PLCoff - 1; 
  TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  /* Initialize TIM3 */
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);
  /* TIM IT enable */
  TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);
}

void config_TIM2(void)  //used for 2Hz output signal timing
{
    NVIC_InitTypeDef                    NVIC_InitStructure;
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseInitStructure;

/* Enable the TIM2 gloabal Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIM_CKD_DIV1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    /* Initialize TIM2 Interrupt */
  NVIC_Init(&NVIC_InitStructure);

  /* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  /* Time base configuration */
  TIM_TimeBaseInitStructure.TIM_Period = 32000 - 1;  // 1 KHz down to 10 Hz (1 ms)
  TIM_TimeBaseInitStructure.TIM_Prescaler = 100 - 1; 
  TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  /* Initialize TIM2 */
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
  /* TIM IT enable */
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);
}

void config_USART1()
{
    USART_InitTypeDef   USART_InitStructure;
    GPIO_InitTypeDef    GPIO_InitStructure;
    NVIC_InitTypeDef    NVIC_InitStructure;

    /* GPIOB Periph clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    /* Configure PB10 in AF PushPull mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 ;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    /* Initialize GPIOB */  
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* Configure PB11 in Input mode */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  /* Initialize GPIOB */    
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* USART3 Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

  /* Configure USART1 in desired options */
  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_Rx | USART_Mode_Tx;
  /* Initialize USART1 */
  USART_Init(USART1, &USART_InitStructure);
  /* enable USART1 */
  USART_Cmd(USART1, ENABLE); 

  /* Enable the USARTx Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 
}

和错误!

Description Resource    Path    Location    ID  Type    lkarm E163: "init" redeclared with a different type config.c    /third  6   7376    C/C++ Problem

我的源文件中的所有其他函数也重复此错误!

1 个答案:

答案 0 :(得分:0)

所以我发现它需要在main.c中包含source.h文件!但我还是不知道为什么?

问题解决了! 谢谢所有

相关问题