STM32系统时钟超详解

这篇具有很好参考价值的文章主要介绍了STM32系统时钟超详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!!
📃个人主页:@rivencode的个人主页
🔥系列专栏:玩转STM32
💬保持学习、保持热爱、认真分享、一起进步!!!

一.什么是时钟

1.什么是时钟对单片机有什么作用

时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启相应的时钟,驱动外设的本质是操作寄存器,而寄存器是由D触发器构成,而触发器需要时钟才能改写值,所以要想操作寄存器必须开启对应外设的时钟。对CPU来说假设CPU在一个时钟周期内执行一条指令(二进制代码),若时钟频率越高,而时钟等于1/f为频率的倒数,则时钟周期更短则在相同的时间CPU能够执行更多的指,CPU的运行速度更快,文章的后面会有STM32超频实验,让灯闪烁的更快。(后面会详细讲解实验原理)

2.为什么要有时钟树
STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,主要也是为了降低整个芯片的功耗,所有外设时钟默认都是关闭状态(disable)当我们使用某个外设就要开启这个外设的时钟(enable),不同外设需要的时钟频率不同,没必要所有外设都用高速时钟造成浪费,而且有些外设也接受不了这么高的频率,这也是为什么STM32有四个时钟源的原因,就是兼容不同速度的外设,STM32的四个时钟源分别为:HSE、 LSE、HSI、LSI

二.时钟树

关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
先粗略看一下时钟图,接下来就是分时钟源一 一详细讲解(重点),这里以原子的STM32f10RCT6mini板子为例

1.HSE时钟

  • HSE:High Speed External Clock signal,即高速的外部时钟。
  • 来源:无源晶振(4-16M),通常使用8M。
  • 作用:可不分频或2分频(频率/2)作为PLL锁相环的输入,还可直接不分频作为系统时钟,128分频作为外设RTC时钟的输入
  • 控制:HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭,在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置’1’,时钟才被释放出来。
    1.来源:
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
    2.作用
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
    3.控制
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

2.HSI时钟

  • HSI:High Speed Internal Clock signal,高速的内部时钟。
  • 来源:芯片内部,大小为8M,当HSE故障时,系统时钟 会自动切换到HSI,直到HSE启动成功。
  • 作用:可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差
  • 控制:时钟控制寄存器中的HSIRDY位用来指示HSI RC振荡器是否稳定。在时钟启动过程中,直到这一位被硬件置’1’,HSI RC输出时钟才被释放。HSI RC可由时钟控制寄存器中的HSION位来启动和关闭。如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源

1.作用
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
2.控制
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

3.LSE时钟

  • LSE: low Speed External Clock signal,低速的外部时钟。
  • 来源:芯片内部,LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。
  • 作用:直接作为RTC是时钟来源
  • 控制:LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直到这个位被硬件置’1’后,LSE时钟信号才被释放出来。
    1.作用
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
    2.控制
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

4.LSI时钟

  • LSI: low Speed Internal Clock signal,低速的内部时钟。
  • 来源:内部芯片,LSI RC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,LSI时钟频率大约40kHz(在30kHz和60kHz之间)。
  • 作用:为独立看门狗和自动唤醒单元(RTC)提供时钟
  • 控制:LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直到这个位被硬件设置为’1’后,此时钟才被释放。

1.作用
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
2.控制

关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

5.锁相环时钟PLLCLK

  • 锁相环时钟:PLLCLK
  • 来源:选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子,必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。
  • 作用:内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟(倍频数2~16倍),而经过倍频变成PLLCLK可以作为系统时钟源
  • 控制:寄存器RCC_CFGR:PLLXTPRE、PLLMUL、PLLSRC位,寄存器RCC_CR:PLLNO、PLLRDY详情看下图
  • 注意:PLL时钟源头使用HIS/2的时候,PLLMUL最大只能 是16,这个时候PLLCLK最大只能是64M,小于ST官方推 荐的最大时钟72M。如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。

1.作用
这个图是重中之重
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

6.系统时钟SYSCLK

  • 系统时钟:SYSCLK,最高为72M(ST官方推荐的)
  • 来源:HSI、HSE、PLLCLK。
  • 控制:CFGR:SW
  • 注意:通常的配置是SYSCLK=PLLCLK=72M。

1.来源:关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
2.控制
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
通常的配置是SYSCLK=PLLCLK=72M,配置流程,这里也非常重要后面实验就按照这个过程写代码

