一、设置RCC时钟

  1. //#define SYSCLK_HSE
  2. #define SYSCLK_FREQ_20MHz
  3. //#define SYSCLK_FREQ_36MHz
  4. //#define SYSCLK_FREQ_48MHz
  5. //#define SYSCLK_FREQ_72MHz
  6. /*******************************************************************************
  7. * Function Name : SetSysClock
  8. * Description : Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers.
  9. * Input : None
  10. * Output : None
  11. * Return : None
  12. *******************************************************************************/
  13. void SetSysClock(void)
  14. {
  15. #if defined SYSCLK_HSE
  16. SetSysClockToHSE();
  17. #elif defined SYSCLK_FREQ_20MHz
  18. SetSysClockTo20();
  19. #elif defined SYSCLK_FREQ_36MHz
  20. SetSysClockTo36();
  21. #elif defined SYSCLK_FREQ_48MHz
  22. SetSysClockTo48();
  23. #elif defined SYSCLK_FREQ_72MHz
  24. SetSysClockTo72();
  25. #endif
  26. }

SetSysClockToHSE:

  1. ErrorStatus HSEStartUpStatus;
  2. /*******************************************************************************
  3. * Function Name : SetSysClockToHSE
  4. * Description : Selects HSE as System clock source and configure HCLK,PCLK2 and PCLK1 prescalers.
  5. * Input : None
  6. * Output : None
  7. * Return : None
  8. *******************************************************************************/
  9. void SetSysClockToHSE(void)
  10. {
  11. /* Deinitialize the RCC registers */
  12. RCC_DeInit();
  13. /* Enable the HSE */
  14. RCC_HSEConfig(RCC_HSE_ON);
  15. /* Wait till HSE is ready and if Time out is reached exit */
  16. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  17. if(HSEStartUpStatus == SUCCESS)
  18. {
  19. /* Add here PLL ans system clock config */
  20. /* Enable The Prefetch Buffer */
  21. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  22. /* Configure Tthe Latency cycle: Set 0 Latency cycles */
  23. FLASH_SetLatency(FLASH_Latency_0);
  24. /* Configure HCLK such as HCLK = SYSCLK */
  25. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  26. /* PCLK2 = HCLK*/
  27. RCC_PCLK2Config(RCC_HCLK_Div1);
  28. /* PCLK1 = HCLK*/
  29. RCC_PCLK1Config(RCC_HCLK_Div1);
  30. /* Select HSE as system clock source*/
  31. RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
  32. /* Wait till HSE is used as system clock source */
  33. if(RCC_GetSYSCLKSource() != 0x04)
  34. {
  35. }
  36. else
  37. {
  38. }
  39. }
  40. else
  41. {
  42. /* If HSE fails to start-up. */
  43. while(1)
  44. {
  45. }
  46. }
  47. }

SetSysClockTo20:

  1. /*******************************************************************************
  2. * Function Name : SetSysClockTo20
  3. * Description : Sets System clock frequency to 20MHz and configure HCLK, PCLK2 and PCLK1 prescalers.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. *******************************************************************************/
  8. void SetSysClockTo20(void)
  9. {
  10. /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
  11. /* RCC system reset(for debug purpose) */
  12. RCC_DeInit();
  13. /* Enable HSE */
  14. RCC_HSEConfig(RCC_HSE_ON);
  15. /* Wait till HSE is ready */
  16. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  17. if(HSEStartUpStatus == SUCCESS)
  18. {
  19. /* Enable Prefetch Buffer */
  20. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  21. /* Flash 0 wait state */
  22. FLASH_SetLatency(FLASH_Latency_0);
  23. /* HCLK = SYSCLK */
  24. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  25. /* PCLK2 = HCLK */
  26. RCC_PCLK2Config(RCC_HCLK_Div1);
  27. /* PCLK1 = HCLK */
  28. RCC_PCLK1Config(RCC_HCLK_Div1);
  29. /* PLLCLK = (8MHz / 2) * 5 = 20 MHz */
  30. RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_5);
  31. /* Enable PLL */
  32. RCC_PLLCmd(ENABLE);
  33. /* Wait till PLL is ready */
  34. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  35. {
  36. }
  37. /* Select PLL as system clock source */
  38. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  39. /* Wait till PLL is used as system clock source */
  40. if(RCC_GetSYSCLKSource() != 0x80)
  41. {
  42. }
  43. else
  44. {
  45. }
  46. }
  47. else
  48. {
  49. /* If HSE fails to start-up. */
  50. while(1)
  51. {
  52. }
  53. }

