Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
rt-thread
提交
bae79275
R
rt-thread
项目概览
BaiXuePrincess
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
bae79275
编写于
7月 14, 2018
作者:
lymzzyh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Bsp][STM32F4xx-HAL]Fix Clock tree Support HSI| 修复时钟树,支持HSI
上级
b0dbdf42
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
51 addition
and
24 deletion
+51
-24
bsp/stm32f4xx-HAL/Kconfig
bsp/stm32f4xx-HAL/Kconfig
+1
-1
bsp/stm32f4xx-HAL/drivers/board.c
bsp/stm32f4xx-HAL/drivers/board.c
+50
-23
未找到文件。
bsp/stm32f4xx-HAL/Kconfig
浏览文件 @
bae79275
...
...
@@ -287,7 +287,7 @@ config RT_USING_HSI
bool "Using HSI as clock source"
default n
config BSP_HSE_BY_PASS
bool "H
ES
Bypass"
bool "H
SE
Bypass"
depends on !RT_USING_HSI
default n
config RT_HSE_VALUE
...
...
bsp/stm32f4xx-HAL/drivers/board.c
浏览文件 @
bae79275
...
...
@@ -18,9 +18,6 @@
* @addtogroup STM32
*/
/*@{*/
#ifdef RT_USING_HSI
#error Can not using HSI on this bsp
#endif
#if defined(RCC_PERIPHCLK_SDIO) || defined(RCC_PERIPHCLK_CEC) || defined(RCC_PERIPHCLK_LTDC)\
|| defined(RCC_PERIPHCLK_SPDIFRX) || defined(RCC_PERIPHCLK_FMPI2C1) || defined(RCC_PERIPHCLK_LPTIM1)
#warning Please give priority to the correctness of the clock tree when the peripherals are abnormal
...
...
@@ -28,11 +25,18 @@
static
void
SystemClock_Config
(
void
)
{
rt_uint32_t
hse_clk
,
sys_clk
;
#if (RT_HSE_VALVE % 1000000 != 0)
rt_uint32_t
source_clk
,
sys_clk
;
#if !defined(RT_USING_HSI) && (RT_HSE_VALVE % 1000000 != 0)
#error HSE must be integer of MHz
#endif
hse_clk
=
HSE_VALUE
/
1000000UL
;
#ifdef RT_USING_HSI
#define CLOCK_SOURE_VALUE HSI_VALUE
#else
#define CLOCK_SOURE_VALUE HSE_VALUE
#endif
source_clk
=
CLOCK_SOURE_VALUE
/
1000000UL
;
sys_clk
=
HCLK_VALUE
/
1000000UL
;
RCC_OscInitTypeDef
RCC_OscInitStruct
;
RCC_ClkInitTypeDef
RCC_ClkInitStruct
;
...
...
@@ -45,27 +49,35 @@ static void SystemClock_Config(void)
__HAL_PWR_VOLTAGESCALING_CONFIG
(
PWR_REGULATOR_VOLTAGE_SCALE1
);
/**Initializes the CPU, AHB and APB busses clocks
*/
#ifdef RT_USING_HSI
RCC_OscInitStruct
.
OscillatorType
=
RCC_OSCILLATORTYPE_HSI
;
#else
RCC_OscInitStruct
.
OscillatorType
=
RCC_OSCILLATORTYPE_HSE
;
#endif
#ifdef RT_USING_RTC
RCC_OscInitStruct
.
OscillatorType
|=
RCC_OSCILLATORTYPE_LSI
;
RCC_OscInitStruct
.
LSIState
=
RCC_LSI_ON
;
#endif
#ifdef RT_USING_HSI
RCC_OscInitStruct
.
HSIState
=
RCC_HSI_ON
;
RCC_OscInitStruct
.
HSICalibrationValue
=
source_clk
;
#else
#ifdef BSP_HSE_BY_PASS
RCC_OscInitStruct
.
HSEState
=
RCC_HSE_BYPASS
;
#el
if !defined(RT_USING_HSI)
#el
se
RCC_OscInitStruct
.
HSEState
=
RCC_HSE_ON
;
#endif
#endif
RCC_OscInitStruct
.
PLL
.
PLLState
=
RCC_PLL_ON
;
#ifdef RT_USING_HSI
RCC_OscInitStruct
.
PLL
.
PLLSource
=
RCC_PLLSOURCE_HSI
;
#else
RCC_OscInitStruct
.
PLL
.
PLLSource
=
RCC_PLLSOURCE_HSE
;
if
(
hse_clk
%
2
==
0
)
#endif
if
(
source_clk
%
2
==
0
)
{
RCC_OscInitStruct
.
PLL
.
PLLM
=
hse_clk
/
2
;
//Get 2M clock
if
((
sys_clk
*
2
)
%
48
==
0
)
{
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
;
//Get 2*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV2
;
//Get HCLK_VALUE
}
else
if
((
sys_clk
*
4
)
%
48
==
0
)
RCC_OscInitStruct
.
PLL
.
PLLM
=
source_clk
/
2
;
//Get 2M clock
if
((
sys_clk
*
4
)
%
48
==
0
)
{
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
*
2
;
//Get 4*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV4
;
//Get HCLK_VALUE
...
...
@@ -80,16 +92,17 @@ static void SystemClock_Config(void)
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
*
4
;
//Get 8*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV8
;
//Get HCLK_VALUE
}
}
else
{
RCC_OscInitStruct
.
PLL
.
PLLM
=
hse_clk
;
//Get 1M clock
if
((
sys_clk
*
2
)
%
48
==
0
)
else
{
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
*
2
;
//Get 2*HCLK_VALUE
//can not get 48M Clock USB is unuseable
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
;
//Get 2*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV2
;
//Get HCLK_VALUE
}
else
if
((
sys_clk
*
4
)
%
48
==
0
)
}
else
{
RCC_OscInitStruct
.
PLL
.
PLLM
=
source_clk
;
//Get 1M clock
if
((
sys_clk
*
4
)
%
48
==
0
)
{
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
*
4
;
//Get 4*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV4
;
//Get HCLK_VALUE
...
...
@@ -104,8 +117,14 @@ static void SystemClock_Config(void)
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
*
8
;
//Get 8*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV8
;
//Get HCLK_VALUE
}
else
{
//can not get 48M Clock USB is unuseable
RCC_OscInitStruct
.
PLL
.
PLLN
=
sys_clk
*
2
;
//Get 2*HCLK_VALUE
RCC_OscInitStruct
.
PLL
.
PLLP
=
RCC_PLLP_DIV2
;
//Get HCLK_VALUE
}
}
RCC_OscInitStruct
.
PLL
.
PLLQ
=
hs
e_clk
/
RCC_OscInitStruct
.
PLL
.
PLLM
*
RCC_OscInitStruct
.
PLL
.
PLLN
/
48
;
//Get 48M Clock
RCC_OscInitStruct
.
PLL
.
PLLQ
=
sourc
e_clk
/
RCC_OscInitStruct
.
PLL
.
PLLM
*
RCC_OscInitStruct
.
PLL
.
PLLN
/
48
;
//Get 48M Clock
if
(
HAL_RCC_OscConfig
(
&
RCC_OscInitStruct
)
!=
HAL_OK
)
{
while
(
1
)
...
...
@@ -133,6 +152,14 @@ static void SystemClock_Config(void)
while
(
1
)
{}
}
#elif (RT_HSE_HCLK <= 100000000UL)
RCC_ClkInitStruct
.
APB1CLKDivider
=
RCC_HCLK_DIV2
;
RCC_ClkInitStruct
.
APB2CLKDivider
=
RCC_HCLK_DIV1
;
if
(
HAL_RCC_ClockConfig
(
&
RCC_ClkInitStruct
,
FLASH_LATENCY_3
)
!=
HAL_OK
)
{
while
(
1
)
{}
}
#elif (RT_HSE_HCLK <= 168000000UL)
RCC_ClkInitStruct
.
APB1CLKDivider
=
RCC_HCLK_DIV4
;
RCC_ClkInitStruct
.
APB2CLKDivider
=
RCC_HCLK_DIV2
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录