加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

stm32 RCC&SysTick Configuration

发布时间:2020-12-15 06:48:23 所属栏目:百科 来源:网络整理
导读:/*RCC*****************************************************************************************************/ void RCC_Configuration(void) { ??? /* SYSCLK,HCLK,PCLK2 and PCLK1 configuration -----------------------------*/ ??? /* RCC system r

/*RCC*****************************************************************************************************/

void RCC_Configuration(void)
{
??? /* SYSCLK,HCLK,PCLK2 and PCLK1 configuration -----------------------------*/
??? /* 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 == SUCCESS)
??? {
??????? /* Enable Prefetch Buffer */
??????? FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
???????
??????? /* Flash 2 wait state */
??????? FLASH_SetLatency(FLASH_Latency_2);
??????? /* HCLK = SYSCLK */
??????? RCC_HCLKConfig(RCC_SYSCLK_Div1);?? /* 72M????????????????????? */
??????? /* PCLK2 = HCLK */
??????? RCC_PCLK2Config(RCC_HCLK_Div1);??? /* 72M????????????????????? */
??????? /* PCLK1 = HCLK/2 */
??????? RCC_PCLK1Config(RCC_HCLK_Div2);??? /* 36M????????????????????? */
???????
??????? /* PLLCLK = 8MHz * 9 = 72 MHz */
??????? RCC_PLLConfig(RCC_PLLSource_HSE_Div1,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)
??????? {
??????? }
??? }
???
??? /* Enable GPIOx and AFIO clocks */
??? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
????????????????????????? |RCC_APB2Periph_GPIOB
????????????????????????? |RCC_APB2Periph_GPIOC
????????????????????????? |RCC_APB2Periph_GPIOD
????????????????????????? |RCC_APB2Periph_GPIOE
????????????????????????? |RCC_APB2Periph_GPIOF
????????????????????????? |RCC_APB2Periph_AFIO,ENABLE);
???
??? /* DMA clock enable */
??? //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2 | RCC_AHBPeriph_DMA1,ENABLE);
??? /* Enable USART clocks */
??? RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
??? RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 |
?????????????????????????? RCC_APB1Periph_USART3 |
?????????????????????????? RCC_APB1Periph_UART4? |
?????????????????????????? RCC_APB1Periph_UART5,ENABLE);???
???
??? /* TIM clock enable */
??? RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);????
??? RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 |????
?????????????????????????? RCC_APB1Periph_TIM3 |
?????????????????????????? RCC_APB1Periph_TIM4 |
?????????????????????????? RCC_APB1Periph_TIM5,? ENABLE);???
??? /* CAN Periph clock enable */
??? RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE);
?????
??? /* Initialize the I/Os*/

}

/*Sys Tick*****************************************************************************************************/

void SysTick_Configuration(void)
{
??? SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);???/*时钟源*/
??? NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick,3,0);/*中断入口,优先级*/
??? SysTick_SetReload(72000);?????????/*中断间隔*/
??? SysTick_CounterCmd(SysTick_Counter_Enable);???????????????? //
??? SysTick_ITConfig(ENABLE);?????????/*中断使能*/
}

//系统滴答中断

void SysTick_Handler(void)
{????
??? app();

}

Note:

1.端口复用功能要打开,端口复用时钟,RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);,详见手册rm0008的7.3节

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读