Tony小周 2024-05-05 23:43 采纳率: 83.3%
浏览 4
已结题

芯片时钟配置不一样芯片时钟配置不一样

为什么在stm32f103上运行的程序串口波特率115200,而在stm32f105上运行要设置38400才能接收正常数据。同时一样的延时函数,在stm32f103能准确延时一秒,而在stm32f105却不准确,延时了近3秒。我怀疑这两个芯片时钟配置不一样,有没有大知道这个

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-05 23:43
    关注

    引自免费微信小程序:皆我百晓生

    根据您的描述,您可能遇到了与微控制器(MCU)时钟配置相关的问题。STM32F103 和 STM32F105 都是 STMicroelectronics 的 Cortex-M3 系列微控制器,它们具有相似的架构,但是他们的默认系统时钟频率可能是不同的。这可能会导致串口波特率和延时函数表现不一致。

    首先,让我们了解一下时钟配置的基本概念。STM32F1系列微控制器通常有多个时钟源,包括内部高速时钟HSI、内部低速时钟LSI、外部晶体振荡器HSE和PLL(锁相环)。系统时钟SYSCLK可以来自这些时钟源之一,或者是经过PLL倍频后的时钟。

    对于串口波特率,它是基于系统时钟频率计算出来的。公式通常是:

    [ 波特率 = \frac{SYSCLK}{(USART_BAUD_RATE_PRESCALER \times (USART_InitStruct->USART_BaudRate))} ]

    其中,USART_BAUD_RATE_PRESCALER通常是PCLK2(APB2总线时钟),它的频率由SYSCLK除以相应的分频系数决定。

    关于延时函数,它通常是基于某个定时器或者SysTick中断实现的。延时时间也是依赖于系统时钟频率。

    解决这个问题的方法包括:

    1. 检查时钟配置
      • 查看每个MCU的时钟配置,确保它们都使用相同的时钟源和分频系数。
      • SystemInit()函数中设置正确的时钟源和分频因子。例如,如果你想要在两个设备上都使用8MHz的HSE,并且通过PLL倍频到72MHz,代码可能类似这样:
    // 假设HSE为8MHz
    RCC_OscInitTypeDef RCC_OscInitStruct = {
        .OscillatorType = RCC_OSCILLATORTYPE_HSE,
        .HSEState = RCC_HSE_ON,
        .HSEPredivValue = RCC_HSE_PREDIV_DIV1,
        .HSICalibrationValue = 6,
    };
    
    // PLL配置
    RCC_PLLInitTypeDef RCC_PLLInitStruct = {
        .PLLClockRange = RCC_PLLClockRange_3,
        .PLLMUL = RCC_PLL_MUL9,
        .PLL.PLLState = RCC_PLL_ON,
        .PLL.PLLSource = RCC_PLLSOURCE_HSE,
    };
    
    // 初始化系统时钟
    void SystemClock_Config(void)
    {
        // ... 其他初始化步骤 ...
    
        // 启动HSE
        HAL_RCC_OscConfig(&RCC_OscInitStruct);
    
        // 启动PLL
        HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
    }
    
    1. 调整串口波特率计算

      • 根据实际的系统时钟频率重新计算串口波特率预分频器值。
    2. 校准延时函数

      • 如果延时函数依赖于定时器或SysTick中断,那么需要根据实际的系统时钟频率重新计算计数器阈值。

    为了更具体地帮助您,我需要查看具体的代码片段,特别是与时钟配置、串口配置和延时函数相关的部分。如果您能提供这些信息,我可以为您提供更精确的帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月14日
  • 已采纳回答 5月6日
  • 创建了问题 5月5日

悬赏问题

  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误