搭建KEIL开发环境及进行STM32汇编程序编写

一、Keil环境搭建

1、安装准备

下载Keil百度网盘资源包,其中具有mdk5和stm32软件包以及附属破解文件
链接:https://pan.baidu.com/s/15xerzSBo7cyT1tHC7h1xgw
提取码:1234

2、安装Keil

(1)点击mdk531文件,进行安装,点击next进行下一步
在这里插入图片描述
(2)确认I agreenext进行下一步

在这里插入图片描述
(3) 选择安装路径,next下一步
在这里插入图片描述
(4)随意输入NameEmail,再点击next
在这里插入图片描述
(5)点击安装,finish完成
在这里插入图片描述
(6)点击ok并关闭程序
在这里插入图片描述

3、破解Keil

(1)以管理员身份运行Keil,打开FeilLincense Management
在这里插入图片描述
(2)复制CID
在这里插入图片描述
(3)打开keygen程序,粘贴CID,将Target 改为ARM
再点击Generate,得到注册码
在这里插入图片描述

(4)复制粘贴到Keil的New Lincense ID Code空白处,点击Add LIC,点击Close
在这里插入图片描述

二、stm32简单程序编写

安装资源包中的Keil.STM32f1xx_DFP

1、新建工程

(1)打开Keil,新建一个工程

在这里插入图片描述
(2)建立工程文件,此处名为Test
在这里插入图片描述
(3)选择STM32芯片,此处选择STM32F103RB
在这里插入图片描述
(4)勾选对应选项,完成创建
在这里插入图片描述

2、创建main.c 文件

(1)新建文件,出现Text1
在这里插入图片描述
(2)复制粘贴代码到Text1文件

//宏定义,用于存放stm32寄存器映射
#define PERIPH_BASE           ((unsigned int)0x40000000)//AHB
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
//GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,该地址为GPIOA的基地址
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
//GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,该地址为GPIOB的基地址
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
//GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,该地址为GPIOC的基地址
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
//GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,该地址为GPIOD的基地址
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
//GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,该地址为GPIOE的基地址
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
//GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,该地址为GPIOF的基地址
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
//GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,该地址为GPIOG的基地址
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C 
 
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
 
 #define LED0  MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
//#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8
//定义typedef类型别名
typedef  struct
{
   volatile  unsigned  int  CR;
   volatile  unsigned  int  CFGR;
   volatile  unsigned  int  CIR;
   volatile  unsigned  int  APB2RSTR;
   volatile  unsigned  int  APB1RSTR;
   volatile  unsigned  int  AHBENR;
   volatile  unsigned  int  APB2ENR;
   volatile  unsigned  int  APB1ENR;
   volatile  unsigned  int  BDCR;
   volatile  unsigned  int  CSR;
} RCC_TypeDef;
 
#define RCC ((RCC_TypeDef *)0x40021000)
//定义typedef类型别名
typedef  struct
{
volatile  unsigned  int  CRL;
volatile  unsigned  int  CRH;
volatile  unsigned  int  IDR;
volatile  unsigned  int  ODR;
volatile  unsigned  int  BSRR;
volatile  unsigned  int  BRR;
volatile  unsigned  int  LCKR;
} GPIO_TypeDef;
//GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为GPIO_TypeDef
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
 
void  LEDInit( void )
{
     RCC->APB2ENR|=1<<2;  //GPIOA 时钟开启
     GPIOA->CRH&=0XFFFFFFF0;
     GPIOA->CRH|=0X00000003; 
}
 
//粗略延时
void  Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i,n;
     for (n=0;n<t;n++)
         for (i=0;i<800;i++);
}

int main(void)
{
	 LEDInit();
     while (1)
     {
         LED0=0;//LED熄灭
         Delay_ms(500);//延时时间
         LED0=1;//LED亮
         Delay_ms(500);//延时时间
     }
}

(3)粘贴代码后,保存文件
在这里插入图片描述
(4)点击 Source Group 1 ,然后点击 Add Existing Files to Group …(在工程下添加main.c文件)
在这里插入图片描述

3、编译程序

点击左上角编译按钮,开始编译程序,0 error可以运行
在这里插入图片描述

4、stm32仿真程序调试