SetSysClockTo36:

  1. /*******************************************************************************
  2. * Function Name : SetSysClockTo36
  3. * Description : Sets System clock frequency to 36MHz and configure HCLK, PCLK2 and PCLK1 prescalers.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. *******************************************************************************/
  8. void SetSysClockTo36(void)
  9. {
  10. /* RCC system reset */
  11. RCC_DeInit();
  12. /* Enable HSE */
  13. RCC_HSEConfig(RCC_HSE_ON);
  14. /* Wait till HSE is ready */
  15. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  16. if(HSEStartUpStatus == SUCCESS)
  17. {
  18. /* Enable Prefetch Buffer*/
  19. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  20. /* Flash 1 wait state */
  21. FLASH_SetLatency(FLASH_Latency_1);
  22. /* HCLK = SYSCLK */
  23. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  24. /* PCLK2 = HCLK */
  25. RCC_PCLK2Config(RCC_HCLK_Div1);
  26. /* PCLK1 = HCLK */
  27. RCC_PCLK1Config(RCC_HCLK_Div1);
  28. /* PLLCLK = (8MHz / 2) * 9 = 36MHz */
  29. RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9);
  30. /* Enable PLL */
  31. RCC_PLLCmd(ENABLE);
  32. /* Wait till PLL is ready */
  33. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  34. /* Select PLL as system clock source */
  35. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  36. /* Wait till PLL is used as system clock source */
  37. if(RCC_GetSYSCLKSource() == 0x08)
  38. {
  39. }
  40. else
  41. {
  42. }
  43. }
  44. else
  45. {
  46. /* If HSE fails to start-up. */
  47. while(1)
  48. {
  49. }
  50. }
  51. }

SetSysClockTo48:

  1. /*******************************************************************************
  2. * Function Name : SetSysClockTo48
  3. * Description : Sets System clock frequency to 48MHz and configure HCLK, PCLK2 and PCLK1 prescalers.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. *******************************************************************************/
  8. void SetSysClockTo48(void)
  9. {
  10. /* RCC system reset */
  11. RCC_DeInit();
  12. /* Enable HSE */
  13. RCC_HSEConfig(RCC_HSE_ON);
  14. /* Wait till HSE is ready */
  15. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  16. if(HSEStartUpStatus == SUCCESS)
  17. {
  18. /* Enable Prefetch Buffer*/
  19. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  20. /* Flash 1 wait state */
  21. FLASH_SetLatency(FLASH_Latency_1);
  22. /* HCLK = SYSCLK */
  23. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  24. /* PCLK2 = HCLK */
  25. RCC_PCLK2Config(RCC_HCLK_Div1);
  26. /* PCLK1 = HCLK/2 */
  27. RCC_PCLK1Config(RCC_HCLK_Div2);
  28. /* PLLCLK = 8MHz * 6 = 48MHz */
  29. RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
  30. /* Enable PLL */
  31. RCC_PLLCmd(ENABLE);
  32. /* Wait till PLL is ready */
  33. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  34. /* Select PLL as system clock source */
  35. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  36. /* Wait till PLL is used as system clock source */
  37. if(RCC_GetSYSCLKSource() == 0x08)
  38. {
  39. }
  40. else
  41. {
  42. }
  43. }
  44. else
  45. {
  46. /* If HSE fails to start-up. */
  47. while(1)
  48. {
  49. }
  50. }
  51. }

