STM32启动代码分析、简化、实战

上传人:小** 文档编号:60961251 上传时间:2022-03-09 格式:DOC 页数:32 大小:1,008KB
收藏 版权申诉 举报 下载
STM32启动代码分析、简化、实战_第1页
第1页 / 共32页
STM32启动代码分析、简化、实战_第2页
第2页 / 共32页
STM32启动代码分析、简化、实战_第3页
第3页 / 共32页
资源描述:

《STM32启动代码分析、简化、实战》由会员分享,可在线阅读,更多相关《STM32启动代码分析、简化、实战(32页珍藏版)》请在装配图网上搜索。

1、本文通过对STM32的官方固件库STM32F10x_StdPeriph_Lib_V3.5.0里的MDK启动文件分析,简化部分不需要的代码, 并从繁杂的固件库里,精炼出一个类似于“hello world 的入门实战小程序一一点亮一个LED。该工程仅仅包 含一个启动文件和一个有main函数的C文件。本文初衷:不用固件库建立自己的工程! 实验软件:Keil uVisio n4实验硬件:神舟IV号开发板芯片型号:STM32F107VCSTM32启动代码分析、简化、实战汇编基础:1. 伪指令:EQU语法格式:名称EQU 表达式,类型EQU伪指令用于为程序中的常量、 标号等定义一个等效的字符名称,类似于C

2、语言的#define。其中EQU可以用“ *”代替。名称为EQU伪指令定义的字符名称,当表达式为32位的常量时,可以指定表达式的数据类型,可以有一下三种类型:C0DE16、CODE32 和 DATA2. 伪指令:AREA语法格式:AREA 段名,属性1,属性2AREA命令指示汇编程序汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代码或数据块,它们由链接程序处理。段名:可以为段选择任何段名。 但是,以一个数字开始的名称必须包含在竖杠号内,否则会产生一个缺失段名错误。例如,|1_DataArea|。有些名称是习惯性的名称。例如:|.text|用于表示由C编译程序产生的代码段,或用于以某种

3、方式与C库关联的代码段。属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下:CODE属性:用于定义代码段,默认为READONLY 。DATA属性:用于定义数据段,默认为 READWRITE 。READONLY属性:指定本段为只读,代码段默认为 READONLY。READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE 。ALIGN属性:使用方式为 ALIGN表达式。在默认时,ELF (可执行连接文件)的代码 段和数据段是按字对齐的,表达式的取值范围为031,相应的对齐方式为 2表达式次方。NOINIT属性:表示数据段是未初始化的或初始化为零。

4、其只包含零初始化的空间保留命令SPACE或DCB、DCD、DCDU、DCQ、DCQU、DCW或DCWU。可以决定在链接时 AREA是未初始化的还是零初始化的。一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。3. 伪指令:SPACE用于分配一片连续的存储单元启动代码分析:定义栈段,不初始化栈名:STACK大小:Stack_Size只分配空间不做初始化或者初始化为0: NOINIT可读可写:READWRITE :按8字节对齐:ALIGN = 3栈顶地址:_in itial_spStack_SizeEQU0x00000400AREASTACK, NOINIT ,

5、READWRITE , ALIGN=3Stack_MemSPACEStack_Sizein itial_sp定义堆段,不初始化堆名:HEAP大小:Heap_Size只分配空间不做初始化或者初始化为0: NOINIT可读可写:READWRITE :按8字节对齐堆起始地址:堆终止地址::ALIGN = 3 _heap_base _heap_limitHeap_SizeEQU0x00000200AREAHEAP, NOINIT, READWRITE, ALIGN=3_heap_baseHeap_MemSPACEHeap_Size_heap_limit4.伪指令:EXPORT语法格式:EXPORT 标

6、号 WEAK EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。EXPORT可用GLOBAL代替。标号在程序中区分大小写,WEAK选项声明其他的同名标号优先于该标号被引用。5.伪指令:DCD语法格式:DCD (或DCDU )表达式DCD (或DCDU )伪指令用于分配一片连续的字存储单兀并用伪指令中指定的表达式初始 化。其中,表达式可以为程序标号或数字表达式。DCD也可用“ &”代替。用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并不严格字对齐。PRESERVE8;指示编译器8字节对齐(keil编译器时需要加上)THUMB;指示编译器为THUMB指

