搜档网
当前位置:搜档网 › IAR 结合H-JTAG调试STM32

IAR 结合H-JTAG调试STM32

IAR 结合H-JTAG调试STM32
IAR 结合H-JTAG调试STM32

IAR 结合H-JTAG调试STM32

一、IAR的配置

IAR Embedded Workbench 是IAR 公司出的一款针对ARM 处理器的IDE。下面将介绍如何配置IAR以配合H-JTAG进行调试。

首先,在IAR 中打开一个项目,然后点击Project->Options菜单,如下图所示:

图1-14 IAR Options 菜单

接下来,用户会看到如图1-15 所示的Options 配置窗口。

图1-15 Options 配置窗口

在图1-15 所示的Options配置窗口中,选择Debugger 设置,并在Setup 页面中,驱动选项中选择RDI。如下图所示:

图1-16 Debugger设置

然后再选择RDI 设置,如下图所示。在这个页面里,用户需要指定RDI 驱动的路径。

图1-17 RDI设置

在上图中,点击Browse按钮,选择H-JTAG安装目录下的H-JTAG.DLL,如下图所示:

图1-18 选择H-JTAG.DLL

在上图中,点击OK按钮,IAR 的设置就完成了。设置完成后,IAR 的主窗口中多了一个RDI 菜单,

如图1-19 所示。在菜单中点击Configure,就可以看到如图1-20 所示的H-JTAG相关信息。

图1-19 IAR设置完成

图1-20 H-JTAG信息

提示:

如果用户用IAR调试的时候希望使用FLASH自动下载功能,请在IAR的Options中,请不要打开Verify Download 和Use Flash Loader(s)选项。设置如下图所示:

图1-21 Verify Download 设置二、H-JTAG Sever的配置

打开H-JTAG Sever,如果找到STM32的核心,界面如下所示:

图1-22 H-JTAG Server的界面

点Settings-TAP Configuration,点击“STM32F”,按下图进行更改:

图1-23 TAP Configuration设置界面

打开H-Flasher,在左边第一项处选择FlashSelection,找到对应的STM32的CPU,界面如下所示:

图1-24 H-Flasher 的FlashSelection界面选择左边第四项Programming,然后点击Check,如下图所示:

图1-25 H-Flasher的Programming界面

三、IAR下载和调试程序

打开IAR,并打开相应工程,按图中红色图标,开始下载程序,如下所示:

图1-26 IAR工程界面

下载成功后,如下图所示:

图1-27 H-Flasher 下载界面

图1-28 IAR调试界面

stm32:系统时钟

实验4 系统时钟实验 上一章,我们介绍了STM32 内部系统滴答定时器,该滴答定时器产生的延时非常精确。在本章中,我们将自定义RCC系统时钟,通过改变其倍频与分频实现延时时间变化,实现LED灯闪烁效果。通过本章的学习,你将了解 RCC系统时钟的使用。本章分为以下学习目标: 1、了解 STM32 的系统构架。 2、了解 STM32 的时钟构架。 3、了解 RCC 时钟的操作步骤。 1.1 STM32 的系统构架 STM32 的时钟比较复杂,它可以选择多种时钟源,也可以选择不一样的时钟频率,而且在系统总线上面,每条系统的时钟选择都是有差异的。所以想要清楚的了解 STM32 的时钟分配,我们先来了解一下 STM32 的系统构架是什么样的。 从上图我们知道,RCC 时钟输出时钟出来,然后经过 AHB 系统总线,分别

