资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第4章,指令集和时钟,名目,4.1 Thumb-2指令集介绍,4.2 指令格式,4.3 Cortex-M3时钟掌握,名目,4.1 Thumb-2指令集介绍,4.2 指令格式,4.3 Cortex-M3时钟掌握,4.1 Thumb-2指令集介绍,Cortex-M3处理器支持Thumb-2指令集,与承受传统的Thumb指令集的ARM7相比,避开了ARM状态与Thumb状态来回切换所带来的额外开销,全部工作都可以在单一的Thumb状态下进展处理,包括中断特别处理。,Cortex-M3处理器支持的Thumb-2指令集基于精简指令集计算机RISC原理设计,是16位Thumb指令集的一个超集,同时支持16位和32位指令,指令集和相关译码机制较为简洁,在肯定程度上降低了软件开发难度。,ARM与Thumb指令集的关系:,Thumb指令集是ARM指令集的压缩子集,Thumb指令集,16位,ARM指令集,32位,Thumb与Thumb-2和Cortex-M3指令集的关系,Cortex-M3指令集,16位和32位,Thumb指令集,16位,Thumb-2指令集,16位和32位,名目,4.1 Thumb-2指令集介绍,4.2 指令格式,4.3 Cortex-M3时钟掌握,4.2 指令格式,具体的ARM、Thumb和Cortex-M3指令见word文档指令集,大多数工程应用使用C语言进展开发,很少使用汇编语言,只要或许了解汇编指令即可。,汇编语言用于阅读和编写启动代码,操作系统移植、C与汇编混合编程等场合。,ARM数值处理指令的格式:,S ,其中号内的项是必需的,号内的项是可选的。各项的说明如下:,opcode:操作码,指令助记符,如LDR、MOV等;,cond:执行条件,如EQ,HI等,共4位,对应15种条件1111系统保存;,S:是否影响CPSR存放器的值;但当目的存放器为PC时,S后缀表示将SPSR的内容恢复到CPSR中,此种用法多用于特别处理返回。,Rd:目标存放器;,Rn:第1个操作数的存放器;,operand2:第2个操作数;,举例:ADDS R0,R1,R2,LSL#3;R0=R1+R2*8,影响条件标志位,STM32启动代码阅读例如“startup_stm32f10 x_hd.s”,名目,4.1 Thumb-2指令集介绍,4.2 指令格式,4.3 Cortex-M3时钟掌握,4.3 Cortex-M3时钟掌握,1.STM32时钟系统概述,1系统时钟源,有3种来源:,HSI内部高速RC时钟 8MHz,HSE外接高速时钟 416MHz,典型值8MHz,PLL锁相环时钟 最大72MHz,假设未进展时钟设置,系统时钟默认使用HSI 8MHz时钟。,还有以下2种二级时钟源:,40kHz低速内部RC LSI,可以用于驱动独立看门狗和通过程序选择驱动RTC。RTC用于从停机/待机模式下自动唤醒系统。,32.768kHz低速外部晶体LSE,也可用来通过程序选择驱动RTC(RTCCLK)。,当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。,STM32时钟树,参考,STM32中文参考手册,V10P56,2总线时钟,HCLK高速时钟,AHB时钟最大72MHz,FCLK自由时钟,Cortex自由运行时钟最大72MHz,PCLK1APB1时钟,低速APB时钟最大36MHz,PCLK2 APB2时钟,高速APB时钟最大72MHz,3各外设使用的时钟,系统时钟定时器STK:可设置为HCLK或HCLK的8分频,ADC:PCLK2APB2时钟经2/4/6/8分频,定时器:可设置为与所在APB总线时钟全都或是2倍,RTC:可使用LSE32.768kHz外部低速时钟、HSE/128或LSI,IIS:系统时钟SYSCLK,独立看门狗:LSI40KHz低速内部时钟时钟,USB:PLLCLK的1/1.5分频得到的48MHz时钟,4系统时钟(SYSCLK)选择,系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停顿。只有当目标时钟源预备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。在时钟掌握存放器(RCC_CR)里的状态位指示哪个时钟已经预备好了,哪个时钟目前被用作系统时钟。,当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。,5时钟输出,微掌握器允许输出时钟信号到外部MCO引脚。相应的GPIO端口存放器必需被配置为相应功能。以下四个时钟信号可被选作MCO时钟:,SYSCLK,HSI,HSE,PLLCLK,时钟掌握存放器RCC_CR,时钟配置存放器RCC_CFGR,APB2外设复位存放器RCC_APB2RSTR,APB1外设复位存放器RCC_APB1RSTR,AHB外设时钟使能存放器RCC_AHBENR,APB2外设时钟使能存放器RCC_APB2ENR,APB1外设时钟使能存放器RCC_APB1ENR,另外3个存放器时钟中断存放器RCC_CIR、备份域掌握存放器 RCC_BDCR、掌握/状态存放器 RCC_CSR不常用,详见STM32中文参考手册V10第6章复位和时钟掌握,2.时钟系统相关存放器,3.时钟系统编程例如,复位后系统时钟默认使用8MHz HSI,假设要设置使用HSE经PLL倍频输出72MHz,则时钟系统设置的一般步骤如下:,1复位时钟,2翻开外部高速时钟HSERCC_CR,3等待外部高速时钟HSE就绪RCC_CR,4设置PLL倍频系数和总线预分频系数RCC_CFGR,5选择PLL源 RCC_CFGR,6使能PLLRCC_CR,7等待PLL锁定RCC_CR,8选择PLL输出为系统时钟RCC_CFGR,9等待PLL输出为系统时钟成功RCC_CR,10翻开各外设时钟RCC_AHBENR、RCC_APB2ENR、RCC_APB1ENR,本STM32开发平台使用8MHz外部时钟,经PLL倍频9倍后系统时钟SysCLK=72MHz,FCLK=HCLK=72MHz,PCLK1=36MHz,PCLK2=72MHz。,RCC-APB1RSTR=0 x00000000;/复位完毕,RCC-APB2RSTR=0 x00000000;,RCC-AHBENR=0 x00000014;/睡眠模式闪存和SRAM时钟使能.其他关闭.,RCC-APB2ENR=0 x00000000;/外设时钟关闭.,RCC-APB1ENR=0 x00000000;,RCC-CR|=0 x00000001;/使能内部高速时钟HSION,RCC-CFGR,/复位SW1:0,HPRE3:0,PPRE12:0,PPRE22:0,ADCPRE1:0,MCO2:0,RCC-CR /复位HSEON,CSSON,PLLON,RCC-CR /复位HSEBYP,RCC-CFGR,/复位PLLSRC,PLLXTPRE,PLLMUL3:0 and USBPRE,RCC-CIR=0 x00000000;/关闭全部中断,/以上代码确保RCC复位,可省略,RCC-CR|=0 x00010000;/外部高速时钟使能HSEON,while(!(RCC-CR17);/等待外部时钟就绪,RCC-CFGR=0X00000400;/APB1=DIV2;APB2=DIV1;AHB=DIV1;,RCC-CFGR|=7CFGR|=1ACR|=0 x32;/FLASH 2个延时周期,RCC-CR|=0 x01000000;/PLLON,while(!(RCC-CR25);/等待PLL锁定,RCC-CFGR|=0 x00000002;/PLL作为系统时钟,while(temp!=0 x02)/等待PLL作为系统时钟设置成功,temp=RCC-CFGR2;,temp,RCC-APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(1APB2ENR|=(18);/使能PORTG时钟,阅读提示:,#define _IO volatile,typedef unsigned int uint32_t;,typedef struct,_IO uint32_t CR;,_IO uint32_t CFGR;,_IO uint32_t CIR;,_IO uint32_t APB2RSTR;,_IO uint32_t APB1RSTR;,_IO uint32_t AHBENR;,_IO uint32_t APB2ENR;,_IO uint32_t APB1ENR;,_IO uint32_t BDCR;,_IO uint32_t CSR;,uint32_t RESERVED0;,_IO uint32_t CFGR2;,RCC_TypeDef;,#define RCC (RCC_TypeDef*)RCC_BASE),#define RCC_BASE (AHBPERIPH_BASE+0 x9000),#define AHBPERIPH_BASE (PERIPH_BASE+0 x18000),#define PERIPH_BASE (uint32_t)0 x40000000),
展开阅读全文