第六周学习

@TOC单片机

洛谷题分析总结

适应环境,认真分析题

    if(((a/100)+(a/10%10)+(a%10)+(b/100)+(b/10%10)+
    (b%10)+(c/100)+(c/10%10)+(c%10)==
    1+2+3+4+5+6+7+8+9)&&
    ((a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*
    (b%10)*(c/100)*(c/10%10)*
    (c%10)==1*2*3*4*5*6*7*8*9))
	//当初就看题解就明白了,之后听学长讲解,
	//才知道1~9相加和1~9相乘才能限定住1~9不重复。
	//仅对本题适用。

学习内容和笔记

一、STM32时钟精讲

1、时钟总述

时钟
三种不同的时钟源可被用来驱动系统时钟(SYSCLK):
1、HSI振荡器时钟
2、HSE振荡器时钟
3、SPLL时钟
这些设备有以下2种二级时钟源:
1、40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC, RTC用于从停机。
2、待机模式下自动唤醒系统。
3、32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。
4、当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。

2、时钟系统框图及简介

在这里插入图片描述
一、1、HSI RC:High speed internal高速内部时钟源,频率约8Hz,内部RC振荡器可被关闭,箭头表示系统时钟可以选择HSI
2、HSE OSC:High speed external:高速外部时钟源,频率4~16Hz,一般取8Hz,箭头表明可被系统时钟选择。
3、css时钟监控系统,一旦HSE切换失败,则自动切换到HSI系统
4、LSE OSC:Low speed external,低速外部时钟源,通过外接晶振来产生,32.768Hz,是给RTC时钟供电的
5、LSI RC:Low speed internal低速内部时钟源,内置RC晶振可关闭。
6、RTC可以来自三个时钟源,HSE, LSE, LSI。

二、RCC时钟(配置,控制提供给各模块时钟信号的通断)相关头文件和固件库源文件:
1、时钟使能配置:
RCC_ LSEConfig() 、RCC_ HSEConfig()、
RCC_ HSICmd()、RCC_ LSICmd()、RCC_ PLLCmd()

2、时钟源相关配置:
RCC_ PLLConfig ()、RCC_ SYSCLKConfig() 、RCC_ RTCCLKConfig()

3、分频系数选择配置:
RCC_ HCLKConfig()、 RCC_ PCLK1Config() 、RCC_ PCLK2Config.
4、外设时钟使能
RCC_ APB1 PeriphClockCmd(): //APB1线上外设时钟使能
RCC_APB2PeriphClockCmd(); //APB2线上外设时钟使能
RCC _AHBPeriphClockCmd(); //AHB线上外设时钟使能

5、其他外设时钟配置:
RCC_ ADCCLKConfig (); RCC_ _RTCCLKConfig()

6、状态参数获取参数:
RCC_ GetClocksFreq()
RCC_ GetSYSCLKSource()
RCC_ GetFlagStatus()

7、RCC中断相关函数
RCC_ ITConfig() 、RCC_ GetITStatus() 、RCC_ ClearITPendingBit()

二、SystemInit时钟系统初始化函数剖析

1、 设置时钟流程:

1、将RCC寄存器重新设置为默认值 RCC_DeInit

2、打开外部高速时钟晶振HSE
RCC_HSEConfig(RCC_HSE_ON);

3、等待外部高速时钟晶振工作
HSEStartUpStatus = RCC_WaitForHSEStartUp();

4、设置AHB时钟 RCC_HCLKConfig;

5、设置高速APB2时钟 RCC_PCLK2Config;
在这里插入图片描述

(预分频)按照上图我理解分频就是不同频率对应成相同的,然后才可以一起工作。在这里插入图片描述

6、设置低速速APB1时钟 RCC_PCLK1Config

7、设置PLL RCC_PLLConfig

8、打开PLL RCC_PLLCmd(ENABLE);

9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

10、设置系统时钟 RCC_SYSCLKConfig

11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource() != 0x08)

12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

2、SetSysClock函数

<span style="font-size:14px;"><span style="font-size:14px;"
static void SetSysClock(void)</span></span>

配置系统时间源,PLL倍频器和分频器因子,AHB/APBX预分频器和FLASH(程序存储器)相关设置。
这个函数只能够被调用一次,那就是在systemInit函数里面

  RCC->CR |= ((uint32_t)RCC_CR_HSEON);// ①</span></span>
 //打开外部晶振,让其起振
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;//②
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));</span></span>
 //打开任何一个时钟之后都要等待它的稳定,然后才能设置为系统时钟或者其他时钟
    RCC->CFGR |= RCC_CFGR_HPRE_DIV1;/</span><span style="font-size:18px;">
    //CFRG时钟源的选择

3、之后的函数寄存器

我正在看,感觉比之前理解多一点了。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值