有些外设的寄存器里使能/禁止的功能位:如ADC,有些外设的寄存器里专用关闭功能位,如USB,在关闭这些外设时,需先使用其内部的寄存器的关闭功能,然后再关闭其时钟。
USB是一个特殊外设: 请看附图,图中蓝色框内的时钟是48MHz,其来源是直接来之PLL(见附图的下半部),其余框中部分的时钟来自APB1,你使用RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, DISABLE);只是关闭这部分外设;而图中红色部分的并没有关闭,这一部分是模拟部分,所以你需要使用USB控制寄存器(USB_CNTR)中的PDWN位来关闭该模块(PDWN位---断电模式位;此模式用于彻底关闭USB模块。当此位被置位时,不能使用USB模块。0:退出断电模式;1:进入断电模式。)
下面使用关闭该功能的源代码: /************************************************ * Function Name : PowerOff * Description : handles switch-off conditions * Input : None. * Output : None. * Return : USB_SUCCESS. ************************************************/ RESULT PowerOff() { /* disable all ints and force USB reset */ _SetCNTR(CNTR_FRES); /* clear interrupt status register */ _SetISTR(0); /* Disable the Pull-Up*/ USB_Cable_Config(DISABLE); /* switch-off device */ _SetCNTR(CNTR_FRES + CNTR_PDWN); /* sw variables reset */ /* ... */
return USB_SUCCESS; }
|