嵌入式系统 课后实验总结

汇编实验:

STACK_TOP EQU 0x20002000      ; SP初始值,常数
NUM EQU 20       

; Vector Table Mapped to Address 0 at Reset
	AREA    RESET, CODE, READONLY ;(段名为RESET)
 DCD     STACK_TOP        ; Top of Stack
 DCD     START             ; Reset Handler
	ENTRY		; 指示程序从这里开始执行
START   	; 主程序开始
		LDR		R0, =src					;从R0的地址(0x08000044)开始,先加载地址,在相应地址赋值,即在相应地址放入代码段里定义的值
	 	LDR		R1, =dst					;从R1的地址(0x2000000)开始,连续开辟一段空间(大小等于NUM),其值都为0
		MOV		R2, #NUM			    	;将立即数20放入R2(0x00000014)h
		MOVS   	R3, R2, LSR #3				;R3 <-(R2>>3)     R3(0x00000002)h
		BEQ		COPYWORDS		         	;关系标志位(Z=1时跳转)R3(0x00000002)h

		STMFD	   SP!, {R4-R11}            ;//R4~R11全部为((0x00000000)h)
                                            ;从sp指针的位置,以地址递减储存的方式连续储存R4-R11 ,栈顶放的是LR	

OCTCOPY
		LDMIA.W		R0!, {R4-R11}			; R4~R11  分别放入的是1~8
                                            ;从地址R0处读取多个字,并依次储存到R4-R11,每储存一个字后R0自增一次
		STMIA.W		R1!, {R4-R11}			; R4~R11的内容R1的地址(0x2000000)开始,依次放入
                                            ;从地址R1开始依次读取多个字,每次读取后R1自增一次
		SUBS	R3, R3, #1			 		 ;R3=R3-1 并更新标志位
              



		BNE		OCTCOPY					; 条件:上一次操作时(z=0时跳转) 
		                                ;第一次运行后R3(0x0000001)h;
										;回到上部	OCTCOPY处从新执行,目的将剩余的数放入R4~R11中内容是9~16
										;第二次运行后R3(0x0000000)h
										

		LDMFD.W		SP!, {R4-R11}       ;将sp指针所指的内容赋值给R4~R11 目的将R4~R11清空

COPYWORDS
		ANDS	 R2, R2, #7						; number of odd words to copy 
		BEQ		STOP							; 判断R2中的内容是否为1 此时R2(0x00000004)
WORDCOPY
		LDR		R3, [R0], #4;					; 【R0】赋值给R3; R0=R0+4;   R3(0x0000012)h	 R0(0x0800008c)  
		STR		R3, [R1], #4;0x20000040			; store a word to the destination 
		SUBS	R2, R2, #1						; decrement the counter 
		bne		WORDCOPY						; 循环完毕后从R1的地址连续储存三个数分别是 18 19 20
             
STOP	
		B	.	; 工作完成后,进入无穷循环
		
		;定义数据区 
 AREA mydata1, DATA, READONLY  
src		DCD   1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
	AREA mydata2, DATA, READWRITE    
dst		SPACE   NUM 		 	
    END	; 标记文件结束







LED闪烁:

#include "stm32f10x.h"
 // pb5 led1
 //	pD6  led2
 // pD3 led3
void rcc_configration()
{
   	 SystemInit();	   // 初始化系统硬件信息等
}
void led_configration()
{
    GPIO_InitTypeDef GPIO_InitStructure;   // 结构体声明


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD,ENABLE);  // 使能
  
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB,&GPIO_InitStructure);

	 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(GPIOD,&GPIO_InitStructure);
   



}


int main()
{
	  rcc_configration() ;
	  led_configration();
	  while(1)
	  {
	  	   GPIO_SetBits(GPIOB,GPIO_Pin_5);
		   GPIO_SetBits(GPIOD,GPIO_Pin_6);
		   GPIO_SetBits(GPIOD,GPIO_Pin_3);
		   GPIO_ResetBits(GPIOD,GPIO_Pin_3);  // 清除端口为位		  
		   while(1);		  
	  } 
}

系统滴答定时器:(注意定时器设置)

#include "stm32f10x.h"

void LED_Config(void){
  GPIO_InitTypeDef GPIO_InitStructure;	  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				     //LED1  V6	  配置为通用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			 //口线翻转速度为
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
查看文章 STM32 keil mdk启动代码发分析_转2010年01月29日 星期五 13:50 ;// Stack Configuration ;// Stack Size (in Bytes) ;// Stack_Size EQU 0x00000200 ;//定义堆栈大小 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段 按8字节对齐 ;AREA 伪指令用于定义一个代码段或数据段 NOINIT:指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为0 Stack_Mem SPACE Stack_Size ;//保留Stack_Size大小的堆栈空间 分 配连续 Stack_Size 字节的存储单元并初始化为 0 __initial_sp ;//标号,代表堆栈顶部地址,后面有用 ;// Heap Configuration ;// Heap Size (in Bytes) ;// Heap_Size EQU 0x00000020 ;//定义堆空间大小 AREA HEAP, NOINIT, READWRITE, ALIGN=3 ;//定义一个数据段,8字节对齐 __heap_base Heap_Mem SPACE Heap_Size ;//保留Heap_Size的堆空间 __heap_limit ;//标号,代表堆末尾地址,后面有用 PRESERVE8 ;//指示编译器8字节对齐 THUMB ;//指示编译器为THUMB指令 ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY ;//定义只读数据段,其实放在CODE区,位于0地址 EXTERN NMIException EXTERN HardFaultException EXTERN MemManageException EXTERN BusFaultException EXTERN UsageFaultException EXTERN SVCHandler EXTERN DebugMonitor EXTERN PendSVC EXTERN SysTickHandler ;//声明这些符号在外部定义,同C ;//在××it.c中实现这些函数 ,中断就能自动调用了 EXPORT __Vectors EXPORT __initial_sp ;EXPORT:在程序中声明一个全局的标号__Vectors,该标号可在其他的文件中引用;I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值