目录
一、Keil环境搭建
1、安装准备
下载Keil百度网盘资源包,其中具有mdk5和stm32软件包以及附属破解文件
链接:https://pan.baidu.com/s/15xerzSBo7cyT1tHC7h1xgw
提取码:1234
2、安装Keil
(1)点击mdk531文件,进行安装,点击next进行下一步
(2)确认I agree ,next进行下一步
(3) 选择安装路径,next下一步
(4)随意输入Name和Email,再点击next
(5)点击安装,finish完成
(6)点击ok并关闭程序
3、破解Keil
(1)以管理员身份运行Keil,打开Feil中Lincense 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)确定Port是JTAG,Reset可以设置为Autodetect或SYSRESEETREQ,然后确定
开始调试
选中带有红色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