( ̄o ̄) . z Z683 2024-04-03 12:15 采纳率: 30%
浏览 35

multiply defined


while(1){
        if(Key_GetNum()==1)  //PB12按下
        {
            Serial_Init();            
            mode=0;
            break;
            
        }
        if(Key_GetNum()==2)  // PB13按下
        {
            Usart1_Init(115200);        
            Usart3_Init(115200);        
            mode=1;
            break;
            
        }
    
    }

stm32我想通过两个按键实现两个程序功能的切换,但是该工程的两个程序都使用了串口1,编译时会出现
.\Objects\Project.axf: Error: L6200E: Symbol USART1_IRQHandler multiply defined (by serial.o and usart.o).
如何实现两个功能又不报错

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-03 14:05
    关注

    【以下回答由 GPT 生成】

    解决方案:

    这个问题通常是由于在多个源文件中都定义了同名的函数或变量,导致链接时出现冲突而报错。解决这个问题的方法是使用头文件声明函数,然后在一个源文件中定义这些函数,而在其他源文件中只需要包含这个头文件即可,而不需要重新定义这些函数。

    在你的项目中,首先需要将串口1的初始化函数和中断处理函数定义在一个单独的源文件中,然后在其他文件中通过包含这个头文件来引用这些函数。下面是具体的步骤:

    1. 创建一个名为usart.c的源文件,并在该文件中定义串口1的初始化函数和中断处理函数。示例代码如下:
    // usart.c
    
    #include "usart.h"
    
    void Usart1_Init(int baudrate) {
        // 初始化串口1的代码
    }
    
    void USART1_IRQHandler(void) {
        // 串口1中断处理函数的代码
    }
    
    1. 创建一个名为usart.h的头文件,并在该文件中声明串口1的初始化函数和中断处理函数。示例代码如下:
    // usart.h
    
    #ifndef USART_H_
    #define USART_H_
    
    void Usart1_Init(int baudrate);
    void USART1_IRQHandler(void);
    
    #endif /* USART_H_ */
    
    1. 在你的项目中,包含usart.h头文件,并在你的源文件中移除Usart1_InitUSART1_IRQHandler函数的定义,只保留函数调用。修改后的代码如下:
    #include "usart.h"
    
    while(1){
        if(Key_GetNum() == 1)  
        {
            Usart3_Init(115200);
            mode = 0;
            break;
        }
        if(Key_GetNum() == 2)  
        {
            Usart1_Init(115200);
            mode = 1;
            break;
        }
    }
    

    通过按照上述步骤重新组织代码结构,你就可以避免"Symbol multiply defined"错误,同时实现按键切换不同功能时串口1的正确初始化和中断处理。希期可以帮助你解决问题!


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月3日

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