当前位置:   article > 正文

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

rt-thread studio hse时钟

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

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

  1. #define BSP_CLOCK_SOURCE ("HSI")
  2. #define BSP_CLOCK_SOURCE_FREQ_MHZ ((int32_t)0)
  3. #define BSP_CLOCK_SYSTEM_FREQ_MHZ ((int32_t)72)

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

  1. #define BSP_CLOCK_SOURCE ("HSE")
  2. #define BSP_CLOCK_SOURCE_FREQ_MHZ ((int32_t)8)
  3. #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函数中,如下所示:

  1. void system_clock_config(int target_freq_Mhz)
  2. {
  3. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  4. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  5. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  6. /** Initializes the RCC Oscillators according to the specified parameters
  7. * in the RCC_OscInitTypeDef structure.
  8. */
  9. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
  10. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  11. RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5;
  12. RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  13. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  14. RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2;
  15. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  16. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  17. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  18. RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON;
  19. RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8;
  20. RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5;
  21. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  22. {
  23. Error_Handler();
  24. }
  25. /** Initializes the CPU, AHB and APB buses clocks
  26. */
  27. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  28. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  29. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  30. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  31. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  32. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  33. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  34. {
  35. Error_Handler();
  36. }
  37. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
  38. PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
  39. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  40. {
  41. Error_Handler();
  42. }
  43. /** Configure the Systick interrupt time
  44. */
  45. __HAL_RCC_PLLI2S_ENABLE();
  46. }

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

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

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

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

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

  1. msh >[0m[D/board] System Clock information[0m
  2. [0m[D/board] SYSCLK_Frequency = 72000000[0m
  3. [0m[D/board] HCLK_Frequency = 72000000[0m
  4. [0m[D/board] PCLK1_Frequency = 36000000[0m
  5. [0m[D/board] PCLK2_Frequency = 72000000[0m
  6. \ | /
  7. - RT - Thread Operating System
  8. / | \ 4.0.2 build Jul 26 2023
  9. 2006 - 2019 Copyright by rt-thread team
  10. msh >

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/478610
推荐阅读
相关标签
  

闽ICP备14008679号