为了能用示波器看到系统时钟,决定将系统时钟输出到MCO引脚上去。
弄了一晚上,看见波形了。首先建立空的工程,将下面三行代码注释掉: ;IMPORT SystemInit ;删除SystemInit自己写RCC初始化函数 ;LDR R0, =SystemInit ;BLX R0 下面是设置函数,使用HSI作为系统时钟,不实用PLL,直接将HSI输出到MCO引脚:void My_RccInitMCOHSI(void){ uint8_t temp; My_Rcc_DeInit(); RCC->CR |= 1<<0; //复位HSION 开启内部时钟;其实内部时钟不用管的,开机自动使用内部时钟。 while(!(RCC->CR>>1)); //检查HSI是否就绪 RCC->CFGR &= (~0x03); //清零CFGR的0、1位 HSI作为系统时钟 while(temp!=0x00) //读取CFGR的2、3为,判断是否是HSI作为系统时钟设置 { temp=RCC->CFGR>>2; temp&=0x03; } //此时HSI已经成为系统时钟 //HSI时钟就绪后,直接输出到MCO(PA8) RCC->APB2ENR |= 1<<2; //使能PA时钟 RCC->APB2ENR|=1<<5; //使能PORTD时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO) // //设置MCO输出内部HSI时钟 RCC->CFGR |= 5<<24; //MCO输出HSI时钟 //RCC->CFGR |= 4<<24; MCO输出系统时钟SYSCLK //此时就可以在PA8即MCO引脚看见输出波形了 对比下,两者是一样的。}下边是示波器出来的图:
HSE直接作为SYSCLK。与HSI相似
设置方法如下,代码中有注释:void My_RccInitMCOHSE(void){ uint8_t temp; My_Rcc_DeInit(); RCC->CR |= 1<<16; //开启HSEON 开启外部时钟。while(!(RCC->CR>>17)); //等待HSE就绪//选择HSE作为系统时钟
RCC->CFGR |= 0x01;while(temp!=0x01) //读取CFGR的2、3为,判断是否是HSE作为系统时钟设置
{ temp=RCC->CFGR>>2; temp&=0x03; } //此时HSE已经成为系统时钟 //HSE时钟就绪后,直接输出到MCO(PA8) RCC->APB2ENR |= 1<<2; //使能PA时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO)//设置MCO输出内部HSE时钟
RCC->CFGR |= 0x06<<24; //MCO输出HSE时钟 //RCC->CFGR |= 4<<24; MCO输出系统时钟SYSCLK //此时就可以在PA8即MCO引脚看见输出波形了 对比下,两者是一样的。}PLL部分只放代码和图,刚才写了半天,提示2分钟只能提交5次信息,然后就没了。
郁闷的不想再写了void My_RccInitMCOPLL(uint8_t PLL){ uint8_t temp; My_Rcc_DeInit(); RCC->CR |= 1<<16; //开启HSEON 开启外部时钟。 while(!(RCC->CR>>17)); //等待HSE就绪 //选择HSE作为系统时钟 //RCC->CFGR |= 0x01; //设置PLL倍频数 PLL -= 2; //根据PLL倍频系数与RCC->CFGR的18到21位得出(PLLMUL) RCC->CFGR |= PLL<<18; RCC->CFGR |= 1<<16; //HSE作为PLL时钟源 RCC->CR |= 1<<24; while(!(RCC->CR>>25));//等待PLL锁定 //选择PLL输出作为系统时钟源 RCC->CFGR |= 0x02; while(temp!=0x02) //读取CFGR的2、3为,判断是否是HSE作为系统时钟设置 { temp=RCC->CFGR>>2; temp&=0x03; } //此时HSE已经成为系统时钟 //HSE时钟就绪后,直接输出到MCO(PA8) RCC->APB2ENR |= 1<<2; //使能PA时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO) //设置MCO输出内部HSE时钟 RCC->CFGR |= 0x07<<24; //MCO输出HSE时钟 //RCC->CFGR |= 4<<24; // MCO输出系统时钟SYSCLK //此时就可以在PA8即MCO引脚看见输出波形了 对比下,两者是一样的。}
Technorati 标签: , ,