范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

STM32F4芯片嵌入式学习7

  文档是本人学习总结的文档,有些乱,勿怪。
  1、STM32F407时钟系统
  在 STM32F4 中,有 5 个最重要的时钟源,为 HSI、HSE、LSI、LSE、PLL。其中 PLL 实际是分为两个时钟源,分别为主 PLL 和专用 PLL。从时钟频率来分可以分为高速时钟源和低速时钟源,在这 5 个中 HSI,HSE 以及 PLL 是高速时钟,LSI 和 LSE 是低速时钟。从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源,其中 HSE 和LSE 是外部时钟源,其他的是内部时钟源。下面我们看看 STM32F4 的这 5 个时钟源,我们讲解顺序是按图中红圈标示的顺序:
  ①、LSI 是低速内部时钟,RC 振荡器,频率为 32kHz 左右。供独立看门狗和自动唤醒单元使用。
  ②、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。
  ③、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~26MHz。我们的开发板接的是 8M 的晶振。HSE 也可以直接做为系统时钟或者 PLL 输入。
  ④、HSI 是高速内部时钟,RC 振荡器,频率为 16MHz。可以直接作为系统时钟或者用作 PLL输入。
  ⑤、PLL 为锁相环倍频输出。STM32F4 有两个 PLL:
  1) 主 PLL(PLL)由 HSE 或者 HSI 提供时钟信号,并具有两个不同的输出时钟。
  第一个输出 PLLP 用于生成高速的系统时钟(最高 168MHz)
  第二个输出 PLLQ 用于生成 USB OTG FS 的时钟(48MHz),随机数发生器的时钟和 SDIO
  时钟。
  2)专用 PLL(PLLI2S)用于生成精确时钟,从而在 I2S 接口实现高品质音频性能
  这里我们着重看看主 PLL 时钟第一个高速时钟输出 PLLP 的计算方法。如图
  可以看出。主 PLL 时钟的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器出来之后的时候还需要经过一个分频系数为 P(第一个输出 PLLP)或者 Q(第二个输出 PLLQ)的分频器分频之后,最后才生成最终的主 PLL 时钟。例如我们的外部晶振选择 8MHz。同时我们设置相应的分频器 M=8,倍频器倍频系数 N=336,分频器分频系数 P=2,那么主 PLL 生成的第一个输出高速时钟 PLLP 为:
  PLL=8MHz * N/ (M*P)=8MHz* 336 /(8*2) = 168MHz
  如果我们选择HSE为PLL时钟源,同时SYSCLK时钟源为PLL,那么SYSCLK时钟为 168MHz。这对于我们后面的实验都是采用这样的配置。上面我们简要概括了 STM32 的时钟源,那么这 5 个时钟源是怎么给各个外设以及系统提供时钟的呢?这里我们选择一些比较常用的时钟知识来讲解。图1中
  A.这里是看门狗时钟输入。从图中可以看出,看门狗时钟源只能是低速的 LSI 时钟。
  B.这里是 RTC 时钟源,从图上可以看出,RTC 的时钟源可以选择 LSI,LSE,以及HSE 分频后的时钟,HSE 分频系数为 2~31。
  C.这里是 STM32F4 输出时钟 MCO1 和 MCO2。MCO1 是向芯片的 PA8 引脚输出时钟。它有四个时钟来源分别为:HSI,LSE,HSE 和 PLL 时钟。MCO2 是向芯片的PC9 输出时钟,它同样有四个时钟来源分别为:HSE,PLL,SYSCLK 以及 PLLI2S时钟。MCO 输出时钟频率最大不超过 100MHz。
  D.这里是系统时钟。从图 可以看出,SYSCLK 系统时钟来源有三个方面:HSI,HSE 和 PLL。在我们实际应用中,因为对时钟速度要求都比较高我们才会选用 STM32F4 这种级别的处理器,所以一般情况下,都是采用 PLL 作为 SYSCLK时钟源。根据前面的计算公式,大家就可以算出你的系统的 SYSCLK 是多少。
  E.这里我们指的是以太网 PTP 时钟,AHB 时钟,APB2 高速时钟,APB1 低速时钟。这些时钟都是来源于 SYSCLK 系统时钟。其中以太网 PTP 时钟是使用系统时钟。AHB,APB2 和 APB1 时钟是经过 SYSCLK 时钟分频得来。这里大家记住,AHB最大时钟为168MHz, APB2高速时钟最大频率为84MHz,而APB1低速时钟最大频率为 42MHz。
  F.这里是指 I2S 时钟源。从图 4.3.1 可以看出,I2S 的时钟源来源于 PLLI2S 或者映射到 I2S_CKIN 引脚的外部时钟。I2S 出于音质的考虑,对时钟精度要求很高。探索者 STM32F4 开发板使用的是内部 PLLI2SCLK。
  G.这是 STM32F4 内部以太网 MAC 时钟的来源。对于 MII 接口来说,必须向外部PHY 芯片提供 25Mhz 的时钟,这个时钟,可以由 PHY 芯片外接晶振,或者使用STM32F4 的 MCO 输出来提供。然后, PHY 芯片再给 STM32F4 提 供ETH_MII_TX_CLK 和 ETH_MII_RX_CLK 时钟。对于 RMII 接口来说,外部必须提供 50Mhz 的时钟驱动 PHY 和 STM32F4 的 ETH_RMII_REF_CLK,这个 50Mhz时钟可以来自 PHY、有源晶振或者 STM32F4 的 MCO。我们的开发板使用的是RMII 接口,使用 PHY 芯片提供 50Mhz 时钟驱动 STM32F4 的ETH_RMII_REF_CLK。
  H.这里是指外部 PHY 提供的 USB OTG HS(60MHZ)时钟。这里还需要说明一下,Cortex 系统定时器 Systick 的时钟源可以是 AHB 时钟 HCLK 或HCLK 的 8 分频。具体配置请参考 Systick 定时器配置,我们后面会在 5.1 小节讲解 delay 文件夹代码的时候讲解。在以上的时钟输出中,有很多是带使能控制的,例如 AHB 总线时钟、内核时钟、各种 APB1外设、APB2 外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。后面我们讲解实例的时候会讲解到时钟使能的方法。
  2、STM32F4芯片时间系统使能、
  上一小节我们对 STM32F4 时钟树进行了初步的讲解,接下来我们来讲解一下 STM32F4 的系统时钟配置。STM32F4 时钟系统初始化是在 system_stm32f4xx.c 中的 SystemInit()函数中完成的。对于系统时钟关键寄存器设置主要是在 SystemInit 函数中调用 SetSysClock()函数来设置的。我们可以先看看 SystemInit ()函数体:
  void SystemInit(void)
  {
  /* FPU settings ------------------------------------------------------------*/
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
  SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
  #endif
  /* Reset the RCC clock configuration to the default reset state ------------*/
  /* Set HSION bit */
  RCC->CR |= (uint32_t)0x00000001;
  /* Reset CFGR register */
  RCC->CFGR = 0x00000000;
  /* Reset HSEON, CSSON and PLLON bits */
  RCC->CR &= (uint32_t)0xFEF6FFFF;
  /* Reset PLLCFGR register */
  RCC->PLLCFGR = 0x24003010;
  /* Reset HSEBYP bit */
  RCC->CR &= (uint32_t)0xFFFBFFFF;
  /* Disable all interrupts */
  RCC->CIR = 0x00000000;
  #if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
  SystemInit_ExtMemCtl();
  #endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
  /* Configure the System clock source, PLL Multiplier and Divider factors,
  AHB/APBx prescalers and Flash settings ----------------------------------*/
  SetSysClock();
  /* Configure the Vector Table location add offset address ------------------*/
  #ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
  #else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
  #endif
  }
  SystemInit 函数开始先进行浮点运算单元设置,然后是复位 PLLCFGR,CFGR 寄存器,同时通过设置 CR 寄存器的 HSI 时钟使能位来打开 HSI 时钟。默认情况下如果 CFGR 寄存器复位,那么是选择 HSI 作为系统时钟,这点大家可以查看 RCC->CFGR 寄存器的位描述最低 2 位可以得知,当低两位配置为 00 的时候(复位之后),会选择 HSI 振荡器为系统时钟。也就是说,调用 SystemInit 函数之后,首先是选择 HSI 作为系统时钟。下面是 RCC->CFGR 寄存器的位 1:0配置描述(CFGR 寄存器详细描述请参考《STM32F4 中文参考手册》6.3.31CFGR 寄存器配置表)如下表
  在设置完相关寄存器后,接下来 SystemInit 函数内部会调用 SetSysClock 函数。这个函数比较长,我们就把函数一些关键代码行截取出来给大家讲解一下。这里我们省略一些宏定义标识符值的判断而直接把针对 STM32F407 比较重要的内容贴出来:
  这段代码的大致流程是这样的:先使能外部时钟 HSE,等待 HSE 稳定之后,配置AHB,APB1,APB2 时钟相关的分频因子,也就是相关外设的时钟。等待这些都配置完成之后,打开主 PLL 时钟,然后设置主 PLL 作为系统时钟 SYSCLK 时钟源。如果 HSE 不能达到就绪状态(比如外部晶振不能稳定或者没有外部晶振),那么依然会是 HSI 作为系统时钟。在这里要特别提出来,在设置主 PLL 时钟的时候,会要设置一系列的分频系数和倍频系数参数。大家可以从 SetSysClock 函数的这行代码看出:
  RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |
  (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);
  这些参数是通过宏定义标识符的值来设置的。默认的配置在 System_stm32f4xx.c 文件开头的地方配置。对于我们开发板,我们的设置参数值如下:
  #define PLL_M 8
  #define PLL_Q 7
  #define PLL_N 336
  #define PLL_P 2
  所以我们的主 PLL 时钟为:
  PLL=8MHz * N/ (M*P)=8MHz* 336 /(8*2) = 168MHz
  在开发过程中,我们可以通过调整这些值来设置我们的系统时钟。这里还有个特别需要注意的地方,就是我们还要同步修改 stm32f4xx.h 中宏定义标识符HSE_VALUE 的值为我们的外部时钟:
  #if !defined (HSE_VALUE)
  #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
  #endif /* HSE_VALUE */
  这里默认固件库配置的是 25000000,我们外部时钟为 8MHz,所以我们根据我们硬件情况修改为 8000000 即可
  讲到这里,大家对 SystemInit 函数的流程会有个比较清晰的理解。那么 SystemInit 函数是怎么被系统调用的呢?SystemInit 是整个设置系统时钟的入口函数。这个函数对于我们使用 ST提供的 STM32F4 固件库的话,会在系统启动之后先执行 main 函数,然后再接着执行 SystemInit函数实现系统相关时钟的设置。这个过程设置是在启动文件 startup_stm32f40_41xxx.s 中间设置的,我们接下来看看启动文件中这段启动代码:
  ; Reset handler
  Reset_Handler PROC
  EXPORT Reset_Handler [WEAK]
  IMPORT SystemInit
  IMPORT __main
  LDR R0, = SystemInit
  BLX R0
  LDR R0, =__main
  BX R0
  ENDP
  这段代码的作用是在系统复位之后引导进入 main 函数,同时在进入 main 函数之前,首先要调用 SystemInit 系统初始化函数完成系统时钟等相关配置。
  最后我们总结一下 SystemInit()函数中设置的系统时钟大小:
  SYSCLK(系统时钟) =168MHz
  AHB 总线时钟(HCLK=SYSCLK)
  =168MHz
  APB1 总线时钟(PCLK1=SYSCLK/4) =42MHz
  APB2 总线时钟(PCLK2=SYSCLK/2) =84MHz
  PLL 主时钟
  =168MHz
  ARM 指令集中的跳转指令可以完成从当前指令向前或向后的 32MB 的地址空间的跳转,包括以下 4 条指令:
  (1) B 跳转指令
  (2) BL 带返回的跳转指令
  (3) BLX 带返回和状态切换的跳转指令
  (4) BX 带状态切换的跳转指令

