stm32f103zet6时钟
voidRCC_HSE_Configuration(void) //HSE作为PLL时钟,PLL作为SYSCLK
{
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON);
/*设置外部高速晶振(HSE) HSE晶振打开(ON)*/
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON);
/*设置外部高速晶振(HSE) HSE晶振打开(ON)*/
if(RCC_WaitForHSEStartUp() == SUCCESS)
{
/*等待HSE起振, SUCCESS:HSE晶振稳定且就绪*/
/*等待HSE起振, SUCCESS:HSE晶振稳定且就绪*/
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/*设置AHB时钟(HCLK)RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
/*设置AHB时钟(HCLK)RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
RCC_PCLK2Config(RCC_HCLK_Div1);
/*设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/
/*设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/
RCC_PCLK1Config(RCC_HCLK_Div2);
/*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
/*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
/*设置PLL时钟源及倍频系数*/
/*设置PLL时钟源及倍频系数*/
RCC_PLLCmd(ENABLE); /*使能PLL */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) ==RESET) ;
/*检查指定的RCC标志位(PLL准备好标志)设置与否*/
/*检查指定的RCC标志位(PLL准备好标志)设置与否*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/*设置系统时钟(SYSCLK) */
/*设置系统时钟(SYSCLK) */
while(RCC_GetSYSCLKSource() != 0x08);
/*0x08:PLL作为系统时钟 */
/*0x08:PLL作为系统时钟 */
}
}
首先设置好系统时钟源与频率等问题后,设置计数器。
void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i;
//设置重装数值, 72MHZ时
SysTick->CTRL=0X01;
//使能,减到零是无动作,采用外部时钟源
SysTick->VAL=0;
//清零计数器
do
{
temp=SysTick->CTRL;
//读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16))));
//等待时间到达
SysTick->CTRL=0;
//关闭计数器
SysTick->VAL=0;
//清空计数器
}