初级会员

- 积分
- 77
- 金钱
- 77
- 注册时间
- 2015-9-25
- 在线时间
- 4 小时
|
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接收数据)
要学的东西很多,一个人学太慢,因此:
希望能和同行交流,请高手请不吝赐教
|
|