一、设置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. 改计算机名导致 Oracle因目标主机或对象不存在

    手贱修改了计算机名, 结果导致登陆oracle数据库报如下错误,一查资料,说是修改了计算机名导致的,需要进到oracle安装目录: \oracle\product\10.2.0\db_1\NETWOR ...

  2. The shortest problem(hdu,多校

    The shortest problem Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  3. Flutter样式和布局控件简析(二)

    开始 继续接着分析Flutter相关的样式和布局控件,但是这次内容难度感觉比较高,怕有分析不到位的地方,所以这次仅仅当做一个参考,大家最好可以自己阅读一下代码,应该会有更深的体会. Sliver布局 ...

  4. 2018-2019-2 20175203 实验四《Android 开发基础》

    20175203 2018-2019 实验四<Android 开发基础> 实验要求 参考Android开发简易教程 完成云班课中的检查点,也可以先完成实验报告,直接提交.注意不能只有截图, ...

  5. 107、TensorFlow变量(三)

    创建秩为1的张量 # create a rank1 tensor object import tensorflow as tf mystr = tf.Variable(["Hello&quo ...

  6. 网络安全随笔 - Linux的netstat查看端口 0.0.0.0与127.0.0.1的区别

    linux运维都需要对端口开放查看  netstat 就是对端口信息的查看 # netstat -nltp p 查看端口挂的程序 [root@iz2ze5is23zeo1ipvn65aiz ~]# n ...

  7. Spring中ApplicationContext加载机制和配置初始化

    Spring中ApplicationContext加载机制.        加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet.        ...

  8. vue 点击其他地方隐藏dom

    document.addEventListener('click', function (e) { if (document.getElementsByClassName('keywordContai ...

  9. laravel 向多视图及所有视图传递数据变量

    向单个视图传递变量 1.使用with()方法 : view('user.lists')->with('title',$title); 2.直接view()传参: view('user.lists ...

  10. 面试题22:链表中倒数第k个节点

    # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None ...