SetSysClockTo72:

  1. /*******************************************************************************
  2. * Function Name : SetSysClockTo72
  3. * Description : Sets System clock frequency to 72MHz and configure HCLK, PCLK2
  4. * and PCLK1 prescalers.
  5. * Input : None
  6. * Output : None
  7. * Return : None
  8. *******************************************************************************/
  9. void SetSysClockTo72(void)
  10. {
  11. /* RCC system reset */
  12. RCC_DeInit();
  13. /* Enable HSE */
  14. RCC_HSEConfig(RCC_HSE_ON);
  15. /* Wait till HSE is ready */
  16. HSEStartUpStatus = RCC_WaitForHSEStartUp();
  17. if(HSEStartUpStatus == SUCCESS)
  18. {
  19. /* Enable Prefetch Buffer*/
  20. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  21. /* Flash 1 wait state */
  22. FLASH_SetLatency(FLASH_Latency_2);
  23. /* HCLK = SYSCLK */
  24. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  25. /* PCLK2 = HCLK */
  26. RCC_PCLK2Config(RCC_HCLK_Div1);
  27. /* PCLK1 = HCLK/2 */
  28. RCC_PCLK1Config(RCC_HCLK_Div2);
  29. /* PLLCLK = 8MHz * 6 = 48MHz */
  30. RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  31. /* Enable PLL */
  32. RCC_PLLCmd(ENABLE);
  33. /* Wait till PLL is ready */
  34. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  35. /* Select PLL as system clock source */
  36. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  37. /* Wait till PLL is used as system clock source */
  38. if(RCC_GetSYSCLKSource() == 0x08)
  39. {
  40. }
  41. else
  42. {
  43. }
  44. }
  45. else
  46. {
  47. /* If HSE fails to start-up. */
  48. while(1)
  49. {
  50. }
  51. }
  52. }

二、中断初始化

  1. /****************************************************************************
  2. * Function Name : NVIC_Configuration
  3. * Description : Configures Vector Table base location.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. ****************************************************************************/
  8. void NVIC_Configuration(void)
  9. {
  10. NVIC_InitTypeDef NVIC_InitStructure;
  11. #ifdef VET_TAB_RAM
  12. /* Set the Vector Table base location at 0x2000 0000 */
  13. NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  14. #else
  15. /* Set the Vector Table base location at 0x8000 0000 */
  16. NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
  17. #endif
  18. /* Enable and configure RCC global IRQ channel */
  19. NVIC_InitStructure.NVIC_IRQChannel = RCC_IRQn;
  20. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  21. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  22. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  23. NVIC_Init(&NVIC_InitStructure);
  24. }

三、GPIO口初始化

  1. /****************************************************************************
  2. * Function Name : LED_Init
  3. * Description : Configures GPIOB
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. ****************************************************************************/
  8. void LED_Init()
  9. {
  10. /* Configure all the GPIOB in Output Push-Pull */
  11. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14;
  12. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  14. /* Enable GPIOB clock */
  15. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  16. /* Initialize GPIOB*/
  17. GPIO_Init(GPIOB, &GPIO_InitStructure);
  18. }

四、main函数

  1. /****************************************************************************
  2. * Function Name : main
  3. * Description : Main program.
  4. * Input : None
  5. * Output : None
  6. * Return : None
  7. ****************************************************************************/
  8. int main(void)
  9. {
  10. /* Set system clock HCLK PCLK2 PCLK1 and PLLCLK */
  11. SetSysClock();
  12. /* Get current frequency and fill in RCC_ClockFreq */
  13. RCC_GetClocksFreq(&RCC_ClockFreq);
  14. /* Enable Clock Security System(CSS), this will generate an NMI exception (Non-Maskable Interrupt)
  15. when HSE clock fails*/
  16. RCC_ClockSecuritySystemCmd(ENABLE);
  17. /* NVIC configuration */
  18. NVIC_Configuration();
  19. /* LED configuration */
  20. LED_Init();
  21. /* Set the GPIOB prot pin 15 and pin 14*/
  22. GPIO_SetBits(GPIOB, GPIO_Pin_15 | GPIO_Pin_14);
  23. /* Output HSE clock on MCO pin */
  24. RCC_MCOConfig(RCC_MCO_HSE);
  25. while(1)
  26. {
  27. GPIO_Write(GPIOB, (u16)~GPIO_ReadOutputData(GPIOB));
  28. Delay(DELAY_COUNT);
  29. }
  30. }