关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

7.HCLK时钟

  • HCLK:AHB高速总线时钟,速度最高为72M。
  • 作用:为AHB总线的外设提供时钟、为Cortex系统定时器提供时钟(SysTick)、为内核提供时(FCLK)
  • 来源:系统时钟分频得到,一般设置HCLK=SYSCLK=72M
  • 控制: CFGR:HPRE

1.作用:
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

2.控制
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

8.PCLK1时钟

  • PCLK1:APB1低速总线时钟,最高为36M。
  • 作用:为APB1总线的外设提供时钟。1或2倍频之后则为APB1总线的定时器2~7提供时钟,最大为72M。
  • 来源:HCLK分频得到,一般配置PCLK1=HCLK/2=36M
  • 控制: RCC_CFGR 时钟配置寄存器的PPRE1位

1.作用
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
2.控制
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

9.PCLK2时钟

  • PCLK2:APB2高速总线时钟,最高为72M。
  • 作用:为APB2总线的外设提供时钟。为APB2总线的定时器1和8提供时钟,最大为72M。APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。
  • 来源:HCLK分频得到,一般配置PCLK1=HCLK=72M
  • 控制: RCC_CFGR 时钟配置寄存器的PPRE2位

1.作用
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
2.控制
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

10.RTC时钟

  • RTC时钟:为芯片内部的RTC外设提供时钟。
  • 来源:HSE_RTC(HSE分频得到)、LSE(外部32.768KHZ的 晶体提供)、LSI(32KHZ)。
  • 控制: RCC备份域控制寄存器RCC_BDCR:RTCSEL位控制

独立看门狗时钟:IWDGCLK,由LSI提供
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
控制
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

时钟安全系统(CSS)

关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
监视高速外部时钟HSE的工作状态。若HSE失效,会自动切换高速内部时钟HSI作为系统时钟的输入,保证系统的正常运行。一旦CSS被激活,并且HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。NMI将被不
断执行,直到CSS中断挂起位被清除。

MCO时钟输出

  • MCO:microcontroller clockoutput,微控制器时钟输出引脚,由PA8复用所得。可以把时钟信号输出供外部使用,也可以用示波器检测时钟信号的参数(峰峰值,频率…)
  • 来源:PLLCLK/2,HSE、HSI、SYSCLK
  • 控制:CRGR:MCO
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
    这里再奉上完整时钟树
    关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

三.讲解时钟系统时钟配置函数

1.STM32上电执行的第一个程序

STM32单片机上电,就会执行启动文件(汇编代码编写)中的复位程序。
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
执行复位程序
1.调用SystemInit系统初始化函数完成系统时钟的配置(配置成72MHZ)
2.调用_main函数初始化堆栈指针,然后再调用C库函数main函数,去到C语言的世界
所以跳转到C语言的main函数时,已经完成了系统时钟(SYSCLK)的配置。

关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

2.SystemInit系统时钟初始化函数

以芯片型号: STM32F10X_HD为例
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
这里将系统时钟配置成官方推荐的72MHZ
步骤:
由外部晶振(HSE)提供的8MHz通过PLLXTPRE分频器不分频,输入到PLLSRC,然后通过PLLMUL锁相环进行9倍频后输出PLLCLK时钟(72MHZ),然后通过系统时钟切换SW 将PLLCLK作为系统时钟(72MHZ)。然后通过AHB预分频器进行1分频得到AHB总线时钟(HCLK),然后再分别经过APB1,APB2预分频器分别2分频,1分频,给APB1(PCLK1)APB2(PCLK2)总线提供时钟,进而给分别挂载在APB1,APB2总线的外设提供时钟
配合图来理解:
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

还有对条件编译不熟的一定要看->预处理指令不然怎么调用的函数都不知道

重点来了

static void SetSysClockTo72(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    
  /* Enable HSE :使能 HSE  */
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /*  Wait till HSE is ready and if Time out is reached exit */
  //等待HSE就绪并做超时处理
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }  

  //启动成功执行下一步的代码
  if (HSEStatus == (uint32_t)0x01)
  {
    /*使能预取指 cpu在FLASH取代码*/
    FLASH->ACR |= FLASH_ACR_PRFTBE;

    /* Flash 2 wait state :设置成两个等待周期 */
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    

 
    /* HCLK = SYSCLK =72M */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK2 = HCLK =72M */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
    /* PCLK1 = HCLK =36M */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; //二分频
    /*  锁相环配置: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);


    /* Enable PLL :使能PLL*/ 
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till PLL is ready :等待PLL稳定*/
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }
    
    /* Select PLL as system clock source :选择PLL作为系统时钟*/
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    

    /* Wait till PLL is used as system clock source :等待PLLCLK切换为系统时钟*/
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock 
         configuration. User can add here some code to deal with this error */
		 //如果HSE 启动失败,用户可以在这里添加处理错误的代码
  }
}