7、令定义复位段(中断向量表),并初始化段名:RESET大小:_Vectors_Size数据段:DATA只读:READONLY按字节对齐:默认 ALIGN向量表起始地址:_Vectors 向量表终止地址:_Vectors_E ndAREA RESET, DA TA, READONLYEXPORT _V ectorsEXPORT _V ectors_EndVectorsDCD_in itial_sp;Top of StackDCDReset_Ha ndler;Reset Han dlerDCDNMI_Ha ndler;NMI Ha ndlerDCDHardFault_Ha ndler;Hard Fa

8、ult HandlerDCDMemMa nage_Ha ndler;MPU Fault Han dlerEXPORT _V ectors_SizeDCDBusFault_Ha ndler;DCDUsageFault_Ha ndler;DCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0DCDDCDDCDBus Fault Ha ndler;ReservedSVC_Ha ndler; SVCall Han dlerDebugMon_Ha ndler; Debug Mon itor Han dler0; Reserved;Pe ndSV Han dlerUsage

9、 Fault Han dlerDCDSysTick_Ha ndler;SysTick FHan dlerIn terruptsDCDWWDGRQHa ndler; Win dow WatchdogDCDPVD_IRQHa ndler;PVD through EXTI Line dDCDTAMPER_IRQHa ndler; TamperDCDRTC_IRQHa ndler;RTCDCDFLASHRQHa ndler;FlashDCDRCC_IRQHa ndler;RCCDCDEXTI0_IRQHa ndler;EXTI Line 0DCDEXTI1_IRQHa ndler;EXTI Line

10、1DCDEXTI2RQHa ndler;EXTI Line 2DCDEXTI3_IRQHa ndler;EXTI Line 3DCDEXTI4_IRQHa ndler;EXTI Line 4DCDDMA1_Cha nn el1_IRQHa ndler;DMA1Cha nnel 1DCDDMA1_Cha nn el2_IRQHa ndler;DMA1Cha nnel 2DCDDMA1_Cha nn el3_IRQHa ndler;DMA1Cha nnel 3DCDDMA1_Cha nn el4_IRQHa ndler;DMA1Cha nnel 4DCDDMA1_Cha nn el5_IRQHa

11、ndler;DMA1Cha nnel 5DCDDMA1_Cha nn el6_IRQHa ndler;DMA1Cha nnel 6DCDDMA1_Cha nn el7_IRQHa ndler;DMA1Cha nnel 7DCDADC1_2RQHa ndler;ADC1and ADC2DCDCAN1_TX_IRQHa ndler;CAN1TXDCDCAN1_RX0_IRQHa ndler;CAN1RX0DCDCAN1_RX1_IRQHa ndler;CAN1RX1DCDCAN1_SCE_IRQHa ndler;CAN1SCEDCDEXTI9_5_IRQHa ndler;EXTI Line 9.5

12、DCDTIM1_BRK_IRQHa ndler;TIM1 BreakDCDTIM1_UP_IRQHa ndler;TIM1UpdateDCDTIM1_TRG_CO MRQHa ndler ; TIM1 Trigger and CommutationDCDTIM1_CC_IRQHa ndler;TIM1Capture ComparDCDTIM2_IRQHa ndler;TIM2DCDTIM3_IRQHa ndler;TIM3DCDTIM4_IRQHa ndler;TIM4DCDI2C1_EV_IRQHa ndler;I2C1 EventDCDPendSV Handler;Exter nalDCD

13、l2C1_ER_IRQHa ndler;I2C1 ErrorDCDl2C2_EV_IRQHa ndler;I2C2 EventDCDI2C2_ER_IRQHa ndler;I2C1 ErrorDCDSPI1RQHa ndler;SPI1DCDSPI2_IRQHa ndler;SPI2DCDUSART1_IRQHa ndler;USART1DCDUSART2_IRQHa ndler;USART2DCDUSART3_IRQHa ndler;USART3DCDEXTI15_10_IRQHa ndler;EXTI Line 15.10DCDRTCAlarmRQHa ndler;RTC alarm th

