From 4a13529748c983ff0d5627a28365ad7737141016 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期五, 18 二月 2022 09:31:49 +0800 Subject: [PATCH] V1.62 --- 源码/核心板/Src/OnChipDevices/Rcc_Nvic_Systick.c | 194 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 154 insertions(+), 40 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" index 6e55e6b..15cffba 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" @@ -1,46 +1,126 @@ #include "Rcc_Nvic_Systick.h" -void Rcc_Init(void) +//void Rcc_Init(void) +//{ +// //----------使用内部RC晶振HSI 64MHz----------- +// RCC_DeInit(); //将外设RCC寄存器重设为缺省值 +// RCC_HSICmd(ENABLE); //内部时钟使能 +// while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET); //等待HSI就绪 +// +// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //选择FLASH预取指缓存的模,预取指缓存使能 +// FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期 +// +// +// RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时钟 +// RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK +// RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK/2 +// RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); //设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz +// RCC_PLLCmd(ENABLE); //使能PLL +// +// while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //检查指定的RCC标志位(PLL准备好标志)设置与否 +// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置系统时钟(SYSCLK) +// while(RCC_GetSYSCLKSource() != 0x08); //0x08:PLL作为系统时钟 + +//// //----------使用外部RC晶振 72MHz----------- +//// RCC_DeInit(); //初始化为缺省值 +//// RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 +//// while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪 +//// +//// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer +//// FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state +//// +//// RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK +//// RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK +//// RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2 +//// RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ +//// RCC_PLLCmd(ENABLE); //Enable PLLCLK +//// +//// while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready +//// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock +//// while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source +// +//} +int RCC_Configuration(void) { - //----------使用内部RC晶振HSI 64MHz----------- - RCC_DeInit(); //将外设RCC寄存器重设为缺省值 - RCC_HSICmd(ENABLE); //内部时钟使能 - while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET); //等待HSI就绪 - - FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //选择FLASH预取指缓存的模,预取指缓存使能 - FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期 - - - RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时钟 - RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK - RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK/2 - RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); //设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz - RCC_PLLCmd(ENABLE); //使能PLL - - while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //检查指定的RCC标志位(PLL准备好标志)设置与否 - RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置系统时钟(SYSCLK) - while(RCC_GetSYSCLKSource() != 0x08); //0x08:PLL作为系统时钟 + ErrorStatus HSEStartUpStatus; + RCC_ClocksTypeDef RCC_ClockFreq; -// //----------使用外部RC晶振 72MHz----------- -// RCC_DeInit(); //初始化为缺省值 -// RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 -// while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪 -// -// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer -// FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state -// -// RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK -// RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK -// RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2 -// RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ -// RCC_PLLCmd(ENABLE); //Enable PLLCLK -// -// while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready -// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock -// while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source - + /* RCC system reset(for debug purpose) */ + RCC_DeInit(); + + /* Enable HSE */ + RCC_HSEConfig(RCC_HSE_ON); + + /* Wait till HSE is ready */ + HSEStartUpStatus = RCC_WaitForHSEStartUp(); + + if(HSEStartUpStatus != ERROR) + { + SystemInit(); + /* Enable Prefetch Buffer */ + FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); + + /****************************************************************/ + /* HSE= up to 25MHz (on EVB1000 is 12MHz), + * HCLK=72MHz, PCLK2=72MHz, PCLK1=36MHz */ + /****************************************************************/ + /* Flash 2 wait state */ + FLASH_SetLatency(FLASH_Latency_2); + /* HCLK = SYSCLK */ + RCC_HCLKConfig(RCC_SYSCLK_Div1); + /* PCLK2 = HCLK */ + RCC_PCLK2Config(RCC_HCLK_Div1); + /* PCLK1 = HCLK/2 */ + RCC_PCLK1Config(RCC_HCLK_Div2); + /* ADCCLK = PCLK2/4 */ + RCC_ADCCLKConfig(RCC_PCLK2_Div6); + } +// /* Configure PLLs *********************************************************/ +// /* PLL2 configuration: PLL2CLK = (HSE / 4) * 8 = 24 MHz */ +// RCC_PREDIV2Config(RCC_PREDIV2_Div4); +// RCC_PLL2Config(RCC_PLL2Mul_8); + +// /* Enable PLL2 */ +// RCC_PLL2Cmd(ENABLE); + +// /* Wait till PLL2 is ready */ +// while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET){} + +// /* PLL1 configuration: PLLCLK = (PLL2 / 3) * 9 = 72 MHz */ +// RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div3); + +// RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9); + +// /* Enable PLL */ +// RCC_PLLCmd(ENABLE); + +// /* Wait till PLL is ready */ +// while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){} + +// /* Select PLL as system clock source */ +// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); + +// /* Wait till PLL is used as system clock source */ +// while (RCC_GetSYSCLKSource() != 0x08){} +// } + + RCC_GetClocksFreq(&RCC_ClockFreq); + + /* Enable SPI1 clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); + + /* Enable SPI2 clock */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); + + /* Enable GPIOs clocks */ + RCC_APB2PeriphClockCmd( + RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | + RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | + RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, + ENABLE); + + return 0; } - void Nvic_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; @@ -53,7 +133,10 @@ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; - + NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; @@ -62,7 +145,38 @@ NVIC_Init(&NVIC_InitStructure); } - +//?????3????? +//???????APB1?2?,?APB1?36M +//arr:?????? +//psc:?????? +//?????????3! +void TIM3_Int_Init(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //???? + + //???TIM3??? + TIM_TimeBaseStructure.TIM_Period = 1000-1; //??????????????????????????? + TIM_TimeBaseStructure.TIM_Prescaler =72-1; //??????TIMx??????????? + TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //??????:TDTS = Tck_tim + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?????? + TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //??????????TIMx??????? + + TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //?????TIM3??,?????? + + //?????NVIC?? + NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3?? + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //?????0? + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //????3? + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ????? + NVIC_Init(&NVIC_InitStructure); //???NVIC??? + + + TIM_Cmd(TIM3, ENABLE); //??TIMx +} +//???3?????? int Systick_Init(void) { int time_retry = 500; -- Gitblit v1.9.3