54 #define RCC_PLL_REF_FREQ ((uint32_t)1000000)
55 #define RCC_PLL_DIV_EN_FREQ ((uint32_t)60000000)
65 #define RCC_PLL_CTRL_Reset_Value ((uint32_t)0x00000000)
66 #define RCC_PLL_OD_Reset_Value ((uint32_t)0x00000000)
67 #define RCC_PLL_NR_Reset_Value ((uint32_t)0x00000000)
68 #define RCC_PLL_NF_Reset_Value ((uint32_t)0x00000000)
88 static uint32_t RCC_WaitClkChange(RCC_SysClk_TypeDef RCC_SysClk)
158 uint32_t pll_div = 0;
174 if (NT_COMMON_REG->USB_CTRL_bit.FSEL)
176 f_in = (uint32_t)(24000000);
180 f_in = (uint32_t)(12000000);
185 f_in = (uint32_t)(60000000);
189 f_in = (uint32_t)(25000000);
196 pll_div_cmd = ENABLE;
200 if (pll_div_cmd == DISABLE)
218 while(pll_stable_wait)
223 if (pll_div_cmd == DISABLE)
272 NT_COMMON_REG->PLL_CTRL_bit.REFSEL = ((uint32_t)(RCC_PLLInit_Struct->
RCC_PLLRef));
273 NT_COMMON_REG->PLL_CTRL_bit.PLL_DIV = RCC_PLLInit_Struct->
RCC_PLLDiv;
274 NT_COMMON_REG->PLL_OD = ((uint32_t)(RCC_PLLInit_Struct->
RCC_PLLNO));
275 NT_COMMON_REG->PLL_NF = RCC_PLLInit_Struct->
RCC_PLLNF - 2;
276 NT_COMMON_REG->PLL_NR = RCC_PLLInit_Struct->
RCC_PLLNR - 2;
320 if (State == DISABLE)
322 NT_COMMON_REG->PLL_CTRL_bit.PD = 0;
324 else if (State == ENABLE)
326 NT_COMMON_REG->PLL_CTRL_bit.PD = 1;
352 NT_COMMON_REG->APB_CLK |= RCC_PeriphClk;
354 else if (State == DISABLE)
356 NT_COMMON_REG->APB_CLK &= ~RCC_PeriphClk;
375 NT_COMMON_REG->SYS_CLK = ((uint32_t)RCC_SysClk);
377 timeout = RCC_WaitClkChange(RCC_SysClk);
398 return((
RCC_SysClk_TypeDef)((NT_COMMON_REG->SYS_CLK)>>COMMON_REG_SYS_CLK_CURR_SRC_Pos));
422 __IO _COMMON_REG_USB_CTRL_bits Bits;
425 USB_CTRL_Shadow.Bits.FSEL = (uint32_t)RCC_USBFreq;
426 USB_CTRL_Shadow.Bits.CLKSEL = (uint32_t)RCC_USBClk;
429 USB_CTRL_Shadow.Bits.CLKEN = 1;
431 else if (State == DISABLE)
433 USB_CTRL_Shadow.Bits.CLKEN = 0;
436 NT_COMMON_REG->USB_CTRL = USB_CTRL_Shadow.Value;
455 if (UARTx == NT_UART0)
457 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART0_Pos;
459 else if (UARTx == NT_UART1)
461 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART1_Pos;
463 else if (UARTx == NT_UART2)
465 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART2_Pos;
469 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_UART3_Pos;
472 NT_COMMON_REG->UART_SPI_CLK_SEL &= ~(3<<offset);
473 NT_COMMON_REG->UART_SPI_CLK_SEL |= (RCC_UARTClk<<offset);
496 if (UARTx == NT_UART0)
498 offset = COMMON_REG_UART_CLK_DIVEN_UART0_Pos;
500 else if (UARTx == NT_UART1)
502 offset = COMMON_REG_UART_CLK_DIVEN_UART1_Pos;
504 else if (UARTx == NT_UART2)
506 offset = COMMON_REG_UART_CLK_DIVEN_UART2_Pos;
510 offset = COMMON_REG_UART_CLK_DIVEN_UART3_Pos;
513 NT_COMMON_REG->UART_CLK &= ~(0x7F << offset);
514 NT_COMMON_REG->UART_CLK |= (DivVal << (offset+1)) | (DivState << offset);
533 if (UARTx == NT_UART0)
535 offset = COMMON_REG_UART_CLK_CLKEN_UART0_Pos;
537 else if (UARTx == NT_UART1)
539 offset = COMMON_REG_UART_CLK_CLKEN_UART1_Pos;
541 else if (UARTx == NT_UART2)
543 offset = COMMON_REG_UART_CLK_CLKEN_UART2_Pos;
547 offset = COMMON_REG_UART_CLK_CLKEN_UART3_Pos;
552 NT_COMMON_REG->UART_CLK |= (1 << offset);
554 else if (State == DISABLE)
556 NT_COMMON_REG->UART_CLK &= ~(1 << offset);
578 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI0_Pos;
580 else if (SPIx == NT_SPI1)
582 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI1_Pos;
584 else if (SPIx == NT_SPI2)
586 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI2_Pos;
590 offset = COMMON_REG_UART_SPI_CLK_SEL_SEL_SPI3_Pos;
593 NT_COMMON_REG->UART_SPI_CLK_SEL &= ~(3<<offset);
594 NT_COMMON_REG->UART_SPI_CLK_SEL |= (RCC_SPIClk<<offset);
620 offset = COMMON_REG_SPI_CLK_DIVEN_SPI0_Pos;
622 else if (SPIx == NT_SPI1)
624 offset = COMMON_REG_SPI_CLK_DIVEN_SPI1_Pos;
626 else if (SPIx == NT_SPI2)
628 offset = COMMON_REG_SPI_CLK_DIVEN_SPI2_Pos;
632 offset = COMMON_REG_SPI_CLK_DIVEN_SPI3_Pos;
635 NT_COMMON_REG->SPI_CLK &= ~(0x7F << offset);
636 NT_COMMON_REG->SPI_CLK |= (DivVal << (offset+1)) | (DivState << offset);
657 offset = COMMON_REG_SPI_CLK_CLKEN_SPI0_Pos;
659 else if (SPIx == NT_SPI1)
661 offset = COMMON_REG_SPI_CLK_CLKEN_SPI1_Pos;
663 else if (SPIx == NT_SPI2)
665 offset = COMMON_REG_SPI_CLK_CLKEN_SPI2_Pos;
669 offset = COMMON_REG_SPI_CLK_CLKEN_SPI3_Pos;
674 NT_COMMON_REG->SPI_CLK |= (1 << offset);
676 else if (State == DISABLE)
678 NT_COMMON_REG->SPI_CLK &= ~(1 << offset);
697 volatile uint32_t* ctrl_reg;
706 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC0_Pos;
707 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
711 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC1_Pos;
712 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
716 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC2_Pos;
717 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
721 offset = COMMON_REG_ADC_CTRL0_DIVEN_ADC3_Pos;
722 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
726 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC4_Pos;
727 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
731 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC5_Pos;
732 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
736 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC6_Pos;
737 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
741 offset = COMMON_REG_ADC_CTRL1_DIVEN_ADC7_Pos;
742 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
746 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC8_Pos;
747 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
751 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC9_Pos;
752 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
756 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC10_Pos;
757 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
761 offset = COMMON_REG_ADC_CTRL2_DIVEN_ADC11_Pos;
762 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
765 *ctrl_reg &= ~(0x7F << offset);
766 *ctrl_reg |= (DivVal << (offset+1)) | (DivState << offset);
781 volatile uint32_t* ctrl_reg;
789 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC0_Pos;
790 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
794 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC1_Pos;
795 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
799 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC2_Pos;
800 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
804 offset = COMMON_REG_ADC_CTRL0_CLKEN_ADC3_Pos;
805 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL0);
809 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC4_Pos;
810 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
814 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC5_Pos;
815 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
819 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC6_Pos;
820 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
824 offset = COMMON_REG_ADC_CTRL1_CLKEN_ADC7_Pos;
825 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL1);
829 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC8_Pos;
830 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
834 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC9_Pos;
835 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
839 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC10_Pos;
840 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
844 offset = COMMON_REG_ADC_CTRL2_CLKEN_ADC11_Pos;
845 ctrl_reg = &(NT_COMMON_REG->ADC_CTRL2);
850 *ctrl_reg |= (1 << offset);
852 else if (State == DISABLE)
854 *ctrl_reg &= ~(1 << offset);
870 volatile uint32_t* ctrl_reg;
879 ctrl_reg = &(NT_COMMON_REG->PER_RST0);
883 ctrl_reg = &(NT_COMMON_REG->PER_RST1);
889 *ctrl_reg |= (1<<(RCC_PeriphRst-offset));
891 else if (State == DISABLE)
893 *ctrl_reg &= ~(1<<(RCC_PeriphRst-offset));
RCC_UARTClk_TypeDef
Выбор источника тактирования для UART.
void RCC_SPIClkCmd(NT_SPI_TypeDef *SPIx, FunctionalState State)
Включение тактирования SPI.
RCC_PLLRef_TypeDef
Выбор источника опорного сигнала PLL.
OperationStatus
Описывает коды возврата для функций при выполнении какой-либо операции.
RCC_SysClk_TypeDef RCC_SysClkStatus(void)
Текущий источник системного тактового сигнала.
#define IS_RCC_PLL_REF(PLL_REF)
Макрос проверки аргументов типа RCC_PLLRef_TypeDef.
RCC_ADCClk_TypeDef
Выбор модуля ADC для настройки его тактового сигнала.
#define IS_RCC_CLK_DIV(CLK_DIV)
Макрос проверки значения делителя тактового сигнала на попадание в допустимый диапазон.
void RCC_PeriphClkCmd(RCC_PeriphClk_TypeDef RCC_PeriphClk, FunctionalState State)
Включение тактирования выбранного блока периферии.
Файл содержит все прототипы функций для RCC (Reset & Clock Control).
#define IS_RCC_PLL_NO(PLL_NO)
Макрос проверки аргументов типа RCC_PLLNO_TypeDef.
#define RCC_PLL_OD_Reset_Value
void RCC_UARTClkSel(NT_UART_TypeDef *UARTx, RCC_UARTClk_TypeDef RCC_UARTClk)
Настройка источника тактового сигнала для выбранного UART.
void RCC_SysClkDiv2Out(FunctionalState State)
Включение генерации тактового сигнала с частой равной половине системной на выводе H[0]...
GPIO_AltFunc_TypeDef GPIO_AltFunc
#define IS_SPI_ALL_PERIPH(PERIPH)
Макрос проверки аргументов типа NT_SPI_TypeDef.
void GPIO_Init(NT_GPIO_TypeDef *GPIOx, GPIO_Init_TypeDef *GPIO_InitStruct)
Инициализирует модуль GPIOx согласно параметрам структуры GPIO_InitStruct.
#define RCC_CLK_PLL_STABLE_TIMEOUT
void GPIO_StructInit(GPIO_Init_TypeDef *GPIO_InitStruct)
Заполнение каждого члена структуры GPIO_InitStruct значениями по умолчанию.
#define IS_RCC_ADC_CLK(ADC_CLK)
Макрос проверки аргументов типа RCC_ADCClk_TypeDef.
#define IS_RCC_USB_CLK(USB_CLK)
Макрос проверки аргументов типа RCC_USBClk_TypeDef.
#define IS_UART_ALL_PERIPH(PERIPH)
Макрос проверки аргументов типа NT_UART_TypeDef.
Структура инициализации PLL.
#define IS_RCC_SPI_CLK(SPI_CLK)
Макрос проверки аргументов типа RCC_SPIClk_TypeDef.
#define RCC_PLL_NF_Reset_Value
#define IS_RCC_USB_FREQ(USB_FREQ)
Макрос проверки аргументов типа RCC_USBFreq_TypeDef.
RCC_USBClk_TypeDef
Выбор источника тактирования для USB.
#define IS_RCC_PLLDIV(PLLDIV)
Макрос проверки значения выходного делителя PLL на попадание в допустимый диапазон.
void RCC_ADCClkDivConfig(RCC_ADCClk_TypeDef RCC_ADCClk, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного ADC.
RCC_PLLNO_TypeDef
Выходной делитель NO.
void RCC_UARTClkDivConfig(NT_UART_TypeDef *UARTx, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного UART.
void RCC_PeriphRstCmd(RCC_PeriphRst_TypeDef RCC_PeriphRst, FunctionalState State)
Вывод из состояния сброса периферийных блоков.
void RCC_SPIClkSel(NT_SPI_TypeDef *SPIx, RCC_SPIClk_TypeDef RCC_SPIClk)
Настройка источника тактового сигнала для выбранного SPI.
#define IS_RCC_SYS_CLK(SYS_CLK)
Макрос проверки аргументов типа RCC_SysClk_TypeDef.
#define IS_RCC_SYS_FREQ(SYS_FREQ)
Макрос проверки значения желаемой частоты при автонастройке в допустимый диапазон.
RCC_SPIClk_TypeDef
Выбор источника тактирования для SPI.
void RCC_UARTClkCmd(NT_UART_TypeDef *UARTx, FunctionalState State)
Включение тактирования UART.
#define IS_RCC_PERIPH_CLK(PERIPH_CLK)
Макрос проверки аргументов типа RCC_PeriphClk_TypeDef.
GPIO_Out_TypeDef GPIO_Out
Структура инициализации GPIO.
void RCC_ADCClkCmd(RCC_ADCClk_TypeDef RCC_ADCClk, FunctionalState State)
Включение тактирования ADC.
void RCC_PLLPowerDownCmd(FunctionalState State)
Управление режимом PowerDown PLL.
RCC_PLLNO_TypeDef RCC_PLLNO
OperationStatus RCC_PLLAutoConfig(RCC_PLLRef_TypeDef RCC_PLLRef, uint32_t SysFreq)
Автоматическая конфигурация PLL для получения желаемой системной частоты.
#define RCC_PLL_DIV_EN_FREQ
void RCC_USBClkConfig(RCC_USBClk_TypeDef RCC_USBClk, RCC_USBFreq_TypeDef RCC_USBFreq, FunctionalState State)
Настройка источника и включение тактового сигнала для USB.
RCC_USBFreq_TypeDef
Выбор фиксированной частоты на входе CLK_USB.
#define IS_RCC_UART_CLK(UART_CLK)
Макрос проверки аргументов типа RCC_UARTClk_TypeDef.
GPIO_Mode_TypeDef GPIO_Mode
RCC_PLLRef_TypeDef RCC_PLLRef
FunctionalState
Описывает логическое состояние периферии. Используется для операций включения/выключения периферийных...
#define IS_RCC_PLL_NF(PLL_NF)
Макрос проверки значения делителя ОС PLL на попадание в допустимый диапазон.
void RCC_PLLInit(RCC_PLLInit_TypeDef *RCC_PLLInit_Struct)
Инициализирует PLL согласно параметрам структуры RCC_PLLInit_Struct.
OperationStatus RCC_SysClkSel(RCC_SysClk_TypeDef RCC_SysClk)
Выбор источника для системного тактового сигнала.
#define IS_RCC_PLL_NR(PLL_NR)
Макрос проверки значения опорного делителя PLL на попадание в допустимый диапазон.
RCC_PeriphRst_TypeDef
Управление сбросом периферийных блоков
#define IS_FUNCTIONAL_STATE(STATE)
Макрос проверки аргументов типа FunctionalState.
GPIO_Dir_TypeDef GPIO_Dir
#define RCC_CLK_CHANGE_TIMEOUT
RCC_PeriphClk_TypeDef
Управление тактированием периферийных блоков
#define EXT_OSC_VALUE
Определение частоты используемого внешнего тактового генератора.
RCC_SysClk_TypeDef
Выбор источника системной частоты.
#define RCC_PLL_NR_Reset_Value
#define RCC_PLL_CTRL_Reset_Value
void RCC_PLLStructInit(RCC_PLLInit_TypeDef *RCC_PLLInit_Struct)
Заполнение каждого члена структуры RCC_PLLInit_Struct значениями по умолчанию.
#define IS_RCC_PERIPH_RST(PERIPH_RST)
Макрос проверки аргументов типа RCC_PeriphRst_TypeDef.
void RCC_PLLDeInit(void)
Устанавливает все регистры PLL значениями по умолчанию.
void RCC_SPIClkDivConfig(NT_SPI_TypeDef *SPIx, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного SPI.