打印
[AT32F407]

AT32F407VGT7 用外部晶振25MHz时串口乱码

[复制链接]
1563|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dongly|  楼主 | 2022-5-4 22:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dongly 于 2022-5-4 22:17 编辑

  • 状况: AT32F407VGT7 用外部晶振25MHz时串口输出乱码
  • 硬件: 晶振为25MHz无源晶振
  • 标准库:V2.0.9
  • 时钟配置: New Clock Configuration V2.00.06
  • 例程: AT32F403A_407_Firmware_Library_V2.0.9\project\at_start_f407\examples\usart\printf
  • 编译器信息

    IDE-Version:
    μVision V5.30.0.0
    Copyright (C) 2020 ARM Ltd and ARM Germany GmbH. All rights reserved.

    Tool Version Numbers:
    Toolchain:        MDK-ARM Plus  Version: 5.30.0.0
    Toolchain Path:    e:\Keil_v5\ARM\ARMCC\Bin
    C Compiler:         Armcc.exe        V5.06 update 6 (build 750)
    Assembler:          Armasm.exe        V5.06 update 6 (build 750)
    Linker/Locator:     ArmLink.exe        V5.06 update 6 (build 750)
    Library Manager:    ArmAr.exe        V5.06 update 6 (build 750)
    Hex Converter:      FromElf.exe        V5.06 update 6 (build 750)
    CPU DLL:               SARMCM3.DLL          V5.30.0.0
    Dialog DLL:         TCM.DLL              V1.42.0.0
    Target DLL:             Segger\JL2CM3.dll      V2.99.38.0
    Dialog DLL:         TCM.DLL              V1.42.0.0



  • 使用内部时钟HICK时,生成新的system_clock_config()替换原来的system_clock_config(),串口打印正常

    /**
      * [url=home.php?mod=space&uid=247401]@brief[/url]  system clock config program
      * [url=home.php?mod=space&uid=536309]@NOTE[/url]   the system clock is configured as follow:
      *         - system clock        = hick / 12 * pll_mult
      *         - system clock source = pll (hick)
      *         - sclk                = 240000000
      *         - ahbdiv              = 1
      *         - ahbclk              = 240000000
      *         - apb1div             = 2
      *         - apb1clk             = 120000000
      *         - apb2div             = 2
      *         - apb2clk             = 120000000
      *         - pll_mult            = 60
      *         - pll_range           = GT72MHZ (greater than 72 mhz)
      * @param  none
      * @retval none
      */
    void system_clock_config(void)
    {
      /* reset crm */
      crm_reset();

      /* enable hick */
      crm_clock_source_enable(CRM_CLOCK_SOURCE_HICK, TRUE);

       /* wait till hick is ready */
      while(crm_flag_get(CRM_HICK_STABLE_FLAG) != SET)
      {
      }

      /* config pll clock resource */
      crm_pll_config(CRM_PLL_SOURCE_HICK, CRM_PLL_MULT_60, CRM_PLL_OUTPUT_RANGE_GT72MHZ);

      /* enable pll */
      crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);

      /* wait till pll is ready */
      while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
      {
      }

      /* config ahbclk */
      crm_ahb_div_set(CRM_AHB_DIV_1);

      /* config apb2clk */
      crm_apb2_div_set(CRM_APB2_DIV_2);

      /* config apb1clk */
      crm_apb1_div_set(CRM_APB1_DIV_2);

      /* enable auto step mode */
      crm_auto_step_mode_enable(TRUE);

      /* select pll as system clock source */
      crm_sysclk_switch(CRM_SCLK_PLL);

      /* wait till pll is used as system clock source */
      while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
      {
      }

      /* disable auto step mode */
      crm_auto_step_mode_enable(FALSE);

      /* update system_core_clock global variable */
      system_core_clock_update();
    }

  • 在PA8输出sclk的64分频(理论值3.750MHz)为3.760MHz
  • 使用外部晶振时,生成新的system_clock_config(),串口打死乱码(用分析仪查看了一下,貌似波特率不对)

    /**
      * [url=home.php?mod=space&uid=247401]@brief[/url]  system clock config program
      * [url=home.php?mod=space&uid=536309]@NOTE[/url]   the system clock is configured as follow:
      *         - system clock        = hext / 5 * pll_mult
      *         - system clock source = pll (hext)
      *         - hext                = 25000000
      *         - sclk                = 240000000
      *         - ahbdiv              = 1
      *         - ahbclk              = 240000000
      *         - apb1div             = 2
      *         - apb1clk             = 120000000
      *         - apb2div             = 2
      *         - apb2clk             = 120000000
      *         - pll_mult            = 48
      *         - pll_range           = GT72MHZ (greater than 72 mhz)
      * @param  none
      * @retval none
      */
    void system_clock_config(void)
    {
      /* reset crm */
      crm_reset();

      /* enable hext */
      crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);

       /* wait till hext is ready */
      while(crm_hext_stable_wait() == ERROR)
      {
      }

      /* config pll clock resource */
      crm_pll_config(CRM_PLL_SOURCE_HEXT_DIV, CRM_PLL_MULT_48, CRM_PLL_OUTPUT_RANGE_GT72MHZ);

      /* config hext division */
      crm_hext_clock_div_set(CRM_HEXT_DIV_5);

      /* enable pll */
      crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);

      /* wait till pll is ready */
      while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
      {
      }

      /* config ahbclk */
      crm_ahb_div_set(CRM_AHB_DIV_1);

      /* config apb2clk */
      crm_apb2_div_set(CRM_APB2_DIV_2);

      /* config apb1clk */
      crm_apb1_div_set(CRM_APB1_DIV_2);

      /* enable auto step mode */
      crm_auto_step_mode_enable(TRUE);

      /* select pll as system clock source */
      crm_sysclk_switch(CRM_SCLK_PLL);

      /* wait till pll is used as system clock source */
      while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
      {
      }

      /* disable auto step mode */
      crm_auto_step_mode_enable(FALSE);

      /* update system_core_clock global variable */
      system_core_clock_update();
    }
  • 在PA8输出sclk的64分频(理论值3.750MHz)为3.751MHz,说明时钟是正常的