Byjus最快有望在本月底前完成SPAC合并,乔布斯遗孀或已加入合并竞标仅在短短一个月内,我们就见证了两家新的印度教育科技独角兽企业的出现。随着本栏目常客Byjus的继续加入,今年,这条道路上仍将注定不会平静。动点出海获悉,据知情人士透露,印度教育科技节假日网约车司机私自加价,你怎么看?不要看,你自己开车就行了,价格有市场决定,你同意价格就走,不同意就不走,至于平台的价格,让平台找愿意的车送你好了2月1日至2月3日可以加价3倍运费,2月4日至2月7日可以加价2倍运OPPO新机即将来袭,哈苏联名天玑90002K屏幕80W快充OPPO手机近几年在国内都有相当高的热度,其下属五大系列更是满足人们对高中低端手机需求,有较好的销量和口碑,其新机也是备受期待。在各大处理器厂商发布新处理器之际,OPPO也抓住契机关于音响发烧的那你事(三)关于音响发烧的那点事(三)玩音响最重要的是自己多去听,自己多了解,自己把握,后面这点最重要的。要有分辩力,要多学习,上网多看,谨慎下手,自己知道自己适合什么,如果是电子不懂,最好朋苏宁去年巨亏苏宁预报,去年亏损430多亿,让人瞠目结舌。苏宁从零售企业开始,做的是家电专业店,然后连锁发展,门店达到数千家。成为这个业态的佼佼者。后来跨业态了,百货购物中心便利店再后来电商了云威马,安全智能汽车道路千万条,安全第一条。除了驾驶人员本身要具有很强的安全意识,汽车的安全性能设计对安全出行来说,也至关重要。因此,很多人在购买汽车的时候,都会将汽车本身的安全性能设计作为重要的参考小米第一,Vivo第三!2021年度印度智能手机销量出炉尽管存在供应链问题困扰,四季度市场下降了8,但根据CounterpointResearch的最新数据,2021年全年印度的智能手机出货量仍同比增长了11,并于年底达到1。69亿部。在GPU这方面,麒麟980跟855的差距多大?小伊评科技,希望帮到你一句话总结虽然我也想让麒麟处理器更强,但是无奈,总体差距在30,差别还是比较大的。麒麟980和骁龙855在gpu上的差距还是挺大的,也应该是这两款soc差距最我最近入手了尼康750,想配个70200,好吗?朋友,我是在手机看到你这个问题的,茶不喝了我也得抓紧上电脑给你答复一下。先说一下今年上半年我一同事,研究了一年多的时候,入手了一套相机,其中是一台全幅,一个定焦180镜头,一个10中国联通美未经正当程序做出撤销其美洲公司214牌照决定中国联通3日发出声明回应中国联通(美洲)运营有限公司于美国当地时间2月2日收到美国联邦通信委员会(FCC)撤销214牌照的命令一事。中国联通的声明指出,中国联通美洲公司一直以来按照中国联通对美撤销中国联通美洲公司214牌照做出回应据新华社北京2月3日电中国联通3日发出声明回应中国联通(美洲)运营有限公司于美国当地时间2月2日收到美国联邦通信委员会(FCC)撤销214牌照的命令一事。中国联通的声明指出,中国联
一周内四次下毒手,连续制裁多家中企,美国政府为何无底线?最近一段时间,美国对于中国的打压是越来越过分,首先是美方财政部对于包括大疆创新,商汤科技等企业进行一系列的制裁活动,除此之外,其制裁手段更是变本加厉,将中国的8家企业列入了中国军工美元VC很难受现在的问题不是中概股回不回来,而是还能不能出去。美国政府选择在商汤科技IPO定价的日子发出制裁令,可谓稳准狠。即使最终能够登陆港股,国际资本也轻易不敢碰了,股价何以为继才是大问题。摩托罗拉首发骁龙处理器,市场压力依旧巨大,到底值不值得入手?如果一个手机用好几年那么不建议买,如果就是随手买来玩玩图个新鲜,或者换手机比较频繁的话可以买。为什么这么说呢?因为第芯片首发,所以就是敢于说是吃螃蟹的人,就像骁龙的888一样翻车了山东一哈啰顺风车司机骚扰17岁女乘客,平台欲赔偿500元和解据大河报报道12月13日,山东济宁,一名17岁女学生称遭到哈啰顺风车司机骚扰。14日,平台回应称,涉事司机承认自己确有言语不当之处。平台已对该司机账号永久封禁并将乘车费退还给乘客。苹果销量暴跌,第三季度下滑30以上,但并不是手机产品作为全球最大的科技公司,苹果的经营产品除手机之外还有其他配件,智能穿戴设备成为重要的收益来源。最新一份调查报告显示,苹果智能穿戴设备销量大幅下滑,部分产品出货量暴跌13,可能会严重刘昊然新片上映在即,vivo新代言也震撼来袭再过几天影院将如期迎来期盼已久的圣诞档,首当其冲自然是刘昊然和周冬雨主演的平原上的火焰。这部电影改编自当红80后作家双雪涛作品平原上的摩西,小说则是双雪涛最为知名的代表作,从电影立业界树立全面数据合规理念为网络安全筑牢堤坝来源人民网原创稿人民网北京12月17日电(黄盛)随着5G大数据AI云计算区块链等新兴智能技术的加速运用网络安全保护也面临着新的机遇与挑战。特别是在数据要素成为市场重要要素的背景下,有哪些好用的数据分析工具类软件?这类软件主要用于更专业的数据分析挖掘工作,尤其是在银行金融保险业。SPSSSAS都是用于统计分析,围绕统计学知识的一些基本应用,包括描述统计,方差分析,因子分析,主成分分析,基本的项立刚怼网友下等人穷人,为什么沒有企业家出来批评他?企业家没出来批评项立刚。因为企业家认为它们不是穷人而项立刚认为自己是富人。项立刚要是企业家肯定是黑心资本家。项立刚现在真正出名了,要知道为什么没有企业家出来批评他,我们只要想明白他如果开一家物流公司,给快递员的薪资是市面的两倍,这样能不能垄断快递市场?你能活下去再说不可能,首先别家快递公司的老总都不是傻子,你工资翻倍他不会三倍四倍的碾压你。而且中国这么大,你需要多少快递员。一个快递员一个月五千块的工资,你雇十万人,一个月五亿这都好用的租赁管理系统有哪些?在商办市场迈入存量市场的当下,走向内卷似乎已不可避免。企业在不断探寻各种经营方式的同时,也需要规避降低租赁经营过程中的各类风险,不断加强租赁全业务链条中的风险管控,全面提高资产运营