老样子把一些if语句折叠看看函数的整体框架:
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
如果HSE启动成功就执行折叠的if语句的内容
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
这里由于空间有限实在是不好一个一个去分析寄存器操作,我自己已经一个一个宏跳转然后对应着寄存器看,建议可以一条一条代码对着手册看,看看是不是真的是操作的寄存器的相对应的位

3.外设时钟的开启

到这里就把系统时钟配置完了,还有总线AHB,APB1,APB2的时钟也配置完成,这些总线上挂载的外设的时钟,要使用哪个外设就开启哪个外设的时钟
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
这些寄存器的相应位就是对应挂载在总线上的外设时钟使能位。

四.自己写系统时钟初始化函数实现超频

1.函数实现

#include "rccclkconfig.h"

void HSE_System_Config( uint32_t RCC_PLLMul_x)
{
	
	ErrorStatus HSEStatus;
	/* 把RCC寄存器配置成复位值 */
	 RCC_DeInit();
	/* 使能SHE */
	RCC_HSEConfig(RCC_HSE_ON);
	HSEStatus=  RCC_WaitForHSEStartUp();
	
	/* 判断SHE启动是否成功 */
	if ( HSEStatus ==SUCCESS )
	{
		/*使能预取指 cpu在FLASH取代码*/
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
		/* 设置成两个等待周期 */
		FLASH_SetLatency(FLASH_Latency_2);
		
		/* HCLK = SYSCLK =72M */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
		
		 /* PCLK2 = HCLK =72M */
    RCC_PCLK1Config(RCC_HCLK_Div2);
		
		/* PCLK1 = HCLK =36M */
    RCC_PCLK2Config(RCC_HCLK_Div1);
		
		 /*  锁相环配置: PLLCLK = HSE * x(2-16) = 8*x MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);
		 /* 使能PLL*/
    RCC_PLLCmd(ENABLE);	
		 /* 等待PLL稳定 */
  while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
		
		/* 选择pLL作为系统时钟 */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
		 /* 等待PLLCLK切换为系统时钟 */
   while( RCC_GetSYSCLKSource() != 0x08) ;
		 
	}
	else
	{
		/* If HSE fails to start-up, the application will have wrong clock 
         configuration. User can add here some code to deal with this error */
	}
}

代码已有详细注释是用库函数编写的,不过基本与前面寄存器版本的一致,只不过把他们封装成了函数,这里要注意的一点是配置前一定要调用一个 RCC_DeInit();函数把RCC寄存器配置成复位值 。

2.实现超频让LED灯闪烁变快

原理:对CPU来说假设CPU在一个时钟周期内执行一条指令(二进制代码),若时钟频率越高,而时钟等于1/f为频率的倒数,则时钟周期更短则在相同的时间CPU能够执行更多的指,CPU的执行代码速度更快,延时的时间就会变短,灯就会闪烁的更快。


#define SOFT_DELAY Delay(0x0FFFFF);

void Delay(__IO u32 nCount); 

int main(void)
{		
	HSE_System_Config( RCC_PLLMul_2);
	/* LED 端口初始化 */
	LED_GPIO_Config();	 

	while(1)
	{
      LED_G(NO);
      LED_R(OFF);
      Delay(0x0FFFFF);
      LED_G(OFF);
      LED_R(NO);
      Delay(0x0FFFFF);	
	}
}

void Delay(__IO uint32_t nCount)	 //简单的延时函数
{
	for(; nCount != 0; nCount--);
}

这里为了有更明显的实验效果,先让PLLMUL锁相环进行2倍频后输出PLLCLK时钟(16MHZ),然后通过系统时钟切换SW将PLLCLK作为系统时钟(16MHZ)。
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
然后让PLLMUL锁相环进行16倍频后输出PLLCLK时钟(128MHZ),然后通过系统时钟切换SW将PLLCLK作为系统时钟(128MHZ)。
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