分配给其他外设时钟,而不一样的外设,是先挂在不一样的桥上的。比如: ADC1、ADC2、 SPI1、GPIO 等都是挂在 APB2 上面,而有些是挂在 APB1上面,所以,虽然它们都是从 RCC 获取的时钟,但是它们的频率有时候是不一样的。 1.2 STM32 的时钟树 STM32 单片机上电之后,系统默认是用的时钟是单片机内部的高速晶振时钟,而这个晶振容易受到温度的影响,所以晶振跳动的时候不是有一定的影响,所以一般开发使用的时候都是使用外部晶振,而且单片机刚启动的时候,它的时钟频率是 8MHZ,而 STM32 时钟的最高频率是 72MHZ,所以单片机一般开机之后运行的程序是切换时钟来源,并设置时钟频率。大家可能有点疑惑,在第一章到第三章之中,我们并没有看到单片机开机之后设置时钟来源和时钟频率的。其实在使用库函数的时候,其实在库函数启动文件里面,是帮助我们把时钟频率设置到 72MHZ 了。大家可以打开一个库函数工程,在 system_stm32f10x.c 的第 106行,它定义了一个 SYSCLK_FREQ_72MHz: #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE_VALUE */ #define SYSCLK_FREQ_24MHz 24000000 #else #define SYSCLK_FREQ_72MHz 72000000 然后在下面的程序中,根据这个 SYSCLK_FREQ_72MHz 定义,它默认设置成 72MHZ。接下来我们来看一下具体的 RCC 时钟树:

stm32时钟树分析

void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } } }

基于STM32的TFT指针式时钟

基于STM32的TFT指针式时钟 摘要 自时钟发明的那天起,它就注定了与人们有着密不可分的关系,但科学技术在不断发展,人们随着时间的推移对时间计量的精度要求越来越高,机械式时钟也越来越满足不了人们日益增高的要求了。取而代之的事具有高度准确性和直观性且无机械装置,使用寿命更长更长等优点的电子时钟。电子时钟更具人性化,更能提高人们的生活质量,更受人们欢迎,机械时代已经远去,电子时代已经到来。因此本设计是基于意法半导体公司(ST)的STM32开发平台实现一种高精度,智能化的指针式时钟系统,采用STM32内部RTC设计电子时钟时,通常是数字显示,这是由于选用数码管和1602等器件的显示能力有限。而12864是基于点阵式的液晶屏,其像素点为128×64,但12864自身像素较低,使其显示指针式时钟效果远低于2.2寸TFT-LCD液晶,但两者所基于的原理相同。因此本设计采用STM32为控制核心,2.2寸TFT-LCD液晶作为显示芯片,构成了一个指针式电子时钟。 关键词:STM32;RTC;TFT-LCD

第1章绪论 1.1 引言 随着科学技术的发展和电子技术产业结构调整,单片机开始迅速发展,由于家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。单片机以其芯片集成度高、处理功能强、可靠性高等优点,成功应用于工业自动化、智能仪器仪表、家电产品等领域。 近些年,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。而目前,对于指针式时钟来说,所用的指针大多是靠机械装置驱动达到显示时间的目的,例如手表,挂钟,钟楼等等,单片机在指针式时钟中的应用也已经非常普遍的,人们对指针时钟的功能及工作顺序都非常熟悉。但是却很少知道它的内部结构以及工作原理。由单片机作为指针时钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。输出设备显示器可以用液晶显示技术。 1.2 本设计的目的和意义 1.2.1 设计目的 (1)巩固,加深和扩大STM32应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力; (2)培养针对课题需要,选择和查阅有关手册,图表及文献资料的自学能力,提高组成系统,编程,调试的动手能力; (3)对课题设计方案的分析、选择、比较,熟悉用STM32做系统开发,研制的过程,软硬件设计的方法,内容及步骤; (4)进一步掌握C语言在硬件编程中的应用,熟悉怎样用C语言实现TFT-LCD上的绘图功能; (5)掌握STM32内部RTC的原理和应用。 1.2.2设计意义 数字指针式时钟是采用数字电路实现对时,分,秒,星期,年,月,日等数字以及指针表盘显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,

stm32时钟详解