14、rough EXTI li neDCDOTG_FS_WKUP_IRQHa ndler;USB OTG FSDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCDTIM5_IRQHa ndler;TIM5DCDSPI3_IRQHa ndler; SPI3DCDUART4_IRQHa ndler;UART4DCDUART5_IRQHa ndler;UART5DCDTIM6_IRQHa ndler;TIM6DCDTIM7_IRQHa ndler;TIM7DCDDMA2

15、_Cha nn el1_IRQHa ndler;DMA2 Cha nn ellDCDDMA2_Cha nn el2_IRQHa ndler;DMA2 Cha nn el2DCDDMA2_Cha nn el3_IRQHa ndler;DMA2 Cha nn el3DCDDMA2_Cha nn el4_IRQHa ndler;DMA2 Cha nn el4DCDDMA2_Cha nn el5_IRQHa ndler;DMA2 Cha nn el5DCDETHRQHa ndler;Ether netDCDETH_WKUP_IRQHa ndler;Ethernet Wakeup through EXT

16、I lineDCDCAN2_TX_IRQHa ndler;CAN2 TXDCDCAN2_RX0_IRQHa ndler;CAN2 RX0DCDCAN2_RX1_IRQHa ndler;CAN2 RX1DCDCAN2_SCE_IRQHa ndler;CAN2 SCEDCDOTG_FS_IRQHa ndler;USB OTG FSVectors._EndVectors._SizeEQU_Vectors_E nd - _Vectors6.过程定义伪指令:PROC、ENDP 语法格式: 过程名 PROC 类型RET过程名 ENDP过程就是子程序。 一个过程可以被其它程序所调用(用CALL指令),过程的

17、最后一条指令一般是返回指令(RET)。7. 伪指令:IMPORT语法格式:IMPORT标号 WEAK IMPORT伪指令用于通知编译器要使用的标号在其他源文件中定义,但是在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的标号表中。标号在程序中区分大小写,WEAK选项表示当所有的源文件都没有定义这样的一个标号时, 编译器也不给出错误信息,在多数情况下将该标号置为0,若该标号为B或BL指令引用,则将B或BL指令置为NOP操作。8. 伪指令:LDR语法格式:LDR 执行条件,如 EQ、NE 等register,=expr/label_expr大范围的地址读取伪指令L

18、DR用于加载32位的立即数或一个地址值到指定寄存器,在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替LDR伪指令,否则汇编器将常量放入字池, 并使用一条程序相对偏移的LDR指令从文字池读出常量。9. Thumb跳转指令:B、BL、BX语法格式:B执行条件,如EQ、NE 等label带链接BL执行条件,如EQ、NE 等label带状态切换BX执行条件,如EQ、NE 等label定义代码段(异常处理函数),并初始化段名:.text代码段:CODE只读:READONLY按字节对齐:默认 ALIGN代码段起始地址:Res

19、et_Ha ndlerAREA|.text|, CODE, READONLYReset_Ha ndlerPROCEXPORTReset_Ha ndlerWEAKIMPORTSystemI nitIMPORT_mai nLDRR0, =Systeml nitBLXR0LDRR0, =_ma inBXR0ENDP10. 内置变量:PC或“.”当前指令地址11. 汇编语句格式规范:ARM汇编中,所有标号必须在一行的顶格书写 ,其后面不要添加“:”,而所有指令均不能 顶格书写。ARM汇编器对标识符大小写敏感,书写标号及指令时字母大小写要一致,在ARM汇编程序中,一个 ARM指令、伪指令、寄存器名可以全

