精华内容
下载资源
问答
  • 修改时钟
    千次阅读
    2020-01-08 23:26:50

    有一个项目,需要在启动的时候根据eeprom的某个参数来配置时钟,最开始的做法是按正常模式配置时钟,然后读取eeprom的参数,然后根据参数配置时钟,在仿真的时候却发现,系统时钟还是最开始设置的,后来并没有改变,找了一圈,说要关闭pll后再配置,结果还是无效。

    解决办法:先使用内部时钟HIS,不开启pll,最开始的时钟仅仅保证eeprom可以读取参数或者其他方式确定后续需要设置的时钟,然后读取eeprom,得到后续该设置的时钟,然后用预置的函数进行时钟初始化。

    void SystemClock_Config_BeforeInit(void)
    {
    	RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    	RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    	RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
    	RCC_PeriphCLKInitTypeDef RTCPeriphClkInitStruct = {0};
    
    	/**Configure the main internal regulator output voltage 
    	*/
    	__HAL_RCC_PWR_CLK_ENABLE();
    	__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
    	/**Initializes the CPU, AHB and APB busses clocks 
    	*/
    	RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;    //使用内部HSI
    	RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    	RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;    //不使用PLL
    	RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
    	RCC_OscInitStruct.PLL.PLLM = 25;
    	RCC_OscInitStruct.PLL.PLLN = 384;
    	RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
    	RCC_OscInitStruct.PLL.PLLQ = 8;
    	if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    	{
    		Error_Handler();
    	}
    
    	/**Activate the Over-Drive mode 
    	*/
    	if (HAL_PWREx_EnableOverDrive() != HAL_OK)
    	{
    		Error_Handler();
    	}
    	/**Initializes the CPU, AHB and APB busses clocks 
    	*/
    	RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    							  |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    	RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    	RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    	RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
    	RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
    
    	if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
    	{
    		Error_Handler();
    	}
    
    }
    

    在进行以上时钟初始化以后,就可以利用低速的时钟先读取eeprom的参数,然后根据参数选择需要配置的时钟

    	_SETTING init_setting = {0};
    	/* 选择时钟 */
    	delay_tim_init();        //延时函数定时器初始化
    	i2c3_init();             //I2C3初始化
    	setting_init();          //SETTING初始化
    	setting_read(&init_setting);
    	switch(init_setting.sysclk)
    	{
    		case SETTING_SYSCLK_180MHz:
    			SystemClock_Config_192MHz();
    			break;
    		case SETTING_SYSCLK_192MHz:
    			SystemClock_Config_192MHz();
    			break;
    		case SETTING_SYSCLK_240MHz:
    			SystemClock_Config_240MHz();
    			break;
    		default:
    			break;
    	}

    这里使用的是STM32F429,配置了180,192,240 三种频率配置模式。

    我们只要在程序中选择对应的频率设置,参数会保存到eeprom,然后重启即可用新的频率运行。

    更多相关内容
  • centos8 时钟同步.md

    2020-05-03 10:39:19
    加入开启启动 systemctl enable chronyd 启动chronyd ...修改时间 date -s “18:00” # date -R 重启服务 systemctl restart chronyd 同步时间 chronyc sources -v # date -R # 查看是否是当前时间
  • 手机修改时钟.c文件

    2013-05-07 13:31:43
    通过手机的蓝牙修改开发板上的时钟时钟用1602显示。用串口通信也行。APP在资源里
  • STM32F10XX如何时钟 概述: 以前在大学的时候学习stm32的...从图中所示,除去Flash存储器编程接口时钟、全速USB OTG的48MHz时钟、I2S2和I2S3的时钟、 以太网MAC的时钟这四种时钟,所有的外设的时钟都是从从系统时钟(SY

    #STM32#
    STM32F10XX如何修改时钟
    概述:
    以前在大学的时候学习stm32的时候,只管使用,不管基本原理,现在在工作的过程遇到类似的问题,可能有部分人对stm32时钟不是特别清楚,包括自己,那么自己借助这样的平台,整理时钟的关系,以促使对stm32时钟关系能够理解透彻一点。
    首先贴一张stm32时钟树(STM32参考手册里面也有)。如图
    在这里插入图片描述
    从图中所示,除去Flash存储器编程接口时钟、全速USB OTG的48MHz时钟、I2S2和I2S3的时钟、 以太网MAC的时钟这四种时钟,所有的外设的时钟都是从从系统时钟(SYSCLK)得到。而如果要对系统时钟以及外设的时钟进行操作,只需要在固件库的system_stm32f10x.c文件里面进行相应的设置。如图
    在这里插入图片描述
    1、修改系统时钟即SYSCLK,只需要在111-115行代码处修改。例如,你要修改系统时钟为24MHz,只需要把111行代码取消注释,再把115注释掉即可。

    在这里插入图片描述
    2、修改AHB、APB1、APB2,只需要在设置对应的设置系统时钟(当系统时钟设置的为72M,那么就要去SetSysClockTo72()函数里面修改时钟)的函数里面修改即可。如图,HCLK下面的语句对应AHB的时钟,PCLK2下面的语句对应APB2(高速)的时钟,PCLK1下面的语句对应APB1的时钟,可以根据需要去修改相应分频系数。
    还有一种方法就是可以调用stm32f10x_rcc.c里面的相应的函数进行设置也可以。
    在这里插入图片描述
    经过这一次的学习,自己对于如何修改时钟可以说掌握的还是不错的。以后如果对ADC、定时器等外设进行时钟修改时,可以很快就搞定了的。

    展开全文
  • 此文章为引用 正点原子详细讲解 ...或者想倍频到更高的主频该怎么修改? 例子就直接直接拿<正点原子>的例子吧! 属性 原来 现在 外部晶振 8M 12M 倍频 9 6 主频 72M 72M

    转载自:https://blog.csdn.net/qq_26039331/article/details/78751047

    此文章为引用
    正点原子详细讲解

    刚刚接触STM32的时候,用的都是8M晶振。比如你想更换到为外部晶振为12M,但是主频仍想用72M的。该如何设置?或者想倍频到更高的主频该怎么修改?

    例子就直接直接拿<正点原子>的例子吧!

    属性原来现在
    外部晶振8M12M
    倍频96
    主频72M72M

    想从原来的8M修改到现在的12M,但是主频仍为72M,该如何修改:

    (1)【设置外部晶振】打开stm32f10x.h,找到下图部分:
    F10X.H
    修改之前如上图一样,HSE_VALUE为外部晶振,如果你用的是f103的芯片,则修改下边这个为12M;
    12m

    (2)【设置主频】打开system_stm32f10x.c,找到下图部分:
    72m
    也可以根据自己的需要修改为56M、48M等;

    (3)【设置倍频】打开system_stm32f10x.c,找到自己的想要的主频函数:
    123
    再找到这里(默认的情况下):
    fff
    ①修改F103(外部晶振12M倍频到72M):
    66
    ②修改F105、F107(外部晶振12M倍频到72M):
    111
    讲解结束;

    正点原子的还有一个是F103倍频到128M的教程。单片机超频太多不稳定,建议先更换更快的晶振,在进行倍频到128M。

    展开全文
  • 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ...这篇文章主要介绍了如何修改标准库函数以选择内部的高速时钟HSI。 一、官方标准库是如何改变时钟的? 二、使用步骤 1.引入库 代码如下(示例).


    前言

    在我们常用的STM32 Blue Pill(如下图所示)上,一般在学习时都会使用默认的72Mhz晶振。但当我们自己设计电路板时,如果受到尺寸限制,不想使用外部晶振,可以使用STM32自带的内部8Mhz晶振。这篇文章主要介绍了如何修改标准库函数以选择内部的高速时钟HSI。
    STM32小蓝板

    一、官方标准库是如何改变时钟的?

    官方标准库system_stm32f10x.c文件中给定的系统时钟有以下几种:
    在这里插入图片描述
    程序在进入main函数之前,会先进入相应启动函数的文件中,文件名称startup_stm32f10x_ld.s(小容量产品),有下列语句:
    在这里插入图片描述
    SystemInit()就是进行系统时钟初始化的函数,在system_stm32f10x.c文件下。

    我们先看一下该函数到底进行了那些操作。

    对于小容量产品,有宏定义STM32F10X_LD。为简洁起见,去掉SystemInit()函数中没有执行的部分,也就是不满足宏定义的语句。

    void SystemInit (void)
    {
      //初始化时钟
      //设置位0 HSION为1,使能内部 8Mhz 高速时钟 HSI
      RCC->CR |= (uint32_t)0x00000001;
      RCC->CFGR &= (uint32_t)0xF8FF0000;
      //系统时钟切换00:HSI作为系统时钟
      //HPRE(AHB频分频) 设置不分频
      //PPRE1:低速APB1预分频,设置不分频
      //PPRE2:高速APB2预分频,设置不分频
      //ADCPRE:ADC预分频,设置PCLK2 2分频后作为ADC时钟
      //MCO:微控制器时钟输出,设置为没有时钟输出
    
      //PLLON、CSSON、HSEON置0
      RCC->CR &= (uint32_t)0xFEF6FFFF;
      //复位 HSEBYP
      RCC->CR &= (uint32_t)0xFFFBFFFF;
      //复位PLLSRC, PLLXTPRE, PLLMUL, USBPRE/OTGFSPRE
      RCC->CFGR &= (uint32_t)0xFF80FFFF;
      //关闭所有中断,清除保留位
      RCC->CIR = 0x009F0000;
      //配置系统时钟频率,HCLK,PCLK2,PCLK1的预分频
      SetSysClock();
    } 
    

    函数中除了最后一条语句基本都是操作了RCC中的相关寄存器,最后一条SetSysClock()则是设置了系统时钟。

    static void SetSysClock(void)
    {
    #ifdef SYSCLK_FREQ_HSE
      SetSysClockToHSE();
    #elif defined SYSCLK_FREQ_24MHz
      SetSysClockTo24();
    #elif defined SYSCLK_FREQ_36MHz
      SetSysClockTo36();
    #elif defined SYSCLK_FREQ_48MHz
      SetSysClockTo48();
    #elif defined SYSCLK_FREQ_56MHz
      SetSysClockTo56();
    #elif defined SYSCLK_FREQ_72MHz
      SetSysClockTo72();
    #endif
    } 
    

    由于已经宏定义了SYSCLK_FREQ_72MHz,因此该函数最终执行的是SetSysClockTo72()。

    static void SetSysClockTo72(void)
    {
      __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
    
      /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/
      /*开启HSE振荡器 */
      RCC->CR |= ((uint32_t)RCC_CR_HSEON);
      //等待HSE稳定,StartUpCounter用于超时处理判断标志
      do
      {
        HSEStatus = RCC->CR & RCC_CR_HSERDY; //HSIRDY由硬件置1表示内部8MHz振荡器就绪
        StartUpCounter++;
      } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
    
      //若HSE稳定,HSEStatus = 0x01
      if ((RCC->CR & RCC_CR_HSERDY) != RESET) //RESET = 0
      {
        HSEStatus = (uint32_t)0x01;
      }
      else  //HSE超时了还没有稳定
      {
        HSEStatus = (uint32_t)0x00;
      }
    
      //  HSE启动成功
      if (HSEStatus == (uint32_t)0x01)
      {
        // 使能Flash与存储缓冲区,flash设置相关,查看闪存编程手册
        FLASH->ACR |= FLASH_ACR_PRFTBE;
        FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);//清除LATENCY位
        FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
    
        // 不分频SYSCLK ,HCLK = SYSCLK,即AHB不分频
        RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
    
        //APB2不分频,即PCLK2 = HCLK
        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
        //APB1二分频,即PCLK1 = HCLK/2
        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
    
        //把PLLSRC,PLLXTPRE,PLLMULL位清0
        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                            RCC_CFGR_PLLMULL));
        //设置HSE时钟作为PLL输入时钟,PLL 9倍频输出
        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
        //PLL使能
        RCC->CR |= RCC_CR_PLLON;
        //等待PLL时钟就绪
        while((RCC->CR & RCC_CR_PLLRDY) == 0)
        {
        }
    
        //清除SW位
        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
        //设置PLL输出作为系统时钟
        RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;
    
        //等待系统时钟切换到PLL
        while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
        {
        }
      }
      else
      {
        //如果HSE启动失败,应用将会获得错误的时钟配置,用户可以在此处编写代码处理这种错误
      }
    } 
    

    到此STM32的时钟就配置完成了,按照默认的配置,我们可以得到如下时钟设置:

    • SYSCLK = 72Mhz
    • AHB不分频,HCLK = 72Mhz
    • APB1二分频,PCLK1 = 36Mhz
    • APB2不分频,PCLK2 = 72Mhz

    二、修改系统时钟

    了解了官方时钟配置的方法,我们就可以任意修改系统时钟了。这里以内部HIS时钟为例,介绍设置系统时钟为64Mhz的方法。方法很简单,将SystemInit()中的内容替换为如下程序:

    void SystemInit(void)
    {
        RCC_DeInit();//将外设 RCC寄存器重设为缺省值,复位
        RCC_HSICmd(ENABLE);//使能HSI
        while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);      //等待HSI使能成功
    
        //使能Flash与存储缓冲区,flash设置相关,查看闪存编程手册
        FLASH->ACR |= FLASH_ACR_PRFTBE;
        FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);  //清除LATENCY位
        FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
    
        RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB的分频系数
        RCC_PCLK1Config(RCC_HCLK_Div2);  //设置APB1的分频系数
        RCC_PCLK2Config(RCC_HCLK_Div1);  //设置APB2的分频系数
    
        //设置 PLL 时钟源及倍频系数
        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);
        RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能
    
        //等待指定的 RCC 标志位设置成功 等待PLL初始化成功
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
    
        //设置系统时钟(SYSCLK) 设置PLL为系统时钟源
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟
        //等待PLL成功用作于系统时钟的时钟源
    
        //  0x00:HSI 作为系统时钟
        //  0x04:HSE作为系统时钟
        //  0x08:PLL作为系统时钟
        while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来
    }
    //设置的系统时钟 SYSCLK 为 64Mhz 
    

    每条语句的具体作用通过注释就可以了解,这里主要说明一下关于FLASH的配置语句。

    FLASH->ACR |= FLASH_ACR_PRFTBE;
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);  //清除LATENCY位
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; 
    

    我们可以从STM32F10x闪存编程手册中找到该寄存器。
    在这里插入图片描述
    最后三个位的设置需要根据系统时钟来配置。


    展开全文
  • GD32修改系统时钟

    千次阅读 2021-11-16 17:54:19
    使用GD32库修改系统时钟 本人采用外部16M晶振,芯片用的是GD32F103RCT6需要把系统时钟修改到72M。 只需要3步。 1.修改外部晶振数值 2.放出我们需要的宏定义函数 3.修改72M这个函数的倍频系数 因为时钟源选择的是...
  • 一种FPGA实现中时钟偏移(skew)的快速修复方法.pdf
  • stm32F4修改时钟频率,更换为8MHz晶振

    千次阅读 2020-06-21 19:18:17
    stm32F4修改时钟的方法和stm32F103修改时钟的方法不大一样,毕竟库都换了嘛,一个F1的库一个F4的库 而且F1的库默认晶振时钟就是8MHz,给我们提供了很多的方便。而且F1的库写法也很直观,输入频率,自动得出倍频过程...
  • 但是,当遇到12M晶振是如何修改STM32系统时钟呢? 具体步骤如下: 第一步,全局搜索HSE_VALUE #define HSE_VALUE ((uint32_t)8000000) /*!< Value xss=removed xss=removed>CFGR &= (uint32_t)((uint32_t)~(RCC_...
  • 最近做的项目,遇到问题以及...解决办法:(1)更改器件型号(2)改启动文件,并对应修改C++中名字(3)修改stm32f4xx.h中 #ifdef STM32F40xx #defineSTM32F401xx(以前为40-41) (4)延时初始化函数Delay_init(84)...
  • stm32修改系统时钟经验

    千次阅读 2019-01-21 16:17:21
    在使用stm32开发的过程中,有时需要手动修改系统时钟参数,使板子上的晶振和目标系统时钟匹配。在此记录一下对时钟配置代码的理解。 1.需要修改的文件:system_stm32f0xx.c、stm32f0xx.h 2.system_stm32f0xx.c文件...
  • 本实验将给出系统时钟频率的查看方法,以及修改的方法。真正的想要了解这款单片机的时钟树还得自己去啃手册。 如何修改系统时钟频率 在system_msp4329401r.c文件中,在64~71行处,定义了一个宏,修改这个宏即可。 ...
  • 2.STC15W408AS单片机时钟

    千次阅读 2021-06-28 09:56:50
    STC15W408AS单片机有两个时钟源:内部高精度R/C时钟和外部时钟(外部输入时钟或外部晶体振荡器产生的时钟)。内部高精度R/C时钟(±0.3%),±1%温漂,常温下温漂±0.6%(-20℃~+65℃)。 一、内部时钟配置 内部时钟配置...
  • keil环境修改STM32时钟

    千次阅读 2018-01-11 15:38:59
    这里使用了25兆的时钟频率,与外部的8兆不符合,所以串口通信的时候会乱码,当25兆改成8兆的时候通信会正常。 还有人认为改keil里面如下   修改这里也没有用,因为我试过,也是乱码。 其实最好的解决...
  • 本系统设计了一种采用无线遥控修改时钟数据的LED时钟显示屏。  系统组成 1 遥控发射器 图1遥控发射器框图  遥控发射器由6个按键、F06A无线发射芯片、4个隔离二极管等元件组成。如图1所示。  2 LED时钟屏...
  • 圆形钟表和指针实现源码,vc++时钟程序源代码,主要实现了指针的移动和修改当前时间等功能,圆形表盘的实现也是值得参考的,打开电子钟表程序后,自动获取系统当前时间,各个时针随即走动起来,齐飞的VC练习程序,...
  • 1.HSE:High_Speed_Extenal 外部高速时钟,焊接在芯片外部,精确度较高,是系统时钟的主要来源。 2.HSI :High_Speed_Inernal内部高速时钟,在芯片内部,精度不高。 3.LSE:Low_Speed_Extenal外部低速时钟,接频率...
  • 1)由PCF8563提供时间参数并由ZLG7290进行显示;(2)能够利用键盘实现时间参数的修改修改过程可加入“回显”、“闪烁”、 “容错”等功能; (3)利用蜂鸣器实现时钟系统的“整点报时”功能;
  • MDK的操作IAR的操作其中HSE_VALUE代表的是外部输入时钟的频率
  • vivado2019.2修改clk_wizard时钟后报错...接下来修改时钟为200M,开始编译,报错:ERROR: [BD 41-238] Port/Pin property FREQ_HZ does not match between /proc_sys_reset_0/slowest_sync_clk(300000000) and /clk_wiz
  • GD芯片开发时钟树配置及修改指导

    千次阅读 2022-04-21 16:35:03
    GD芯片开发之后是时钟树配置指导 ...修改时钟树总结 前言 提示:这里可以添加本文要记录的大概内容: 随着全球芯片荒趋势蔓延,芯片替代在企业内部变得越来越重要,甚至成为企业生存的重大问题,GD芯片与ST芯
  • 他启用的是与系统时钟不同的硬件定时器,挂接用户自己的中断处理函数,去掉用户自己的中断处理函数,去掉内核驱动的负荷,时钟分辨率的高低取决于硬件定时器的精度和用户中
  • Linux修改系统时间

    2022-04-30 16:19:35
    1.修改硬件时钟的可以使用下面的方法: 你就可以用它来随时更新你的硬件时间,命令为: hwclock --adjust 硬件时钟通常被设置成全球标准时间(UTC),而将时区信息保存在/usr/share/lib/timezone (或者在某些系统中...
  • STM32直接用寄存器设置系统时钟

    千次阅读 多人点赞 2021-04-11 13:34:59
    时钟就犹如人的心脏,它是STM32芯片的心脏,每一个设备工作,都要有自己的节拍,这一章就讲一下关于STM32的时钟。 @TOP 一、时钟树 二、五个时钟源 1、HSI RC 内部高速时钟,RC振荡器,产生8MHZ频率,可直接作为系统...
  • STM32CubeMX配置时钟

    千次阅读 2022-03-20 16:58:23
    STM32CubeMX配置时钟树一、概念二、应用结语 一、概念 HSI:High Speed Internal Clock Signal的缩写,即内部高速时钟信号 HSE:High Speed External Clock Signal的缩写,即外部高速时钟信号 HSI精度偏低,随使用...
  • 这是模拟时钟专家.apk的修改和美化版。 1.统一了各个钟面尺寸,保证能正确显示日期。 2.替换了大部分不够美观的钟面,并进行了美化。
  • 修改MSP430f5529的时钟,实测时钟最高24.9MHz
  • 对之前的时钟插件进行修改更新后的测试版本,增加了更换颜色,记忆定位等功能,修改之前出现的BUG。 功能说明:1、增加退出按键,选中插件后esc为退出 2、增加菜单功能,调出菜单:时分间冒号右键(现为测试版本,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 141,874
精华内容 56,749
关键字:

修改时钟