OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2791|回复: 1

STM32F10X系统时钟配置函数,是对RCC的相关函数的封装,用户只需要传入结构体参数,就能完成系统时钟的所有配置

[复制链接]

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2015-9-25
在线时间
4 小时
发表于 2015-9-26 11:07:24 | 显示全部楼层 |阅读模式
stm32f10x_rcc.c函数提供了所有rcc的相关设置.其实已经很好用了.
只是作为用户,希望有更整体的封装,用户只要传入相应的参数,其余的事都交由一个函数完成.
函数格式:
/*
参数范围:
uint8_t rcc_src; //RCC时钟源: RCC_HSI, RCC_HSE
FunctionalState pll_onoff; //PLL开关: ENABLE, DISABLE
uint32_t pll_src; //PLL时钟源: RCC_PLLSource_HSI_Div2, RCC_PLLSource_HSE_Div1, CC_PLLSource_HSE_Div2
uint32_t pll_mult; //PLL倍频: RCC_PLLMul_2~16
uint32_t sysclk_div_hclk; //SysCLK->HCLK时的分频: RCC_SYSCLK_Div1,2,4,8,16,32,64,128,256,512
uint32_t hclk_div_pclk1; //HCLK->CLK1时的分频: RCC_HCLK_Div1,2,4,8,16
uint32_t hclk_div_pclk2; //HCLK->CLK2时的分频: RCC_HCLK_Div1,2,4,8,16
FunctionalState  hsi_rdy_int_onoff; //HSI就绪中断开关; ENABLE, DISABLE
FunctionalState  hse_rdy_int_onoff; //HSE就绪中断开关; ENABLE, DISABLE
FunctionalState  pll_rdy_int_onoff; //PLL就绪中断开关; ENABLE, DISABLE
uint8_t mco_out; //MCO输出: RCC_MCO_NoClock, RCC_MCO_SYSCLK, RCC_MCO_HSI, RCC_MCO_HSE, RCC_MCO_PLLCLK_Div2
*/
void sys_clk_config(SYS_Clk_Cfg_TypeDef *sys_clk);
其实无论是谁要配置系统时钟,都是设置上面列举的内容; 应该有一个函数,只需要传入这些参数,就能在内部完成所有的设置; 这也是我写这个封装函数的初衷

用户只要先填写好所有参数,再调用该函数,就能完成所有的配置
参数填写:
SYS_Clk_Cfg_TypeDef  sys_clk_cfg_str;
//尽量使用外部OSC(内部OSC不精确,SWO输出时经常丢帧)
//配置RCC: HSI,HSE,PLL,SYSCLK,HCLK,PCLK1/2
sys_clk_cfg_str.rcc_src = RCC_HSE; //8MHz
sys_clk_cfg_str.pll_onoff = ENABLE;
sys_clk_cfg_str.pll_src = RCC_PLLSource_HSE_Div2; //4MHz
sys_clk_cfg_str.pll_mult = RCC_PLLMul_16; //sys_clk = 64MHZ
sys_clk_cfg_str.sysclk_div_hclk = RCC_SYSCLK_Div1; //HCLK = sys_clk / 1 = 64MHz
sys_clk_cfg_str.hclk_div_pclk1 = RCC_HCLK_Div4; //PCLK1 = HCLK / 4 = 16MHz
sys_clk_cfg_str.hclk_div_pclk2 = RCC_HCLK_Div4; //PCLK2 = HCLK / 4 = 16MHz
sys_clk_cfg_str.hsi_rdy_int_onoff = DISABLE;
sys_clk_cfg_str.hse_rdy_int_onoff = DISABLE;
sys_clk_cfg_str.pll_rdy_int_onoff = DISABLE;
sys_clk_cfg_str.mco_out = RCC_MCO_PLLCLK_Div2; //PLL/2 = HCLK/2 = 32MHz    MCO输出: RCC_MCO_NoClock, RCC_MCO_SYSCLK, RCC_MCO_HSI, RCC_MCO_HSE, RCC_MCO_PLLCLK_Div2
sys_clk_config(&sys_clk_cfg_str); //系统clk设置;仅针对通用型

这样就配置完成了
函数格式是按照stm32f10x的固件库格式写的,所以参数是结构体指针

附件中是源码

说明:我所写的所有函数,在执行时相关的重要信息都输出到ITM_SWO指定的端口了,这样方便查看程序的执行情况和所有资源的配置情况,因此附件中有cm3的ITM_SWO的相关支持文件,具体请查看我的另一个分享帖: cortex-m3的ITM功能:调试信息格式化输出(SWD调试时的SWO引脚输出调试信息,JLinkSWOViewer.exe接收数据)

要学的东西很多,一个人学太慢,因此:
希望能和同行交流,请高手请不吝赐教



sys_clk_cfg.c

11.8 KB, 下载次数: 40

cm3_fw_self_config.h

4.73 KB, 下载次数: 34

stm32_fw_self_config.h

971 Bytes, 下载次数: 39

cm3_debug.c

11.12 KB, 下载次数: 17

cm3_debug.h

2.78 KB, 下载次数: 20

sys_clk_cfg.h

1.72 KB, 下载次数: 20

供大家参考,希望和同行交流经验
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2015-9-26 11:14:10 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 03:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表