20、部为大写字母,也可以全部为小写字母, 但不要大小写混合使用。注释使用“;”,注释内容由“;”开始到此行结束,注释可以在一行的顶格书写。源程序中允许有空行,适当地插入空行可以提高源程序代码的可读性。如果单行太长,可以使用字符“ ”将其分行,“ ”后不能有任何字符,包括空格和制表符等。 对于变量的设置,常量的定义,其标识符必须在一行的顶格书写。异常处理函数(续NMI_Ha ndlerPROCEXPORTNMI_Ha ndlerBENDPHardFault_Ha ndler PROCEXPORTHardFault_Ha ndlerB.ENDPMemMa nage_Ha ndlerPROCEXPORT

21、 MemMa nage_Ha ndlerB .ENDPBusFault_Ha ndlerPROCEXPORT BusFault_Ha ndlerB .ENDPUsageFault_Ha ndlerPROCEXPORT UsageFault_Ha ndlerB .ENDPSVC_Ha ndler PROCEXPORT SVC_Ha ndlerB .ENDPDebugMon_Ha ndlerPROCEXPORT DebugMon_Ha ndlerB .ENDPPen dSV_Ha ndler PROCEXPORT Pen dSV_Ha ndlerB .ENDPSysTick_Ha ndler PR

22、OCEXPORT SysTick_Ha ndlerB .1)WEAKWEAKWEAKWEAKWEAKWEAKWEAKWEAKWEAKENDP异常处理函数(续2)这个默认的异常处理函数处理所有外部中断Default_Ha ndler PROCEXPORTWWDG_IRQHa ndlerWEAKEXPORTPVD_IRQHa ndlerWEAKEXPORTTAMPER_IRQHa ndlerWEAKEXPORTRTC_IRQHa ndlerWEAKEXPORTFLASH_IRQHa ndlerWEAKEXPORTRCC_IRQHa ndlerWEAKEXPORTEXTI0_IRQHa ndlerW

23、EAKEXPORTEXTI1RQHa ndlerWEAKEXPORTEXTI2_IRQHa ndlerWEAKEXPORTEXTI3_IRQHa ndlerWEAKEXPORTEXTI4_IRQHa ndlerWEAKEXPORTDMA1_Cha nn el1_IRQHa ndlerWEAKEXPORTDMA1_Cha nn el2_IRQHa ndlerWEAKEXPORTDMA1_Cha nn el3_IRQHa ndlerWEAKEXPORTDMA1_Cha nn el4_IRQHa ndlerWEAKEXPORTDMA1_Cha nn el5_IRQHa ndlerWEAKEXPORT

24、DMA1_Cha nn el6_IRQHa ndlerWEAKEXPORTDMA1_Cha nn el7_IRQHa ndlerWEAKEXPORTADC1_2RQHa ndlerWEAKEXPORTCAN1_TX_IRQHa ndlerWEAKEXPORTCAN1_RX0_IRQHa ndlerWEAKEXPORTCAN1_RX1_IRQHa ndlerWEAKEXPORTCAN1_SCE_IRQHa ndlerWEAKEXPORTEXTI9_5_IRQHa ndlerWEAKEXPORTTIM1_BRK_IRQHa ndlerWEAKEXPORTTIM1_UP_IRQHa ndlerWEA

25、KEXPORTTIM1_TRG_CO MRQHa ndlerWEAKEXPORTTIM1_CC_IRQHa ndlerWEAKEXPORTTIM2_IRQHa ndlerWEAKEXPORTTIM3_IRQHa ndlerWEAKEXPORTTIM4_IRQHa ndlerWEAKEXPORTI2C1_EV_IRQHa ndlerWEAKEXPORTI2C1_ER_IRQHa ndlerWEAKEXPORTI2C2_EV_IRQHa ndlerWEAKEXPORTI2C2_ER_IRQHa ndlerWEAKEXPORTSPI1_IRQHa ndlerWEAKEXPORTSPI2_IRQHa

26、ndlerWEAKEXPORTUSART1_IRQHa ndlerWEAKEXPORTUSART2_IRQHa ndlerWEAKEXPORTUSART3_IRQHa ndlerWEAKEXPORTEXTI15_10_IRQHa ndlerWEAKEXPORTRTCAlarmRQHa ndlerWEAKEXPORTOTG_FS_WKUP_IRQHa ndlerWEAKEXPORTTIM5_IRQHa ndlerWEAKEXPORTSPI3_IRQHa ndlerWEAKEXPORTUART4_IRQHa ndlerWEAKEXPORTUART5_IRQHa ndlerWEAKEXPORTTIM

27、6_IRQHa ndlerWEAKEXPORTTIM7_IRQHa ndlerWEAKEXPORTDMA2_Cha nn el1_IRQHa ndlerWEAKEXPORTDMA2_Cha nn el2_IRQHa ndlerWEAKEXPORTDMA2_Cha nn el3_IRQHa ndlerWEAKEXPORTDMA2_Cha nn el4_IRQHa ndlerWEAKEXPORTDMA2_Cha nn el5_IRQHa ndlerWEAKEXPORTETHRQHa ndlerWEAKEXPORTETH_WKUP_IRQHa ndlerWEAKEXPORTCAN2_TX_IRQHa