在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。 STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。 另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。 系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。系统时钟可选择为PLL输出、HSI或者HSE。系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用: ①、送给AHB总线、内核、内存和DMA使用的HCLK时钟。 ②、通过8分频后送给Cortex的系统定时器时钟。 ③、直接送给Cortex的空闲运行时钟FCLK。 ④、送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。 ⑤、送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。 在以上的时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。 需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。

图文详解stm32时钟树

对于广大初次接触STM32的读者朋友(甚至是初次接触ARM器件的读者朋友)来说,在熟悉了开发环境的使用之后,往往“栽倒”在同一个问题上。这问题有个关键字叫:时钟树。 众所周知,微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动——往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟“能量”扩散流动的路径,犹如大树的养分通过主干流向各个分支,因此常称之为“时钟树”。在一些传统的低端8位单片机诸如51,AVR,PIC等单片机,其也具备自身的一个时钟树系统,但其中的绝大部分是不受用户控制的,亦即在单片机上电后,时钟树就固定在某种不可更改的状态(假设单片机处于正常工作的状态)。比如51单片机使用典型的12MHz晶振作为时钟源,则外设如IO口、定时器、串口等设备的驱动时钟速率便已经是固定的,用户无法将此时钟速率更改,除非更换晶振。 而STM32微控制器的时钟树则是可配置的,其时钟输入源与最终达到外设处的时钟速率不再有固定的关系,本文将来详细解析STM32微控制器的时钟树。

图1是STM32微控制器的时钟树,表1是图中各个标号所表示的部件。 标号图1标号释义 1 内部低速振荡器(LSI,40Khz) 2 外部低速振荡器(LSE,32.768Khz) 3 外部高速振荡器(HSE,3-25MHz) 4 内部高速振荡器(HIS,8MHz) 5 PLL输入选择位 6 RTC时钟选择位 7 PLL1分频数寄存器 8 PLL1倍频寄存器 9 系统时钟选择位 10 USB分频寄存器 11 AHB分频寄存器 12 APB1分频寄存器 13 AHB总线 14 APB1外设总线 15 APB2分频寄存器 16 APB2外设总线 17 ADC预分频寄存器 18 ADC外设 19 PLL2分频数寄存器 20 PLL2倍频寄存器 21 PLL时钟源选择寄存器 22 独立看门狗设备 23 RTC设备 图1 STM32的时钟树 在认识这颗时钟树之前,首先要明确“主干”和最终的“分支”。假设使用外部8MHz 晶振作为STM32的时钟输入源(这也是最常见的一种做法),则这个8MHz便是“主干”,而“分支”很显然是最终的外部设备比如通用输入输出设备(GPIO)。这样可以轻易找出第一条时钟的“脉络”:3——5——7——21——8——9——11——13 对此条时钟路径做如下解析: 对于3,首先是外部的3-25MHz(前文已假设为8MHz)输入; 对于5,通过PLL选择位预先选择后续PLL分支的输入时钟(假设选择外部晶振); 对于7,设置外部晶振的分频数(假设1分频); 对于21,选择PLL倍频的时钟源(假设选择经过分频后的外部晶振时钟); 对于8,设置PLL倍频数(假设9倍频); 对于9,选择系统时钟源(假设选择经过PLL倍频所输出的时钟); 对于11,设置AHB总线分频数(假设1分频); 对于13,时钟到达AHB总线; 在上一章节中所介绍的GPIO外设属于APB2设备,即GPIO的时钟来源于APB2总线,同样在图1中也可以寻获GPIO外设的时钟轨迹:

STM32F4时钟树外设挂靠总线学习小结

STM32F4时钟树学习小结 时钟是单片机的心脏,重要性不言而喻,STM32F4的时钟树是比较复杂的。 时钟树图一

