虔诚er 2023-11-28 08:59 采纳率: 66.7%
浏览 81
已结题

proteus仿真stm32晶振无法使用,只要加入RCC_proteus仿真stm32晶振无法使用,只要加入RCC_Config()函数程序就无法正常运行,如何解决?(语言-c语言)

proteus仿真stm32晶振无法使用,只要加入RCC_Config()函数程序就无法正常运行,如何解决?(语言-c语言)

img

img

img

  • 写回答

15条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-28 12:07
    关注
    获得0.75元问题酬金

    【相关推荐】



    • 这篇博客: Proteus仿真运行stm32程序中的 5、配置好以上,然后连接电路如下,我们选用C0-C7端口,总共8个,如下图所示。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      在这里插入图片描述


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • bug菌¹ Java领域优质创作者 2023-11-28 14:48
    关注
    获得0.75元问题酬金

    该回答引用ChatGPT,望对题主有所帮助/启发;若有帮助,还望采纳。


    在Proteus仿真中,如果只要加入RCC_Config()函数,程序就无法正常运行,可能有以下几个原因和解决方法:

    1. 硬件配置错误:首先,确保你的STM32芯片和晶振的硬件连线正确。检查晶振的引脚连接和连接的电源是否正确。

    2. 时钟配置错误:在使用STM32芯片时,需要正确配置系统时钟和外设时钟。确保在RCC_Config()函数中正确配置时钟源、系统频率和外设时钟使能。

      例如,你可以使用以下代码片段将内部HSI为系统时钟源,设置系统频率为48MHz,启用外设时钟:

      RCC->CR |= RCC_CR_HSION; // 启动内部HSI时钟
      while(!(RCC->CR & RCC_CR_HSIRDY)); // 等待HSI就绪
      
      RCC->CFGR |= (RCC_CFGR_SW_HSI | RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_PPRE2_DIV1); // 配置时钟源和分频系数
      
      // 启用外设时钟
      RCC->APB1ENR |= RCC_APB1ENR_USART2EN; //假设启用USART2
      RCC->AHBENR |= RCC_AHBENR_GPIOAEN; // 假设启用GPIOA
      

      注意:具体的配置需要根据你的实际应用和硬件情况进行调整。

    3. Proteus仿真配置错误:确保你在Proteus仿真中正确配置了STM32芯片,并设置了正确的晶振频率。

      • 右键单击STM32芯片,选择Properties(属性)。
      • 在Device Specific(器件特定)选项卡中,选择正确的芯片型号和库版本。
      • 在Configuration Bits(配置位)选项卡中,设置适当的选项,如时钟源、频率等。
      • 确保External Oscillator(外部晶振)被正确设置,并选择正确的频率。

      如果以上方法都无法解决问题,你可以尝试以下额外的解决方法:

    4. 更新Proteus版本:确保你使用的是最新版本的Proteus软件。某些旧版本可能存在兼容性问题,导致无法正确仿真。

    5. 寻求其他仿真平台:如果以上方法仍然无效,你可以尝试使用其他的STM32仿真平台,如Keil、IAR等,以确保你的程序在实际硬件上正常工作。

    希望以上方法能帮助你解决问题!

    评论
  • 呈两面包夹芝士 2023-11-29 01:35
    关注
    获得0.45元问题酬金

    引自讯飞星火
    这个问题可能是由于在Proteus仿真环境中,RCC_Config()函数的配置不正确导致的。请尝试以下步骤来解决这个问题:

    1. 确保你已经正确配置了RCC_Config()函数。这个函数通常用于设置STM32的时钟源、时钟频率等参数。你需要根据你的硬件连接和需求来配置这个函数。

    2. 检查你的代码中是否有其他错误。例如,你可能没有正确地初始化GPIO、USART等外设。这些错误也可能导致仿真无法正常运行。

    3. 在Proteus仿真环境中,你可能需要使用特定的库函数来模拟RCC_Config()函数的行为。例如,你可以使用STM32CubeMX生成的代码,或者使用你自己编写的模拟函数。

    4. 如果以上步骤都无法解决问题,你可以尝试在Proteus仿真环境中使用其他工具或方法来进行测试。例如,你可以使用JTAG调试器直接连接到STM32芯片,然后手动设置时钟参数。

    希望这些建议能帮助你解决问题。如果问题仍然存在,建议你查阅STM32的相关文档和论坛,或者寻求专业人士的帮助。

    评论
  • Leodong. 2023-11-29 06:41
    关注
    获得0.45元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    这个问题可能是由于在Proteus仿真环境中,RCC_Config()函数无法正确配置晶振导致的。你可以尝试以下方法来解决这个问题:

    1、 确保你已经正确地连接了晶振到STM32的时钟引脚上。

    2、 检查你的RCC_Config()函数是否正确实现了晶振的配置。这个函数通常需要设置系统时钟、AHB时钟、APB1时钟和APB2时钟的频率。你可以使用以下代码作为参考:

    void RCC_Config(void)
    {
        // 使能HSE时钟
        RCC->CR |= RCC_CR_HSEON;
        while ((RCC->CR & RCC_CR_HSERDY) == 0); // 等待HSE稳定
    
        // 设置PLL源为HSE
        RCC->CFGR &= ~RCC_CFGR_PLLSRC;
        RCC->CFGR |= RCC_CFGR_PLLSRC_HSE;
    
        // 设置PLL倍频系数
        RCC->CFGR &= ~RCC_CFGR_PPRE1;
        RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // 例如,设置为2
    
        // 设置系统时钟频率
        RCC->CFGR &= ~RCC_CFGR_SYSCLKSOURCE;
        RCC->CFGR |= RCC_CFGR_SYSCLKSOURCE_PLLCLK;
        RCC->CFGR &= ~RCC_CFGR_PLLMUL;
        RCC->CFGR |= RCC_CFGR_PLLMUL_DIV9; // 例如,设置为9
    
        // 使能PLL时钟
        RCC->CR |= RCC_CR_PLLON;
        while ((RCC->CR & RCC_CR_PLLRDY) == 0); // 等待PLL稳定
    
        // 更新系统时钟分频器
        RCC->CFGR &= ~RCC_CFGR_HPRE;
        RCC->CFGR |= RCC_CFGR_HPRE_DIV1; // 例如,设置为1
    }
    

    3、 如果问题仍然存在,尝试在Proteus仿真环境中使用其他时钟源,例如外部晶振或内部RTC。

    希望这些建议能帮助你解决问题。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    展开全部

    评论
  • 技术宅program 2023-11-29 06:43
    关注
    获得0.45元问题酬金

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSEState = RCC_HSE_OFF;

    评论
  • yy64ll826 2023-11-29 08:13
    关注
    获得0.30元问题酬金
    评论
  • 小明爱吃火锅 2023-11-29 09:43
    关注
    获得0.45元问题酬金

    引用文心一言及其思考回答:
    在Proteus仿真中,STM32的晶振无法使用可能是因为Proteus没有正确地模拟晶振。为了解决这个问题,您可以尝试以下方法:

    1. 确保您的Proteus模型中已经正确地连接了晶振。通常,晶振应该连接到STM32的HSE(高速外部时钟)引脚。如果晶振没有正确连接,可能会导致程序无法正常运行。

    2. 在C代码中,确保您已经正确地配置了RCC(时钟控制)模块。在RCC_Config()函数中,您需要设置晶振的频率,以及其他相关的时钟设置。例如:

    void RCC_Config(void) {
        // 使用HSE作为时钟源,设置为8MHz
        RCC->CR |= (uint32_t)0x00010000;
        RCC->CFGR |= (uint32_t)0x00000000;
    
        // 等待HSE就绪
        while ((RCC->CR & RCC_CR_HSERDY) == 0) {
        }
    
        // 设置PLL
        RCC->CFGR |= (uint32_t)0x00010000;
        RCC->CFGR |= (uint32_t)0x00300000;
    
        // 等待PLL就绪
        while ((RCC->CR & RCC_CR_PLLRDY) == 0) {
        }
    
        // 切换到PLL作为系统时钟源
        RCC->CFGR |= (uint32_t)0x00000002;
    
        // 等待PLL作为系统时钟源就绪
        while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1) {
        }
    }
    

    请注意,这只是一个示例,您需要根据您的具体硬件和时钟设置进行调整。

    1. 如果您的Proteus仿真中使用的是第三方的STM32模型,可能需要检查该模型是否支持晶振功能。如果不支持,您可能需要寻找其他支持晶振功能的模型。

    希望以上建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们更好地了解您的问题并提供更具体的解决方案。

    展开全部

    评论
  • CyMylive. Python领域新星创作者 2023-12-01 16:05
    关注
    获得0.45元问题酬金

    结合GPT给出回答如下请题主参考
    问题分析:

    从描述中可以看出,程序在加入 RCC_Config() 函数后无法正常运行,这可能是由于该函数导致了芯片的某些设置错误,导致程序崩溃。需要检查 RCC_Config() 函数中的代码,查找问题所在。

    解决方法:

    1. 检查 RCC_Config() 函数的代码是否正确。

    该函数用于配置系统时钟,应该包含设置时钟源、分频系数等相关代码。如果其中有错误的设置,可能会导致系统时钟频率不正确、外设无法正常工作等问题。

    1. 确认仿真环境配置是否正确。

    可以在 Proteus 中检查仿真器和晶振等组件的设置是否正确,确保其与实际硬件环境一致。

    1. 尝试重新构建工程文件。

    有时候,程序中可能存在其他问题,导致 RCC_Config() 函数无法正常工作。可以尝试重新构建工程文件,检查是否有编译错误或警告信息提示。

    示例代码:

    以下是一份基于 STM32F103C8T6 的代码,用于配置系统时钟和 GPIO 口的初始化。其中包含了 RCC_Config() 函数的实现。

    #include "stm32f10x.h"
    
    void RCC_Config(void) {
        // 使能外部高速晶振
        RCC->CR |= RCC_CR_HSEON;
        while(!(RCC->CR & RCC_CR_HSERDY));
        // 选择外部高速晶振作为系统时钟源,同时设置 PLL 输入分频系数和倍频系数
        RCC->CFGR |= RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9 | RCC_CFGR_PLLXTPRE;
        RCC->CFGR &= ~(RCC_CFGR_HPRE | RCC_CFGR_PPRE1 | RCC_CFGR_PPRE2);
        RCC->CFGR |= RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE1_DIV2 | RCC_CFGR_PPRE2_DIV1;
        // 启用 PLL 和等待 PLL 稳定
        RCC->CR |= RCC_CR_PLLON;
        while(!(RCC->CR & RCC_CR_PLLRDY));
        // 将 PLL 时钟作为系统时钟源
        RCC->CFGR |= RCC_CFGR_SW_PLL;
        while(!(RCC->CFGR & RCC_CFGR_SWS_PLL));
    }
    
    void GPIO_Config(void) {
        // 使能 GPIO 口的时钟
        RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
        // 配置 PC13 口为推挽输出模式,初始输出低电平
        GPIOC->CRH &= ~(GPIO_CRH_CNF13 | GPIO_CRH_MODE13);
        GPIOC->CRH |= GPIO_CRH_MODE13_0;
        GPIOC->ODR &= ~(1 << 13);
    }
    
    int main(void) {
        RCC_Config();
        GPIO_Config();
        while(1) {
            // 程序循环体
        }
        return 0;
    }
    

    展开全部

    评论
  • 方心 2023-12-04 10:08
    关注
    获得0.15元问题酬金

    1.检查RCC_Config()函数的配置:确保函数中的时钟配置与仿真环境相匹配。比如,检查是否正确配置了外部晶振的频率和倍频因子等参数。

    2.确认仿真环境的时钟配置:在Proteus中,需要正确配置仿真环境的时钟参数,以便与代码中的时钟配置相匹配。比如,检查仿真环境中的时钟频率和倍频因子是否与代码中的配置一致。

    3.检查其他可能的问题:除了时钟配置外,还要检查其他可能导致程序无法正常运行的问题。比如,检查是否正确配置了引脚和外设的初始化等。

    评论
  • Hi 小朋友 2023-12-04 13:40
    关注
    获得0.45元问题酬金

    在Proteus仿真中,如果只要加入RCC_Config()函数,程序就无法正常运行,可能有以下几个原因和解决方法:

    硬件配置错误:首先,确保你的STM32芯片和晶振的硬件连线正确。检查晶振的引脚连接和连接的电源是否正确。

    时钟配置错误:在使用STM32芯片时,需要正确配置系统时钟和外设时钟。确保在RCC_Config()函数中正确配置时钟源、系统频率和外设时钟使能。

    评论
  • Java毕设王 2023-12-05 07:40
    关注
    获得0.60元问题酬金

    引用讯飞星火
    这个问题可能是由于在Proteus仿真环境中,RCC_Config()函数的配置不正确导致的。请尝试以下步骤来解决这个问题:

    1. 确保你已经正确配置了RCC_Config()函数。这个函数通常用于设置STM32的时钟源、时钟分频因子等参数。你需要根据你的硬件连接和需求来配置这个函数。

    2. 检查你的代码中是否有其他错误。例如,你可能没有正确地初始化GPIO、USART等外设。这些错误也可能导致仿真无法正常运行。

    3. 如果问题仍然存在,你可以尝试在Proteus仿真环境中使用其他工具进行测试。例如,你可以使用STMicroelectronics提供的STM32CubeMX软件来生成代码,然后使用这个代码进行仿真。

    4. 如果以上方法都无法解决问题,你可能需要寻求专业的技术支持。

    评论
  • Minuw 2023-12-05 09:26
    关注
    获得0.45元问题酬金

    参考gpt
    在Proteus仿真环境中,如果你的STM32程序在加入RCC_Config()函数后无法正常运行,可能有几个原因。以下是一些可能的解决方案:

    1. 时钟配置错误

      • 确保在RCC_Config()函数中正确配置了系统时钟和外设时钟。在仿真环境中,时钟配置可能需要与实际硬件环境略有不同,因此需要特别注意。
    2. 仿真时钟不匹配

      • 在Proteus中,仿真时钟可能与实际硬件的时钟不完全匹配。尝试使用更接近实际硬件的时钟配置进行仿真,或者对仿真时钟进行调整。
    3. 仿真器设置

      • 确保Proteus仿真器的设置与你的程序和硬件环境相匹配。有些仿真器可能需要特定的配置才能正确模拟时钟。
    4. 外部晶振仿真

      • 如果你在实际硬件中使用了外部晶振,确保在Proteus中也正确配置了外部晶振仿真模型,并在仿真环境中正确连接了晶振引脚。
    5. 调试信息输出

      • 在程序中添加调试信息输出,例如打印时钟配置信息、时钟频率等,以便在仿真环境中查看时钟配置是否正确。
    6. 使用其他仿真工具

      • 如果在Proteus中无法解决问题,可以考虑尝试其他STM32仿真工具,例如Keil uVision等,以验证时钟配置是否正确。

    由于无法直接访问你的具体Proteus仿真环境,以上建议可能需要根据你的具体情况进行调整。如果你能提供更多关于具体问题的信息,例如RCC_Config()函数的代码或相关时钟配置的细节,我可以为你提供更具体的帮助。

    评论
  • 竹山全栈 2023-12-05 14:07
    关注
    获得0.45元问题酬金

    在Proteus中进行STM32的仿真时,有时候会遇到晶振无法使用的问题。其中一个常见的原因是没有正确配置RCC(Reset and Clock Control)模块。
    下面是一些解决该问题的可能方法:

    确保正确配置RCC模块:在程序中,使用RCC_Config()函数来配置STM32的时钟源和时钟分频器。确保您正确地配置了RCC模块,并且时钟源和分频器设置符合您的需求。

    检查时钟源和分频器设置:仔细查看RCC_Config()函数中的时钟源和分频器设置。确保您选择的时钟源和分频器设置与您的晶振频率相匹配。例如,如果您使用的是8MHz的晶振,那么时钟源应该选择HSE(外部高速时钟),并且分频器设置应该将时钟频率分频到适合您的应用程序的范围。

    检查硬件连接:确保您的硬件连接正确无误。检查晶振引脚的连接,确认晶振电路正确连接到STM32芯片。

    更新Proteus版本:有时,旧版本的Proteus可能会导致一些兼容性问题。尝试使用最新版本的Proteus进行仿真,以确保没有版本相关的问题。

    参考STM32的官方文档和示例代码:查阅STM32的官方文档和示例代码,了解正确配置RCC模块的方法。官方文档和示例代码通常提供了详细的说明和示例,可以帮助您正确配置和使用RCC模块。

    如果您仍然遇到问题,建议您提供更多的细节、代码片段或错误信息,以便更准确地帮助您解决问题。

    评论
  • 会跑的小鹿 2023-12-05 15:14
    关注
    获得0.30元问题酬金

    检查晶振的引脚连接和连接的电源是否正确

    评论
  • GIS工具开发 2023-12-05 15:55
    关注
    获得0.45元问题酬金

    系统时钟和外设时钟检查一下

    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 创建了问题 11月28日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部