打印

stm32和keil4编译问题

[复制链接]
2994|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdjngyf|  楼主 | 2012-11-24 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求教各位大侠,好几年未作开发了,最近刚刚使用 stm32开发一个产品,碰到一个问题,请各位指教?
具体情况是我现在在做硬件配置软件初始化,在设置串口拾编译老是报错,查了好长时间,也为解决

**********************************************************************************
  *                                                 rs485通讯接口
  ********************************************************************************
  *按键输入接口占用CPU口线PA8、PA9、PA10   串口1
  *               PA8->485
  *               PA9->TXD
  *               PA10->RXD
*********************************************************************************************************/
//加载库文件
#include "stm32f10x.h"


/*********************************************************************************************************
*  函数名  : Rs485_GPIO_Config
*  描述    :
*  输入参数: 无
*  输出参数: 无
**********************************************************************************************************/
/*配置USART1、GPIOA的外设时钟和管脚复用  */
void Rcc_Config(void)
{
        /*开启USART1、GPIOA的外设时钟和管脚复用功能*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
}

//********************************************************************
/*配置RS485硬件管脚*/
//********************************************************************
void rs485_GPIO_Config(void)
{
        /*定义一个GPIO_InitTypeDef的结构体*/
        GPIO_InitTypeDef GPIO_InitStructure;

        /*配置要控制的485片选 GPIO  PA8管脚*/
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
        /*设置引脚模式为复用推挽输出模式  */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        /*设置引脚速率为50MHz  */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        /*调用库函数,初始化要控制选中的管脚GPIOA */
        GPIO_Init(GPIOA, &GPIO_InitStructure);

    /*配置要控制的USART1 GPIO  PA9管脚*/
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;
        /*设置引脚模式为复用推挽输出模式  */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        /*设置引脚速率为50MHz  */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        /*调用库函数,初始化要控制选中的管脚GPIOA */
        GPIO_Init(GPIOA, &GPIO_InitStructure);
/***********************************************/
        /*配置要控制的USART1 GPIO  PA10管脚*/
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
        /*设置引脚模式为浮空输入模式  */
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        /*调用库函数,初始化要控制选中的管脚GPIOA */
        GPIO_Init(GPIOA, &GPIO_InitStructure);

}

/*****************************************************************
*                      USART1模式配置
******************************************************************/

void Usart_Config(void)
{
        /*定义一个USART_InitTypeDef的结构体*/
        USART_InitTypeDef USART_InitStructure;

        /*开启外设及串口时钟*/
        Rcc_Config();

   
    /*设置通讯波特率为115200 */
        USART_InitStructure.USART_BaudRate = 115200;

        /*传输字长为八个数据位*/
        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;

        /*调用库函数,初始化USART1配置 */
        USART_Init(USART1, &USART_InitStructure);

        /*使能USART1通讯中断 */
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

        /*使能USART1*/
                USART_Cmd(USART1, ENABLE);
        /*配置RS485硬件管脚*/
        rs485_GPIO_Config();
}

在STM32F10x_CONF_H里已经把加载了"include "stm32f10x_usart.h"
可编译时提示:ERROR :L6218E: Undefined symbol  USART_Cmd(referred from rs485.o)
                  ERROR :L6218E: Undefined symbol  USART_Init(referred from rs485.o)
                  ERROR :L6218E: Undefined symbol  USART_ITConfig(referred from rs485.o)

如果在STM32F10x_CONF_H里把#include "stm32f10x_usart.h"注释掉,提示

                           USART_WordLength_8b;
                   USART_StopBits_1;
                            USART_Parity_No;
                            USART_HardwareFlowControl_None;
                            USART_Mode_Tx | USART_Mode_Rx;

这些值未定义。

我想问一下各位,为什么用结构体里的对象可以编译通过,而stm32f10x_usart.h里定义的函数
                 void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
                          void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
                          void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);

                 调用会编译出错?
           我其它的硬件接口处理模式和rs485接口一样,为什么就能通过?
           求各位大侠指教,万分感谢,因几年为做开发了好多东西都忘了,再次表示感谢!





}
沙发
cryfei| | 2012-11-24 08:51 | 只看该作者
看一下你的这个文件rs485.o

使用特权

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

本版积分规则

1

主题

9

帖子

0

粉丝