时钟树图二 1:STMF4xx系统共计有三个主要时钟源(HSI、HSE和PLL)和两个次要时钟源(LSE、LSI)。2:SYSCLK可以来自HSI、HSE和PLL,多数采用PLL频率最高能达到168MHz。 3:RTC时钟可以来自LSE、LSI和HSE,但只有用LSE时,才能保证系统电源掉电时RTC仍能正常工作。 4:可通过多个预分频器配置AHB 频率、高速APB (APB2) 和低速APB (APB1)。AHB 域的最大频率为168 MHz。高速APB2 域的最大允许频率为84 MHz。低速APB1 域的最大允许频率为42 MHz。 5:STM32F405xx/07xx 和STM32F415xx/17xx 的定时器时钟频率由硬件自动设置。如果APB 预分频器为1,定时器时钟频率等于APB 域的频率。否则,等于APB 域的频率的两倍(×2)。 6:除以下时钟外,所有外设时钟均由系统时钟(SYSCLK) 提供: ●来自于特定PLL 输出(PLL48CLK) 的USB OTG FS 时钟(48 MHz)、基于模拟技术的随机数发生器(RNG) 时钟(<=48 MHz) 和SDIO 时钟(<= 48 MHz)。 ●I2S 时钟 ●由外部PHY 提供的USB OTG HS (60 MHz) 时钟 ●由外部PHY 提供的以太网MAC 时钟(TX、RX 和RMII)。 下面介绍挂在不同总线上的设备情况 1、挂在AHB1总线的外设有:最高时钟频率:168MHZ 1)GPIOA~K 2)RCC_AHB1Periph_CRC 3)FLITF 4)SRAM1 5)SRAM2 6)BKPSRAM 7)SRAM3 8)CCMDATARAMEN 9)DMA1 10)DMA2 11)DMA2D 12)ETH_MAC、ETH_MAC_Tx、ETH_MAC_Rx、ETH_MAC_PTP

单片机STM32时钟图文理解

单片机STM32时钟图文理解 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认使用内部高速时钟。而外部时钟信号是由外部的晶振输入的,在精度和稳定性上都有很大优势,所以上电之后我们再通过软件配置,转而采用外部时钟信号. 高速外部时钟(HSE):以外部晶振作时钟源,晶振频率可取范围为4~16MHz,我们一般采用8MHz的晶振。 高速内部时钟(HSI):由内部RC振荡器产生,频率为8MHz,但不稳定。 低速外部时钟(LSE):以外部晶振作时钟源,主要提供给实时时钟模块,所以一般采用32.768KHz。 低速内部时钟(LSI):由内部RC振荡器产生,也主要提供给实时时钟模块,频率大约为40KHz。 OSC_OUT和OSC_IN开始,这两个引脚分别接到外部晶振8MHz,第一个分频器PLLXTPRE,遇到开关PLLSRC(PLL entry clock source),我们可以选择其输出,输出为外部高速时钟(HSE)或是内部高速时钟(HSI)。这里选择输出为HSE,接着遇到锁相环PLL,具有倍频作用,在这里我们可以输入倍频因子PLLMUL,要是想超频,就得在这个寄存器上做手脚啦。经过PLL的时钟称为PLLCLK。倍频因子我们设定为9倍频,也就是说,经过PLL之后,我们的时钟从原来8MHz的HSE变为72MHz的PLLCLK。紧接着又遇到了一个开关SW,经过这个开关之后就是STM32的系统时钟(SYSCLK)了。通过这个开关,可以切换SYSCLK的时钟源,可以选择为HSI、PLLCLK、HSE。我们选择为PLLCLK 时钟,所以SYSCLK就为72MHz了。PLLCLK在输入到SW前,还流向了USB预分频器,这个分频器输出为USB外设的时钟(USBCLK)。回到SYSCLK,SYSCLK经过AHB 预分频器,分频后再输入到其它外设。如输出到称为HCLK、FCLK的时钟,还直接输出

stm32时钟输出