请问各位大能,这个问题出哪里?

使用特权

评论回复
沙发
骑着蜗牛狂奔O| | 2022-5-5 10:16 | 只看该作者
我这边按着你的配置是没有问题的, 你注意,时钟配置工具共生成的文件clock.c clock.h conf.h 都要替换,你是不是没有替换完

使用特权

评论回复
板凳
sparrow054| | 2022-5-5 10:24 | 只看该作者
是不是你时钟没配置好,导致串口波特率并不是是想要的

使用特权

评论回复
地板
dongly|  楼主 | 2022-5-5 10:27 | 只看该作者
骑着蜗牛狂奔O 发表于 2022-5-5 10:16
我这边按着你的配置是没有问题的, 你注意,时钟配置工具共生成的文件clock.c clock.h conf.h 都要替换,你 ...

好了,是conf.h未替换,谢谢!

使用特权

评论回复
5
hudi008| | 2022-5-16 10:38 | 只看该作者
乱码就是波特率的问题。   

使用特权

评论回复
6
vivilyly| | 2022-5-16 11:02 | 只看该作者
AT32F407VGT7 串口没有问题的。  

使用特权

评论回复
7
ingramward| | 2022-5-16 11:48 | 只看该作者
你的时钟是怎么配置的呢  

使用特权

评论回复
8
uiint| | 2022-5-16 12:14 | 只看该作者
是传输的速度太快了吗  

使用特权

评论回复
9
muyichuan2012| | 2022-5-16 12:14 | 只看该作者
  地板 楼层已回复可以了。conf.h没更新导致。

使用特权

评论回复
10
selongli| | 2022-5-16 13:06 | 只看该作者
25MHz不好配置波特率吧   

使用特权

评论回复
11
muyichuan2012| | 2022-5-16 13:12 | 只看该作者
本帖最后由 muyichuan2012 于 2022-5-16 14:06 编辑

用雅特力时钟配置工具,25MHz等各种晶振都是很好配置的。
USART波特率的话,由于25MHz配置的主频也是240MHz,因此USART的配置是没有区别的。
该楼主的问题是没有更新conf.h 里外部晶振的宏大小。现在已ok.




使用特权

评论回复
12
earlmax| | 2022-5-16 13:58 | 只看该作者
外部晶振25MHz?  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

9

帖子

0

粉丝