28、 ndlerWEAKEXPORTCAN2_RX0_IRQHa ndlerWEAKEXPORTCAN2_RX1_IRQHa ndlerWEAKEXPORTCAN2_SCE_IRQHa ndlerWEAKEXPORTOTG_FS_IRQHa ndlerWEAK的地址;下面的全部异常处理函数标号都对应同一个地址,这个地址也是Default_Ha ndlerWWDGRQHa ndlerPVD_IRQHa ndlerTAMPER_IRQHa ndlerRTC_IRQHa ndlerFLASHRQHa ndlerRCC_IRQHa ndlerEXTIO_IRQHa ndlerEXTI1RQHa ndler

29、EXTI2RQHa ndlerEXTI3_IRQHa ndlerEXTI4_IRQHa ndlerDMA1_Cha nn el1_IRQHa ndlerDMA1_Cha nn el2_IRQHa ndlerDMA1_Cha nn el3_IRQHa ndlerDMA1_Cha nn el4_IRQHa ndlerDMA1_Cha nn el5_IRQHa ndlerDMA1_Cha nn el6_IRQHa ndlerDMA1_Cha nn el7_IRQHa ndlerADC1_2RQHa ndlerCAN1_TX_IRQHa ndlerCAN1_RX0_IRQHa ndlerCAN1_RX

30、1_IRQHa ndler CAN1_SCE_IRQHa ndler EXTI9_5_IRQHa ndler TIM1_BRK_IRQHa ndler TIM1_UP_IRQHa ndler TIM1_TRG_C0 MRQHa ndler TIM1_CC_IRQHa ndler TIM2_IRQHa ndler TIM3_IRQHa ndler TIM4_IRQHa ndler I2C1_EV_IRQHa ndler I2C1_ER_IRQHa ndler l2C2_EV_IRQHa ndler l2C2_ER_IRQHa ndlerSPI1RQHa ndler SPI2_IRQHa ndle

31、r USART1_IRQHa ndler USART2_IRQHa ndler USART3_IRQHa ndler EXTI15_10_IRQHa ndler RTCAlarmRQHa ndler OTG_FS_WKUP_IRQHa ndler TIM5_IRQHa ndlerSPI3_IRQHa ndlerUART4_IRQHa ndler UART5_IRQHa ndlerTIM6_IRQHa ndlerTIM7_IRQHa ndlerDMA2_Cha nn el1_IRQHa ndlerDMA2_Cha nn el2_IRQHa ndler DMA2_Cha nn el3_IRQHa

32、ndler DMA2_Cha nn el4_IRQHa ndler DMA2_Cha nn el5_IRQHa ndler ETH_IRQHa ndler ETH_WKUP_IRQHa ndler CAN2_TX_IRQHa ndler CAN2_RX0_IRQHa ndler CAN2_RX1_IRQHa ndler CAN2_SCE_IRQHa ndler OTG_FS_IRQHa ndlerENDP初始化堆栈段由于前面只是定义了堆栈段并没有初始化,这里对堆栈段进行初始化。就像定义了:int a;初始化a = 1;也可以像代码段一样定义的同时就初始化:int b = 2;下面代码中有个_M

33、ICROLIB,对应后面 MDK截图的Use MicroLIB,如果选了勾选了UseMicroLIB,IF就为真,否则为假。ALIGNIF:DEF:_MICROLIBEXPORT _in itial_spEXPORT _heap_baseEXPORT _heap_limitELSEIMPORT _use_two_regio n_ memoryEXPORT _user_i nitial_stackheap_user_ in itial_stackheapLDRRO,=Heap_MemLDRR1,= (Stack_Mem+Stack_Size)LDRR2,= (Heap_Mem+Heap_Size

34、)LDR R3, = Stack_MemBX LRALIGNENDIFEND+ + + + + + + + + +启动代码分析到此结束+ + + + + + + + + + + + + +简化后的启动代码1去掉外部中断,去掉 _MICROLIB判断,如果需要可以手动添加2. 去掉SystemInit,系统初始化可以在 main函数里进行3. 去掉WEAK,如果用户自己想定义内部中断服务程序可以加上WEAK淀义栈Stack SizeEQU0x00000400AREAStack MemSPACESTACK, NOINIT, READWRITE, ALIGN=3Stack Size_in itial