STM32 RCC实验MCO脚输出时钟波形 2012-5-1 08:05|发布者: benben|查看: 1457|评论: 0 摘要: 为了能用示波器看到系统时钟,决定将系统时钟输出到MCO引脚上去。弄了一晚上, 看见波形了。首先建立空的工程,将下面三行代码注释掉:;IMPORT SystemInit ;删除SystemInit自己写RCC初始化函数;LDR R0, =SystemInit ... 为了能用示波器看到系统时钟,决定将系统时钟输出到MCO引脚上去。 弄了一晚上,看见波形了。 首先建立空的工程,将下面三行代码注释掉: ;IMPORT SystemInit ;删除SystemInit自己写RCC初始化函数 ;LDR R0, =SystemInit ;BLX R0 下面是设置函数,使用HSI作为系统时钟,不实用PLL,直接将HSI输出到MCO引脚:void My_RccInitMCOHSI(void) { uint8_t temp; My_Rcc_DeInit(); RCC->CR |= 1<<0; //复位HSION 开启内部时钟;其实内部时钟不用管的,开机自动使用内部时钟。 while(!(RCC->CR>>1)); //检查HSI是否就绪 RCC->CFGR &= (~0x03); //清零CFGR的0、1位HSI作为系统时钟 while(temp!=0x00) //读取CFGR的2、3为,判断是否是HSI作为系统时钟设置

{ temp=RCC->CFGR>>2; temp&=0x03; } //此时HSI已经成为系统时钟 //HSI时钟就绪后,直接输出到MCO(PA8) RCC->APB2ENR |= 1<<2; //使能PA时钟 RCC->APB2ENR|=1<<5; //使能PORTD时钟 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X0000000B;//PA8 推挽输出(MCO) // //设置MCO输出内部HSI时钟 RCC->CFGR |= 5<<24; //MCO输出HSI时钟 //RCC->CFGR |= 4<<24; MCO输出系统时钟SYSCLK //此时就可以在PA8即MCO引脚看见输出波形了对比下,两者是一样的。} 下边是示波器出来的图:

最全的STM32八种IO口模式讲解(已经标注,新手必备)

以及上拉输入、下拉输入、浮空输入、模拟输入的区别 最近在看数据手册的时候,发现在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 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总结: 推挽输出:可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源低定。 推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 详细理解: 如图所示,推挽放大器的输出级有两个“臂”(两组放大元件),一个“臂”的电流增加时,另一个“臂”的电流则减小,二者的状态轮流转换。对负载而言,好像是一个“臂”在推,一个“臂”在拉,共同完成电流输出任务。当输出高电平时,也就是下级负载门输入高电平时,输出端的电流将是下级门从本级电源经VT3拉出。这样一来,输出高低电平时,VT3 一路和VT5 一路将交替工作,从而减低了功耗,提高了每个管的承受能力。又由于不论走哪一路,管子导通电阻都很小,使RC常数很小,转变速度很快。因此,推拉式输出级既提高电路的负载能力,又提高开关速度。 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 开漏形式的电路有以下几个特点: 1. 利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很下的栅极驱动电流。

STM32F427xx系列芯片系统时钟讲解

STM32F427xx系列芯片系统时钟讲解 ——写代码的Tobem 为了进行通用定时器的设置,有必要先了解STM32F427xx系列芯片的时钟系统。为了实现低功耗(对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗),STM32F427xx设计了功能完善但却有点复杂的时钟系统,见下图: 图2 STM32F427xx系统时钟树 从图中可以看出,STM32F427xx具有4个时钟源,分别为2个内部时钟源和2个外部时钟源,也可以分为2个高速时钟源和2个低速时钟源,具体为: 1、HSE(高速外部时钟):以外部晶振作时钟源,晶振频率可取范围为4~26MHz,实际电路图中我们采用12MHz的晶振。

2、HSI(高速内部时钟):由内部RC振荡器产生,频率为16MHz。其特点是起振快,在芯片刚上电的时候,就是使用高速内部时钟,但其精度不高,因此,上电之后我们再通过软件配置(SystemInit()函数),转而采用高速外部时钟信号。 3、LSE(低速外部时钟):以外部晶振作时钟源,主要提供给实时时钟模块(RTC),一般采用32.768KHz。 4、LSI(低速内部时钟):由内部RC振荡器产生,频率为32KHz,主要用于驱动独立看门狗,也可选择提供给RTC 用于停机/待机模式下的自动唤醒。 程序在执行主函数main()之前,要先进行堆栈指针SP、程序计数器PC的初始化、设置异常中断向量地址等工作,最后才进入到主函数main()中去执行,这其中包括系统时钟的配置(在startup_stm32f4xx.s启动文件中)。系统时钟的配置由system_stm32f4xx.c文件中的SystemInit()函数完成,配置结果如下: 图3 系统时钟配置情况 从时钟树中可以看到,系统时钟SYSCLK是大部分器件的时钟来源,因此SYSCLK的配置就显得十分重要。SYSCLK可以从三个时钟源中进行选择,分别为HSI、HSE和PLLCLK。HSI 不稳定,而HSE速率太低(4~26MHz),为了使系统获得较快的运行速率和稳定性,我们选

STM32时钟初始化函数SystemInit()详解

花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学STM32,,现记录如下(有理解错误的地方还请大侠指出): 使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23 我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz 函数调用顺序: startup_stm32f10x_cl.s(启动文件)→ SystemInit() → SetSysClock () → SetSysClo ckTo72() 初始化时钟用到的RCC寄存器复位值: RCC_CR = 0x0000 xx83; RCC_CFGR = 0x0000 0000;RCC_CIR = 0x0000 0000; RCC_CFG R2 = 0x0000 0000; SystemInit() 在调用 SetSysClock()之前RCC寄存器的值如下(都是一些与运算,或运算,在此就不赘述了):RCC->CR = 0x0000 0083; RCC->CIR = 0x00FF0000; RCC->CFGR2 = 0x00000000;至于这些寄存器都代表着什么意思,详见芯片资料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 //我的定义的是SYSCLK_FREQ_72MHz,所以调用SetSys ClockTo72() SetSysClockTo72(); #endif } SetSysClockTo72()函数如下: static void SetSysClockTo72(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/

STM32时钟总结剖析

STM32时钟总结 一、时钟基本概念 (2) 二、时钟树 (7) 三、 STM32上电后时钟的过程 (7) 3.1执行SystemInit()函数 (7) 3.2 执行SetSysClock()函数 (8) 3.3执行SetSysClockTo72()函数 (8) 3.3.2 判断外部高速时钟源是否稳定 (8) 3.3.4 FLASH配置 (9) 3.3.5 系统时钟配置是HCLK,PCLK2为HCLK,PCLK1为HCLK 的一半 (9) 3.3.6 配置PLL在这里修改倍频值。RCC_CFGR_PLLMULL9 9 3.3.7失能PLL;判断PLL是否Readay;选择PLL为系统时 钟,一直等到时钟稳定 (9) 四、时钟源的选择 (10) 4.1系统默认配置时钟8*9=72M (10) 4.2配置HSI(高速内部时钟)为系统主时钟(永远不变8M)10 4.3配置HSE为系统主时钟。 8M(和外部晶振有关) (11) 4.4配置PLLCLK为系统主时钟 (11) 4.5程序 (11) 五、配置HCLK,PCLK1,PCLK2 (11)

一、时钟基本概念 LSE时钟RCC_BDCR(备 份与寄存器控 制)32.768kHz的 低速外部晶体 或陶瓷谐振器 外部时钟源 (LSE旁路) 必须提高一个 32.768kHz频 率的外部时钟 源,设置 (RCC_(RCC_BD CR)里的LSEB 和LSEON位来 选择这个模式 ) LSI 低功耗时钟源 的角色,它可 以在停机和待 机模式下保持 运行.为独立 看门狗和自动 唤醒单元提供 时钟 LSI RC可以通 过控制/状态 寄存器 (RCC_CSR)里 的LSION位来 启动或关闭。 LSI校准 HSE时钟高速外部时钟 信号(HSE)由 以下两种时钟 源产生: HSE 外部晶体/陶 瓷谐振器 HSE用户 外部时钟 . 外部时钟源 (HSE旁路) 在 这个模式里, 必须提供外部 时钟。它的频 率最高可达 25MHz。用户可 通过设置在时 钟控制寄存器 中的HSEBYP 和HSEON位来 选择这一模 式。 外部晶体/陶 瓷谐振器(HSE 晶体); 4~16Mz外部振 荡器可为系统 提供更为精确 的主时钟 在时钟控制寄 存器RCC_CR 中的HSERDY 位用来指示高 速外部振荡器 是否稳定。在 启动时,直到 这一位被硬件 置’1’,时钟 才被释放出 来。如果在时 钟中断寄存器 RCC_CIR中允 许产生中断, 将会产生相应 中断。 系统时钟(SYSCLK)选择系统复位后, HSI振荡器被 选为系统时 只有当目标时 钟源准备就绪 了(经过启动

STM32时钟树

RM0008 Low-, medium- and high-density reset and clock control (RCC) 1.When the HSI is used as a PLL clock input, the maximum system clock frequency that can be achieved is 64 MHz.2.For full details about the internal and external clock source characteristics, please refer to the “Electrical characteristics” section in your device datasheet. Several prescalers allow the configuration of the AHB frequency, the high speed APB (APB2) and the low speed APB (APB1) domains. The maximum frequency of the AHB and the APB2 domains is 72 MHz. The maximum allowed frequency of the APB1 domain is 36MHz. The SDIO AHB interface is clocked with a fixed frequency equal to HCLK/2.The RCC feeds the Cortex System Timer (SysTick) external clock with the AHB clock (HCLK) divided by 8. The SysTick can work either with this clock or with the Cortex clock (HCLK), configurable in the SysTick Control and Status Register. The ADCs are clocked by the clock of the High Speed domain (APB2) divided by 2, 4, 6 or 8. The timer clock frequencies are automatically fixed by hardware. There are two cases:

专题三stm32时钟树及相关库函数

专题三STM32时钟及相关库函数 一、STM32 MCU 时钟树 STM32 MCU系统时钟树由系统时钟源、系统时钟SYSCLK和设备时钟等部分组成。 图1 STM32芯片时钟树 从图1可看到,芯片时钟源有4个: 1.高速外部时钟HSE(4-16MHz); 2.高速内部时钟HSI(8MHz); 3.低速外部时钟LSE(32.768kHz);

4.低速内部时钟LSI(40kHz)。 从图1还可看到,芯片内部系统时钟SYSCLK的来源有3个。 1.高速外部时钟HSE(4-16MHz); 2.高速内部时钟HSI(8MHz); 3.HSE或HSI通过锁相环2-16倍频后的锁相环时钟PLLCLK。 上述的系统时钟SYSCLK经AHB预分频器后得到AHB总线时钟HCLK,继而得到APB1和APB2总线时钟。要注意的是:APB1挂接的外设有:DAC、UART2-5,TIM2-7、USB、I2C1-2等;APB2挂接的外设有:ADC1-3,GPIOA-G,TIM1,TIM8等。每次要使用STM32的相关外设,都要先使能对应的时钟。 二、STM32的启动 2.1 STM32的启动模式 STM32处理器支持3种系统启动模式,且对应的存储介质均是芯片内置的。在每个STM32的芯片上都有两个引脚BOOT0和BOOT1,这两个引脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序。 表1. STM32xx系列处理器的启动模式 第1种启动方式是最常用的用户FLASH启动,正常工作就在这种模式下,STM32的FLASH可以擦除10万次。 第2种方式是系统存储器启动方式,即我们常说的串口下载方式(ISP)。STM32中自带的BootLoader就是在这种启动方式中,如果出现程序硬件错误的话,可以切换到该模式下重新烧写Flash即可恢复正常。

STM32时钟树

STM32的时钟树 对于广大初次接触STM32的读者朋友(甚至是初次接触ARM器件的读者朋友)来说,在熟悉了开发环境的使用之后,往往“栽倒”在同一个问题上。这问题有个关键字叫:时钟树。 众所周知,微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动——往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟“能量”扩散流动的路径,犹如大树的养分通过主干流向各个分支,因此常称之为“时钟树”。在一些传统的低端8位单片机诸如51,AVR,PIC等单片机,其也具备自身的一个时钟树系统,但其中的绝大部分是不受用户控制的,亦即在单片机上电后,时钟树就固定在某种不可更改的状态(假设单片机处于正常工作的状态)。比如51单片机使用典型的12MHz 晶振作为时钟源,则外设如IO口、定时器、串口等设备的驱动时钟速率便已经是固定的,用户无法将此时钟速率更改,除非更换晶振。 而STM32微控制器的时钟树则是可配置的,其时钟输入源与最终达到外设处的时钟速率不再有固定的关系,本文将来详细解析STM32微控制器的时钟树。图1是STM32微控制器的时钟树,表1是图中各个标号所表示的部件。 表1 图1标号释义

图1 STM32的时钟树 在认识这颗时钟树之前,首先要明确“主干”和最终的“分支”。假设使用外部8MHz 晶振作为STM32的时钟输入源(这也是最常见的一种做法),则这个8MHz便是“主干”,而“分支”很显然是最终的外部设备比如通用输入输出设备(GPIO)。这样可以轻易找出第一条时钟的“脉络”: ○3——○5——○7——○21——○8——○9——○11——○13 对此条时钟路径做如下解析:

STM32时钟系统

STM32时钟系统 时钟系统框图: RCC相关配置寄存器(stm32f10x.h) typedefstruct { __IO uint32_t CR; //HSI,HSE,CSS,PLL等的使能和就绪标志位 __IO uint32_t CFGR; //PLL等的时钟源选择,分频系数设定 __IO uint32_t CIR; //清除/使能 时钟就绪中断 __IO uint32_t APB2RSTR; //A PB2线上外设复位寄存器 __IO uint32_t APB1RSTR; //A PB1线上外设复位寄存器 __IO uint32_t AHBENR; //DM A,SDIO等时钟使能 __IO uint32_t APB2ENR; //A PB2线上外设时钟使能 __IO uint32_t APB1ENR; //A PB1线上外设时钟使能 __IO uint32_t BDCR; //备份域控制寄存器 __IO uint32_t CSR; //控制状态寄存器 } RCC_TypeDef; 固件库stm32f10x_rcc.h中提供的时钟配置函数:

库函数中自定义的系统时钟初始化函数: 系统时钟初始化函数:(在system_stm32f10x.h中定义的,主要是配置RCC-CR和RCC-CFGR两个寄存器) SystemInit(); 使用V3.5版本的库函数,该函数在系统启动之后会自动调用: startup_stm32f10x_xx.s文件中: ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP 初始化之前首先通过宏定义定义系统时钟频率: #define SYSCLK_FREQ_72MHz 72000000 初始化之后的状态: SYSCLK 72MHz AHB 72MHz PCLK1 36MHz PCLK2 72MHz PLL 72MHz 初始化之后可以通过变量SystemCoreClock获取系统变量。如果SYSCLK=72MHz,那么变量SystemCoreClock=72000000。 三、Systick定时器 Systick定时器,是一个简单的定时器,Systick定时器常用来做延时,或者实时系统的心跳时钟。Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。Systick中断的优先级也可以设置。

相关主题