RT-Thread Studio----STM32F107学习笔记1-- 使用外部时钟源(HSE)

1、通过RT-Thread studio建好STM32F107的工程后,我们会发现,在drivers/drv_clk.c中系统默认使用的时钟源是内部高速时钟(HSI),如下图所示;

 2、此处我们将HSI时钟源修改为HSE时钟源,首先找到board.h,在board.h中找到如下代码;

#define BSP_CLOCK_SOURCE                  ("HSI")
#define BSP_CLOCK_SOURCE_FREQ_MHZ         ((int32_t)0)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ         ((int32_t)72)

3、将上面代码修改为如下代码(其实此处作用不大,可以通过源码查看,最后没有用到此单行);

#define BSP_CLOCK_SOURCE                  ("HSE")
#define BSP_CLOCK_SOURCE_FREQ_MHZ         ((int32_t)8)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ         ((int32_t)72)

 4、在STM32CubeMX下配置时钟源为外部时钟(注:没有此软件可以去stm32官网下载),也可以点击下列链接,然后进行相关软件下载;STM32微控制器软件 - 意法半导体STMicroelectronicsicon-default.png?t=N6B9https://www.st.com/zh/embedded-software/stm32-embedded-software.html5、下载好软件之后,然后新建工程(此处不描述新建过程),新建好工程之后,选中Clock Configuration选项,我们发现目前无法配置HSE;

 6、切换到Pinout & Configuration选项配置RCC相关选项。

     6.1 配置HSE和LSE引脚,首先根据原理图找出HSE和LSE引脚,如下图所示:(注:LSE是给RTC供电,如用不到也可不配置)

    6.2 然后在STM32CubeMX中进行配置,可以根据原理图搜索对应的位置,然后点击相应引脚选择相应选项即可,如下图所示:

 

     6.3 然后再配置RCC时钟,如下图所示:

7、 再回到Clock Configuration选项,此时HSE就可以进行配置了,此处我选择的外部晶振为25Mhz,你也可以选择8Mhz,根据你的单片机实际时钟确定,如果时钟树中框为红色,则代表超出实际时钟源,将其设置时钟源即可,然后点击第三步生成代码,如下图所示(注:此处配置要根据单片机实际情况配置,不能完全参照下图配置);

 8、打开刚刚生成的代码工程,找到main.c中的SystemClock_Config函数,然后将SystemClock_Config中的所有代码复制,然后替换至rtthread studio 中 drv_clk.c的system_clock_config函数中,如下所示:

void system_clock_config(int target_freq_Mhz)
{

     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
     RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

     /** Initializes the RCC Oscillators according to the specified parameters
     * in the RCC_OscInitTypeDef structure.
     */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
     RCC_OscInitStruct.HSEState = RCC_HSE_ON;
     RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5;
     RCC_OscInitStruct.LSEState = RCC_LSE_ON;
     RCC_OscInitStruct.HSIState = RCC_HSI_ON;
     RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2;
     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
     RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
     RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON;
     RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8;
     RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5;
     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
     {
       Error_Handler();
     }
     /** Initializes the CPU, AHB and APB buses clocks
     */
     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
     {
       Error_Handler();
     }
     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
     PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
     {
       Error_Handler();
     }
     /** Configure the Systick interrupt time
     */
     __HAL_RCC_PLLI2S_ENABLE();
}

9、配置此步之后,还需要配置一步,(很多示例没有标明此步,导致程序出现问题),在drivers文件夹下找到stm32f1xx_hal_conf.h文件,然后找到如下代码:

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */

将其修改之前配置的时钟源频率,此处我配置的25Mhz,因此需要修改为25hz,如下所示:

#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */

10、修改完之后,下载程序验证成功。也可以在drv_clk.c中将#define DBG_LVL DBG_INFO修改为#define DBG_LVL DBG_LOG,就可以将drv_clk.c中clock_information函数中的时钟信息打印出来

msh >[0m[D/board] System Clock information[0m
[0m[D/board] SYSCLK_Frequency = 72000000[0m
[0m[D/board] HCLK_Frequency   = 72000000[0m
[0m[D/board] PCLK1_Frequency  = 36000000[0m
[0m[D/board] PCLK2_Frequency  = 72000000[0m

 \ | /
- RT -     Thread Operating System
 / | \     4.0.2 build Jul 26 2023
 2006 - 2019 Copyright by rt-thread team
msh >

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值