调试前设置
(1)点击 按钮,然后在弹出的窗口内,点击 Debug,勾选 Use Simulator ,再选择 ULINK2/ME Cortex Debugger ,并点击 Settings
在这里插入图片描述
(2)确定PortJTAGReset可以设置为AutodetectSYSRESEETREQ,然后确定
在这里插入图片描述
开始调试
选中带有红色d的放大镜开始调试,以及仿真调试所需要的调试工具
在这里插入图片描述

三、分析HEX文件

创建HEX文件
在这里插入图片描述

:020000040800F2
:10000000600600206D0100087501000877010008F6
:10001000790100087B0100087D0100080000000054
:100020000000000000000000000000007F01000848
:10003000810100080000000083010008850100081C
:100040008701000887010008870100088701000870
:100050008701000887010008870100088701000860
:100060008701000887010008870100088701000850
:100070008701000887010008870100088701000840
:100080008701000887010008870100088701000830
:100090008701000887010008870100088701000820
:1000A0008701000887010008870100088701000810
:1000B0008701000887010008870100088701000800
:1000C00087010008870100088701000887010008F0
:1000D00087010008870100088701000887010008E0
:1000E00087010008870100088701000800F002F876
:1000F00000F02CF80AA090E8000C82448344AAF196
:100100000107DA4501D100F021F8AFF2090EBAE893
:100110000F0013F0010F18BFFB1A43F0010318473B
:1001200094020000A4020000002300240025002601
:10013000103A28BF78C1FBD8520728BF30C148BF4A
:100140000B6070471FB51FBD10B510BD00F031F832
:100150001146FFF7F7FF00F019F900F04FF803B46C
:10016000FFF7F2FF03BC00F057F800000948804792
:1001700009480047FEE7FEE7FEE7FEE7FEE7FEE789
:10018000FEE7FEE7FEE7FEE704480549054A064BA1
:100190007047000035030008ED00000860000020F3
:1001A0006006002060020020600200207047704757
:1001B0007047754600F02CF8AE4605006946534678
:1001C00020F00700854618B020B5FFF7DDFFBDE839
:1001D00020404FF000064FF000074FF000084FF0AE
:1001E000000BAC46ACE8C009ACE8C009ACE8C009FB
:1001F000ACE8C00921F007018D46704710B50446F0
:10020000AFF300802046BDE81040FFF7A8BF000014
:10021000004870470000002001491820ABBEFEE7EF
:10022000260002007047000081B00090009828B1BD
:10023000002000BF009901308842FBD301B0704715
:1002400041F21800C4F20200016841F004010160AB
:1002500040F60400C4F20100016821F00F010160C2
:10026000016841F0030101607047000080B500F0B3
:1002700001F880BD82B041F204000021C4F2020006
:100280000191009150F8041C41F4803140F8041CA5
:1002900050F8041C01F400310091019901310191E1
:1002A000009919B90199B1F5A06FF1D150F8041C6A
:1002B000890354BF0021012100910099012936D101
:1002C00042F20001C4F202010A6842F010020A6020
:1002D0000A6822F003020A600A6842F002020A6019
:1002E0000168016001680160016841F4806101609A
:1002F000016821F47C110160016841F4E81101609A
:1003000050F8041C41F0807140F8041C50F8041CA3
:100310008901FBD5016821F003010160016841F00A
:1003200002010160016801F00C010829FAD102B054
:100330007047000080B541F20000C4F2020001687D
:10034000002241F0010101604168CFF6FF02114037
:10035000416001684FF6FF72CFF6F662114001600E
:10036000016821F480210160416821F4FE014160AF
:100370004FF41F018160FFF779FF4EF60850CEF26F
:1003800000004FF00061016080BD000040F2A01449
:10039000C4F22124FFF754FF002501264FF4FA7020
:1003A0002560FFF741FF4FF4FA702660FFF73CFF2E
:1003B000F4E70000C403000800000020600600000D
:0403C0002801000808
:04000005080000ED02
:00000001FF

该文件为16进制的一串字符。hex文件的第一排字符称之为扩展线性地址记录,也称为32位地址记录或HEX386记录。

四、总结

通过该实验,完成了Keil的安装及环境搭建,并且完成了简易的stm32程序,了解了HEX文件的内容。

五、参考资料

https://blog.csdn.net/qq_45659777/article/details/120496577
https://blog.csdn.net/qq_43279579/article/details/108880667?utm_source=app

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值