您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 本科-第3章-STM32最小系统
3/30/20201.电源2.复位3.时钟4.下载电路5.启动配置电路STM32最小系统典型的最小系统由微控制器芯片、供电电路、时钟电路、复位电路、启动配置电路和程序下载电路构成最小系统设计1.电源:STM32F103系列微控制器的工作电压在+2.0V~+3.6V之间。由于常用电源为5V,必须采用转换电路把5V电压转换为2~3.6之间。电源转换芯片REG1117-3.3是一款正电压输出的低压降三端线性稳压电路,输入5V电压,输出固定的3.3V电压2.时钟:时钟通常由晶体振荡器(简称晶振)产生,图2-9中时钟部分提供了两个时钟源,Y1是32.768kHz晶振,为RTC提供时钟。Y2是8MHz晶振,为整个系统提供时钟。3.复位:采用按键和保护电阻电容构成复位电路,按下按键将触发系统复位,具体电路如图2-9中复位部分所示。4.启动模式:启动模式由BOOT0和BOOT1选择,为了便于设置,BOOT0接电平,并且和BOOT1通过2X2插针相连,通过跳线可以配置三种不同启动模式。5.下载:JTAG是一种国际标准测试协议,主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。采用4线的JTAG下载方式,有效节省IO口。在STM32中有5个时钟源,分别为HSI、HSE、LSE、LSI、PLL1.HSI:高速内部时钟信号8MHz通过8MHz的内部RC振荡器产生,并且可被直接用做系统时钟,或者经过2分频后作为PLL的输入。2.HSE:高速外部时钟信号4-25MHz可以通过外部直接提供时钟,从OSC_IN输入,或使用外部陶瓷/晶体谐振器。HSI比HSE有更快的启动时间,但频率精确度没有外部晶体振荡器高。3.LSE:低速外部时钟信号32.768KHZ振荡器是一个32.768KHz的低速外部晶体/陶瓷振荡器,它为RTC或其它功能提供低功耗且精确的时钟源。4.LSI:低速内部时钟信号30-60KHzLSIRC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。5.PLL:锁相环倍频输出用来倍频HIS或者HSE,时钟输入源可选择为HSI/2、HSE或者HSE/2,倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。3.2时钟控制一般而言,嵌入式系统在工作前,都要进行初始化工作,其中包括调用RCC_Configuration(复位和时钟设置)函数。用于系统复位和初始化STM32系列微控制器的时钟。3.2STM32单片机时钟配置3.2.1STM32时钟系统3.2.2RCC_Configuration(复位和时钟设置)函数STM32系列微控制器中,有5个时钟源:HSI(HighSpeedInternal):高速内部时钟、HSE(HighSpeedExternal):高速外部时钟、LSI(LowSpeedInternal):低速内部时钟、LSE(LowSpeedExternal):低速外部时钟、PLL(PhaseLockedLoop):锁相环倍频输出。其中的HSI、HSE、或PLL可被用来驱动系统时钟。其中的LSI、LSE作为二级时钟源。STM32时钟系统结构图(P66)3.2.1STM32时钟系统外设总线:包括APB1(AdvancedPeripheralBus1)和APB2(AdvancedPeripheralBus2)APB2:用于高速外设APB1:用于低速外设•AMBA片上总线:已成为一种流行的工业片上总线标准。它包括AHB(AdvancedHighperformanceBus)和APB(AdvancedPeripheralBus),前者作为系统总线,后者作为外设总线。STM32系统结构图连接在APB1(低速外设)上的设备:有连接在APB2(高速外设)上的设备:有连接在AHB(AdvancedHighperformanceBus)上的设备:有1、使能挂接在APB1总线上的外设对应的时钟命令:RCC_APB1PeriphClockCmd()函数例如,使能TIM2对应的时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd()函数2、使能挂接在APB2总线上的外设对应的时钟命令:例如,使能GPIO端口对应的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);3、使能挂接在AHB总线上的外设对应的时钟命令:RCC_AHBPeriphClockCmd()函数例如,使能DMA对应的时钟:RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA,ENABLE);使用操作符“|”可以一次选中上表中的一个或多个取值的组合作为该参数的值。STM32F103xx增强型模块框图基于ARMCortex内核的MCU和普通的8/16位单片机在系统结构上最大区别:普通的8/16位单片机:只有1个系统时钟频率,而基于ARMCortex内核的MCU:具有多个时钟频率,分别供给内核和不同外设模块使用。本课程的学习难点之一:就是ARM时钟比单片机时钟复杂得多。为什么ARM时钟这么复杂?原因二:时钟分开有助于实现低功耗。原因一:高速时钟供中央处理器等高速设备使用,低速时钟供外设等低速设备使用。时钟输出使能∵STM32处理器因为低功耗的需要,各模块需要分别独立开启时钟。∴当需要使用某个外设模块时,记得一定要先使能对应的时钟。否则,这个外设不能工作。3.2.2RCC_Configuration()函数1、RCC复位和时钟配置寄存器组2、枚举类型ErrorStatus3、RCC_Configuration():(复位和时钟设置)函数(ResetandClockConfiguration(),复位和时钟设置函数)1、RCC复位和时钟配置寄存器组2、枚举类型ErrorStatusSTM32单片机的复位和时钟设置:共包括10个设置寄存器①一个32位的时钟控制寄存器(RCC_CR)②一个32位的时钟配置寄存器(RCC_CFGR)③一个32位的时钟中断寄存器(RCC_CIR)④一个32位的APB2外设复位寄存器(RCC_APB2RSTR)⑤一个32位的APB1外设复位寄存器(RCC_APB1RSTR)⑥一个32位的AHB外设时钟使能寄存器(RCC_AHBENR)⑦一个32位的APB2外设时钟使能寄存器(RCC_APB2ENR)⑧一个32位的APB1外设时钟使能寄存器(RCC_APB1ENR)⑨一个32位的备份域控制寄存器(RCC_BDCR)⑩一个32位的控制/状态寄存器(RCC_CSR)Backupdomaincontrolregister(RCC_BDCR)详见参考手册V10_1第P60编程时,时钟的具体配置是从RCC(ResetandClockConfiguration,复位和时钟配置)寄存器组开始。在固件库中,用结构体RCC_TypeDef定义RCC寄存器组:在文件“stm32f10x_map.h”中,定义如下:/*------------------------Real-TimeClock-----------------------------------*/typedefstruct{vu32CR;vu32CFGR;vu32CIR;vu32APB2RSTR;vu32APB1RSTR;vu32AHBENR;vu32APB2ENR;vu32APB1ENR;vu32BDCR;vu32CSR;}RCC_TypeDef;1、RCC复位和时钟配置寄存器组/*Peripheralbaseaddressinthebit-bandregion*/#definePERIPH_BASE((u32)0x40000000)/*Peripheralmemorymap*/#defineAPB1PERIPH_BASEPERIPH_BASE#defineAPB2PERIPH_BASE(PERIPH_BASE+0x10000)#defineAHBPERIPH_BASE(PERIPH_BASE+0x20000)#defineRCC_BASE(AHBPERIPH_BASE+0x1000)#ifdef_RCC#defineRCC((RCC_TypeDef*)RCC_BASE)#endif/*_RCC*/该宏定义的功能:在程序中,所有写RCC的地方,编译器的预处理程序,都将它替换为:((RCC_TypeDef*)0x40021000)2、枚举类型ErrorStatus在文件“stm32f10x_type.h”中,包含typedefenum{ERROR=0,SUCCESS=!ERROR}ErrorStatus;该语句,定义了新枚举类型名ErrorStatus,代表左侧定义的枚举类型。3、RCC_Configuration(复位和时钟设置)函数:在“HelloRobot.h”中ErrorStatusHSEStartUpStatus;voidRCC_Configuration(void){/*将外设RCC寄存器组重新设置为默认值,即复位。RCCsystemreset*/RCC_DeInit();/*打开外部高速时钟晶振HSE,EnableHSE*/RCC_HSEConfig(RCC_HSE_ON);/*等待HSE外部高速时钟晶振稳定,或者在超时的情况下退出,WaittillHSEisready*/HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus==SUCCESS)//SUCCESS:HSE晶振稳定就绪{/*设置AHB时钟=SYSCLK=48MHz,HCLK(即AHB时钟)=SYSCLK*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置高速PCLK2时钟(即APB2clock)==AHB时钟/2=24MHz,PCLK2=HCLK/2*/RCC_PCLK2Config(RCC_HCLK_Div2);/*设置低速PCLK1时钟(即APB1clock)=AHB时钟/4=12MHz,PCLK1=HCLK/4*/RCC_PCLK1Config(RCC_HCLK_Div4);//RCC_HCLK_Div4:APB1clock=HCLK/4=12MHz,此处不同于鸥鹏公司的程序(=36MHz)/*设置Flash延时时钟周期数:为2*/FLASH_SetLatency(FLASH_Latency_2);/*EnableFlashPrefetchBuffer预取指令指令缓冲区,这2句与RCC没有关系*/FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*利用锁相环将HSE外部8MHz晶振6倍频到48MHz。PLLCLK=8MHz*6=48MHz*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6);//此处不同于鸥鹏公司的程序:PLLCLK=8MHz*6=48MHz/*EnablePLL*/RCC_PLLCmd(ENABLE);/*WaittillPLLisready,等待锁相环输出稳定*/while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){}/*SelectPLLassystemclocksource*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择PLLCLK作为SYSCLK,所以SYSCLK为48MHz/*WaittillPLLisusedassystemclocksource*/while(RCC_GetSYSCLKSource()!=0x08){}}/*Enableperipheralclocks-------------------
本文标题:本科-第3章-STM32最小系统
链接地址:https://www.777doc.com/doc-4641495 .html