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

proteus仿真stm32晶振无法使用,只要加入RCC_proteus仿真stm32晶振无法使用,只要加入RCC_Config()函数程序就无法正常运行,如何解决?(语言-c语言)
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
15条回答 默认 最新
关注
获得0.75元问题酬金 解决 无用评论 打赏 举报- 呈两面包夹芝士 2023-11-29 01:35关注
获得0.45元问题酬金 解决 无用评论 打赏 举报 - 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元问题酬金 解决 无用评论 打赏 举报 - yy64ll826 2023-11-29 08:13关注
获得0.30元问题酬金 解决 无用评论 打赏 举报 - 小明爱吃火锅 2023-11-29 09:43关注
获得0.45元问题酬金 引用文心一言及其思考回答:
在Proteus仿真中,STM32的晶振无法使用可能是因为Proteus没有正确地模拟晶振。为了解决这个问题,您可以尝试以下方法:确保您的Proteus模型中已经正确地连接了晶振。通常,晶振应该连接到STM32的HSE(高速外部时钟)引脚。如果晶振没有正确连接,可能会导致程序无法正常运行。
在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) { } }
请注意,这只是一个示例,您需要根据您的具体硬件和时钟设置进行调整。
- 如果您的Proteus仿真中使用的是第三方的STM32模型,可能需要检查该模型是否支持晶振功能。如果不支持,您可能需要寻找其他支持晶振功能的模型。
希望以上建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们更好地了解您的问题并提供更具体的解决方案。
解决 无用评论 打赏 举报 关注
获得0.45元问题酬金 结合GPT给出回答如下请题主参考
问题分析:从描述中可以看出,程序在加入 RCC_Config() 函数后无法正常运行,这可能是由于该函数导致了芯片的某些设置错误,导致程序崩溃。需要检查 RCC_Config() 函数中的代码,查找问题所在。
解决方法:
- 检查 RCC_Config() 函数的代码是否正确。
该函数用于配置系统时钟,应该包含设置时钟源、分频系数等相关代码。如果其中有错误的设置,可能会导致系统时钟频率不正确、外设无法正常工作等问题。
- 确认仿真环境配置是否正确。
可以在 Proteus 中检查仿真器和晶振等组件的设置是否正确,确保其与实际硬件环境一致。
- 尝试重新构建工程文件。
有时候,程序中可能存在其他问题,导致 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元问题酬金 解决 无用评论 打赏 举报 - Hi 小朋友 2023-12-04 13:40关注
获得0.45元问题酬金 解决 无用评论 打赏 举报 - Java毕设王 2023-12-05 07:40关注
获得0.60元问题酬金 解决 无用评论 打赏 举报 - Minuw 2023-12-05 09:26关注
获得0.45元问题酬金 解决 无用评论 打赏 举报 - 竹山全栈 2023-12-05 14:07关注
获得0.45元问题酬金 解决 无用评论 打赏 举报 - 会跑的小鹿 2023-12-05 15:14关注
获得0.30元问题酬金 解决 无用评论 打赏 举报 - GIS工具开发 2023-12-05 15:55关注
获得0.45元问题酬金 解决 无用评论 打赏 举报