时钟图
本文引用地址:/zixunimg/eepwimg/www.eepw.com.cn/article/201611/321735.htm
//rcc_hseconfig(rcc_hse_off); // 关闭外部时钟
//rcc_hseconfig(rcc_hse_on);//开启外部时钟
//rcc_hsicmd(enable);// 开启内部时钟
//rcc_hsicmd(disable);// 开启内部时钟
//双高级外设总线结构:高速apb(apb2)速度达到72mhz、低速apb(apb1)速度达到36mhz。
//允许用户优化外设的使用(18mhz的spi、4.5mbps的usart、72mhz的pwm定时器、18mhz触发i/o口)。

//rcc_pllconfig(rcc_pllsource_hse_div1, rcc_pllmul_8); // 使用外部时钟源f,倍频输出等于 f*8/1
//rcc_pllconfig(rcc_pllsource_hsi_div2, rcc_pllmul_8); // 使用内部时钟源f,倍频输出等于 f*8/2
void rcc_configuration(void)
{
rcc_deinit();//将外设rcc寄存器重设为缺省值(即默认值)
rcc_hseconfig(rcc_hse_on);//打开外部晶振
if(rcc_waitforhsestartup() == success) //判断起振是否成功
{
rcc_hclkconfig(rcc_sysclk_div1); //设置ahb时钟(hclk)(这时设置为=系统时钟)
rcc_pclk2config(rcc_hclk_div1); //设置高速ahb时钟(hclk2)(这时设置为=hclk)
rcc_pclk1config(rcc_hclk_div2);//设置低速ahv时钟(hclk1)(这时设置为=hclk/2)
flash_setlatency(flash_latency_2);//设置flash存储器延时时钟周期数。(设置为延时2个时钟周期)
flash_prefetchbuffercmd(flash_prefetchbuffer_enable);//使能预取指缓存
rcc_pllconfig(rcc_pllsource_hse_div1, rcc_pllmul_9);//pll的时钟来源及倍频的倍数
while(rcc_getflagstatus(rcc_flag_pllrdy) == reset) //检测pll是否就绪
{
}
rcc_sysclkconfig(rcc_sysclksource_pllclk); //设置pll为系统时钟
while(rcc_getsysclksource() != 0x08) //检测系统的时钟源是否是pll
{
}
}
rcc_apb2periphclockcmd(rcc_apb2periph_usart1 | rcc_apb2periph_gpioa, enable);//使能usart gpioa时钟
}