查看: 123|回复: 1

[中移One NET] 麒麟座mini板时钟配置(12MHZ晶振)

[复制链接]

2

主题

0

好友

135

积分

童生

Rank: 2

  • TA的每日心情
    难过
    昨天 10:23
  • 签到天数: 30 天

    连续签到: 3 天

    [LV.5]常住居民I

    爱板会员勋章

    发表于 2017-9-2 13:30:36 |显示全部楼层
    本帖最后由 09OPEN 于 2017-9-2 13:32 编辑

    麒麟座mini板的晶振是12MHZ的,害我调了很久程序都有问题,检查了一下板子晶振竟然不是8MHZ。
    IMG_20170816_200508.jpg

    这就需要我们在相关文件做一些修改了,首先修改stm32f10x这个文件。
    1.JPG

    在属性里面将此文件设置为非只读。
    2.JPG
    -》 3.JPG

    点击应用后在按确定,完成设置。
    在这个文件的115行左右,找到#if !defined  HSE_VALUE。在这句话前面加一条代码,自己设置外部晶振。
    1. #define HSE_VALUE    ((uint32_t)12000000)    //外部时钟
    复制代码
    4.JPG

    或者将这条代码
    1. #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
    复制代码
    改为
    1. #define HSE_VALUE    ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
    复制代码
    然后保存。

    本来大家常用 SystemInit(); 这条代码来设置时钟,大部分f103开发板包括官方库都是用8MHz的外部晶振。现在需要修改PLL的配置,前面是9倍频 8*9=72 。现在我们要把它配置成6倍频 6*12=72。代码如下
    1. /*
    2. */
    3. void RCC_Configuration(void)
    4. {
    5.     ErrorStatus HSEStartUpStatus;
    6.     RCC_DeInit();                                               //将外设RCC寄存器重设为缺省值
    7.     RCC_HSEConfig(RCC_HSE_ON);                                  //开启外部高速晶振(HSE)
    8.     HSEStartUpStatus = RCC_WaitForHSEStartUp();                 //等待HSE起振
    9.     if(HSEStartUpStatus == SUCCESS)                             //若成功起振,(下面为系统总线时钟设置)
    10.     {
    11.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能FLASH预取指缓存
    12.         FLASH_SetLatency(FLASH_Latency_2);                      //设置FLASH存储器延时时钟周期数(根据不同的系统时钟选取不同的值)
    13.         RCC_HCLKConfig(RCC_SYSCLK_Div1);                        //设置AHB时钟=72 MHz
    14.         RCC_PCLK2Config(RCC_HCLK_Div2);                         //设置APB1时钟=36 MHz(APB1时钟最大值)
    15.         RCC_PCLK1Config(RCC_HCLK_Div1);                         //设置APB2时钟=72 MHz
    16.         RCC_ADCCLKConfig(RCC_PCLK2_Div2);                       //RCC_PCLK2_Div2,4,6,8
    17.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);    //PLL必须在其激活前完成配置(设置PLL时钟源及倍频系数)12MHZ
    18.         RCC_PLLCmd(ENABLE);
    19.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    20.         {
    21.         }
    22.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    23.         while(RCC_GetSYSCLKSource() != 0x08)
    24.         {
    25.         }  
    26.     }
    27. }
    复制代码
    大家用它代替 SystemInit(); 就行了。
    然后串口,spi都正常了。

    回复

    使用道具 举报

    6

    主题

    0

    好友

    230

    积分

    秀才

    Rank: 3Rank: 3

  • TA的每日心情
    奋斗
    2017-9-9 16:07
  • 签到天数: 25 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-9-3 10:34:19 |显示全部楼层
    可以参考,蛮棒哒~~~
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-9-24 02:14 , Processed in 0.120626 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部