35、_sp;定义堆Heap_SizeEQU0x00000200AREAHEAP , NOINIT, READWRITE, ALIGN=3_heap_base Heap_Mem _heap_limit;MDK关键字SPACEHeap_SizePRESERVE8THUMB;定义并初始化中断向量表AREA RESET, DA TA, READONLYV ectorsEXPORTEXPORTV ectors EndVectorsEXPORTDCDV ectors SizeDCD_in itial_spReset HandlerTop of Stack;Reset Han dlerDCDNMI Handle

36、rVectors EndDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDDCDEQUHardFault Han dlerMemMa nage_Ha ndlerBusFault Handler;NMI Ha ndler;Hard Fault Han dler;MPU Fault Ha ndler;Bus Fault Han dler;Usage Fault HandlerUsageFault_Ha ndler0; Reserved;Reserved;Reserved;ReservedSVC_Ha ndler; SVCall Ha ndlerDebugMon_Ha ndle

37、r0PendSV HandlerSysTick_Ha ndlerV ectors End -;Debug Mo nitor Han dler ;Reserved;Pe ndSV Han dler;SysTick Han dlerV ectors_Vectors_Size;定义并初始化代码段,程序正真的入口AREA |.text|, CODE, READONLY *END OF FILE*Reset_Ha ndler PROC;_main为运行时库提供的函数,会调用下面定义的_user_initial_stackheap,初始化堆栈。IMPORT _mai nLDRRO, =_ma inBX R

38、0;进入 mainENDP;异常服务程序,对应同一个死循环的地址NMI_Ha ndlerHardFault_Ha ndlerMemMa nage_Ha ndlerBusFault_Ha ndlerUsageFault_Ha ndlerSVC_Ha ndlerDebugMon_Ha ndlerPen dSV_Ha ndlerSysTick_Ha ndler PROCBENDP;初始化堆栈ALIGNIMPORT _use_two_regio n_ memoryEXPORT _user_i ni tial_stackheapuser_in itial_stackheapLDRR0,=Heap_Mem

39、LDRR1,=(Stack_Mem + Stack_Size)LDRR2,=(Heap_Mem + Heap_Size)LDRR3,=Stack_MemBXLRALIGNEND *END OF FILE*1.2.启动代码实战(点亮一个LED )打开Keil,新建工程,命名 LED保存。选择芯片型号 STM32F107VC,点击0KSelect Device for rarg&t rTarget 1CFU/er-JcrDsvct.Toe set:STMicnpctroTicsSrM32F107VCAHNDd怙 LazeDMyipbjli.5M无 F1C3ZGaS_M32F1CEP35TMMF1C

40、5RESTMJ2F1C5FK5TM32F1C5VBSTM32F1C5T5TM32FlC5VtS_MJ2F1C7RE5TM3ZFHJ7HCS_M32F1C7VE5TN32F1C7VCS_F7+Q1Gore:叫AM J2bit Corei-M licrDcontollBr.CPU dock lp to 72MHiMemoriesZ飆E日同刃抉刊旳irrbedded SRAMSpecie PsEttrea.-USD 2.0 Full Spd Drdte43nst *OTG 二口 it ulci mil u i-bp PH W 100 atieffiet wth defeated DV1A and S

41、RAM 12CR|=(unsigned int)0x00000001;RCC-CFGR&=(unsigned int)0xF8FF0000;RCC-CR&=(unsigned int)0xFEF6FFFF;RCC-CR&=(unsigned int)0xFFFBFFFF;RCC-CFGR&=(unsigned int)0xFF80FFFF;RCC-CR&=(unsigned int)0xEBFFFFFF;RCC-CIR=0x00FF0000;RCC-CFGR2=0x00000000;/* V ector Table Relocatio n in In ternal SRAM.*/SCB-VTOR =(u nsig ned in t)0x20000000);/*打开GPIOD 口时钟*/RCC-APB2ENR |= 0x20;/*设置GPIOD第2脚为推挽输出模式,速率为 50MHz */GPIOD-CRL &= 0xFFFFF0FF;GPIOD-CRL |= 0x00000300;/* 点亮 PD2 口的 LED */GPIOD-BRR &= 0xFFFFFFFB;while (1)* * END OF FILE* *

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!