RCC初始化学习的更多相关文章

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第四章:Direct 3D初始化 学习目标 对Direct 3D编程在 ...

  2. uC/OS-III学习2::uC/OS-III LED闪烁实验

    1 前言: 看完了uC/OS-III的基本介绍之后,大致对这个操作系统有了点了解,但真正的理解还是要通过不断的去使用,在使用中体验uC/OS-III的乐趣和更深的理解其工作原理是非常重要的.因此,我在 ...

  3. stm32学习笔记之串口通信

    在基础实验成功的基础上,对串口的调试方法进行实践.硬件代码顺利完成之后,对日后调试需要用到的printf重定义进行调试,固定在自己的库函数中. b) 初始化函数定义: void USART_Confi ...

  4. paper 53 :深度学习(转载)

    转载来源:http://blog.csdn.net/fengbingchun/article/details/50087005 这篇文章主要是为了对深度学习(DeepLearning)有个初步了解,算 ...

  5. Arduino入门学习

    一直听到许多做物联网.智能家居的控制器使用的是Arduino,从师兄那里拿到了一块Arduino开发板,进行了一下午的学习,感觉这个适合小孩子们玩:) 废话少说,总结一下,便于以后可能会用得到.我主要 ...

  6. 学习ASP.NET Core Razor 编程系列八——并发处理

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. 学习ASP.NET Core Razor 编程系列十——添加新字段

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  9. 学习ASP.NET Core Razor 编程系列十九——分页

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

随机推荐

  1. git常用操作命令2

    以github为例,测试本地库与远程库github之间的交互 1. 本地初始化一个git库     创建一个test文件夹,然后cd到test文件内, 执行git init命令  初始化本地库成功!! ...

  2. HTML基础知识笔记摘要

    HTML互联网三大基石:1.HTML:显示数据2.HTTP:传输数据 http传输协议3.URL:定位数据协议://ip地址或主机名:端口/网络中的内容... HTML(hyper text make ...

  3. cf1278D——树的性质+并查集+线段树/DFS判环

    昨天晚上本来想认真打一场的,,结果陪女朋友去了.. 回来之后看了看D,感觉有点思路,结果一直到现在才做出来 首先对所有线段按左端点排序,然后用并查集判所有边是否联通,即遍历每条边i,和前一条不覆盖它的 ...

  4. 【2019 Multi-University Training Contest 2】

    01: 02: 03: 04: 05:https://www.cnblogs.com/myx12345/p/11584100.html 06: 07: 08:https://www.cnblogs.c ...

  5. vue.js中created()与activated()的个人使用理解

    created():在创建vue对象时,当html渲染之前就触发:但是注意,全局vue.js不强制刷新或者重启时只创建一次,也就是说,created()只会触发一次:这时候只有dom没有数据挂载. a ...

  6. LOJ 2978 「THUSCH 2017」杜老师——bitset+线性基+结论

    题目:https://loj.ac/problem/2978 题解:https://www.cnblogs.com/Paul-Guderian/p/10248782.html 第 i 个数的 bits ...

  7. 分布式架构下的会话追踪实践【基于Cookie和Redis实现】

    分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat ...

  8. Java GC算法

    转自:http://blog.csdn.net/heyutao007/article/details/38151581 1.JVM内存组成结构 JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,结 ...

  9. ThinkPHP3.2.3 目录介绍

    ThinkPHP3.2.3 目录介绍,在开发中主要操作的目录就是在入口文件www/index.php中定义的www/application/文件目录了. www  WEB部署目录 ├─index.ph ...

  10. springCloud的使用07-----消息总线(spring cloud bus)

    spring cloud bus 将分布式的节点用轻量的消息代理连接起来.可用于广播配置文件的更改或服务之间的通讯,也可以用于监控. spring cloud bus 默认只支持rabbitmq和ka ...