STM32
直播中

李巍

7年用户 1469经验值
私信 关注
[问答]

STM32L使用模拟仿真时,进入SystemClock_Config()后程序一直死循环在等待HSI ready的循环中,为什么?

使用STM32L475RC建立的工程,板子没回来想使用simulator模拟仿真下,采用的是HSI内部时钟源, main函数大致如下
1.int main(void)
2.{
3.    HAL_Init();
4.    /* Configure the system clock to have a frequency of 80 MHz */
5.     SystemClock_Config();
6.        tiM1_Init();
7.        TIM3_Init(25600);
8.     /* Start loopback */
9.     while(1){}
10.}

问题描述:在Debug中选择use simulator,配置好.ini文件,编译OK,然后点击DEBUG按钮,代码可以顺利执行到上面的第5行,但是在进入 SystemClock_Config()后,程序一直死循环在等待HSI ready的循环中,如下:
        /* Wait till HSI is ready */
        while(READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET)
        {
          if((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
          {
            return HAL_TIMEOUT;
          }
        }
一直死循环在该while中,从症状看,循环条件READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET一直为真,而且HAL_GetTick() 一直返回是0,所以也达不到HSI_TIMEOUT_VALUE值,不会返回HAL_TIMEOUT,所以一直死循环。打开RCC->SR设备看到HSION Bit的确设置为1了,但是HSIRDY的确没有变成1

这会是什么原因导致的呢?难道STM32L4系列不支持模拟仿真吗?求各位大神指教~

回帖(1)

张勇

2024-5-9 16:17:35
在STM32L475RC使用模拟仿真时,如果程序在`SystemClock_Config()`函数中死循环等待HSI ready,可能有以下几个原因:

1. **HSI配置错误**:检查`SystemClock_Config()`函数中的HSI配置是否正确。确保HSI的时钟频率和启动时间设置正确。

2. **时钟树配置错误**:检查`SystemClock_Config()`函数中的时钟树配置是否正确。确保PLL、AHB、APB等时钟设置正确。

3. **初始化问题**:确保在调用`SystemClock_Config()`之前,已经正确初始化了HAL库。在`main()`函数的第一行,你已经调用了`HAL_Init()`,这通常是正确的。

4. **仿真器设置问题**:检查仿真器的设置,确保仿真器正确模拟了STM32L475RC的行为。这可能包括时钟源、电源等设置。

5. **代码问题**:检查`SystemClock_Config()`函数中的代码,确保没有逻辑错误或无限循环。

6. **仿真器软件问题**:确保使用的仿真器软件是最新版本,并且与你的STM32L475RC兼容。

为了解决这个问题,你可以尝试以下步骤:

1. **检查HSI配置**:确保`SystemClock_Config()`函数中的HSI配置正确。

2. **检查时钟树配置**:确保`SystemClock_Config()`函数中的时钟树配置正确。

3. **检查仿真器设置**:确保仿真器的设置正确,包括时钟源、电源等。

4. **调试代码**:在`SystemClock_Config()`函数中添加调试信息,例如使用`printf()`函数输出关键变量的值,以便了解程序的执行情况。

5. **更新仿真器软件**:确保使用的仿真器软件是最新版本,并且与你的STM32L475RC兼容。

6. **查阅文档**:查阅STM32L475RC的参考手册和数据手册,了解HSI和时钟树的配置细节。

7. **寻求社区帮助**:如果问题仍然存在,可以在相关的STM32开发社区或论坛寻求帮助,提供你的代码和仿真器设置,以便他人帮助你解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分