3.实验效果

PLLMUL锁相环二倍频 SYSCLK(16MHZ)实验效果:
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件
PLLMUL锁相环二倍频 SYSCLK(128MHZ)实验效果:
关于32单片机时钟电路,玩转STM32,单片机,嵌入式硬件

是不是直接起飞,很糊凑合看叭我不会上传视频唉

五.总结

总而言之时钟树非常重要一定要掌握!!!最好可以自己写一个库函数版的系统时钟初始化函数,好啦本文到这就结束啦,如果本文对你有帮助就赶快收藏点赞叭!!!。文章来源地址https://www.toymoban.com/news/detail-779585.html

到了这里,关于STM32系统时钟超详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于STM32单片机的I/O口配置

    最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入  (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出

    2024年02月10日
    浏览(32)
  • 关于两个STM32F103系列单片机的蓝牙通信

       毕设做的是掌控小车,因此采用蓝牙通信作为小车和手部通信,前段时间做出实物,对其遇到的问题以及解决的方法做一些总结。一个主控芯片采用STM32F103ZET6,另一个主控芯片采用STM32F103C8T6,原因是本来准备了两个主控C8T6,不小心烧了一个。 1.两个蓝牙的配对  需要准

    2024年02月13日
    浏览(43)
  • 【32单片机学习】(11)STM32启动过程详解

    目录 前言 一、系统架构 二、启动配置 三、启动流程 1.首先复位MCU,获取栈顶指针MSP和PC指针的内容 2.根据PC的值找到复位中断处理函数Reset_Handler 1.进入中断处理函数Reset_Handler 2.进入SystemInit函数 3._main函数 3.进入main函数 总结          通过查阅官方手册和对实际代码进行

    2024年02月08日
    浏览(33)
  • STM32F103单片机通过SPI全双工通信协议与W25Q64(FLASH)进行通信【串行同步通信(数据线与时钟线配合),(一主多从模式)】附相关驱动代码详解

    1.W25Qxx系列是一种低成本、小型化、使用简单的 非易失性存储器 ,常应用于数据存储、字库存储、固件程序存储等场景 2.存储介质: Nor Flash(闪存) 3.时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI) 4.存储容量(24位地址): W25Q40: 4Mbit / 512KByte W25Q80: 8Mbit / 1MByte W25Q16: 16

    2024年04月13日
    浏览(49)
  • STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(30)
  • 实训关于stm32单片机的多个传感器应用(附C++源码和解析)

    目录 1.实验的目的和要求 2.设计的软件环境 3.思路流程图 4.关键代码解析 4.1温湿度传感器(要监测当前环境的温度、湿度,通过温湿度传感器来实现的) 4.2.光敏电阻传感器(要监测当前环境的光照(黑天和白天),通过光敏电阻传感器来实现的,如果是黑夜,LED灯就亮蓝色

    2023年04月25日
    浏览(29)
  • 单片机 STM32启动文件详解(汇编语言解析)

    以前讲了固件库,从ST官网下载的固件库里面,有许多的启动文件(汇编语言写的.s文件) 启动文件 说明 startup_stm32f10x_ld.s Low Density 小容量 startup_stm32f10x_md.s Medium Density 中容量 startup_stm32f10x_hd.s High Density 高容量 startup_stm32f10x_xl.s Extra Large Density 超大容量 startup_stm32f10x_cl.s Con

    2023年04月25日
    浏览(42)
  • 单片机STM32看门狗详解(嵌入式学习)

    单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。 STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立

    2024年02月13日
    浏览(46)
  • (仅对于(旧板)12分频的51单片机而言)机器周期,时钟周期,晶振振荡频率(fosc)的关系; (51、stm32通用)分频的原理和作用

    1,晶振振荡频率(fosc) fosc即板子所使用的晶振频率,如常用的11.0592Mhz。 2,时钟周期 时钟周期 = 1 / fosc ,单位为us。 3,机器周期 机器周期 = 12 / fosc ,单位为us。 为啥是12? 因为绝大多数51单片机默认12分频,分频原理直接看第四点。 12分频的原因:老版51单片机使用复杂

    2024年02月13日
    浏览(36)
  • 嵌入式STM32 单片机 GPIO 的工作原理详解

    STM32的 GPIO 介绍 GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以 STM32F103ZET6 芯片为例子,该芯片共有 144 脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为

    2024年02月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包