一.keil环境搭建
1.keil的安装
mdk531安装 链接:https://pan.baidu.com/s/1ttrDhv6kXgAvPiYINf9iGw 提取码:1234 注册器 链接:https://pan.baidu.com/s/1T11pBKpD6xc-cNmXBskcaw 提取码:1234 支持包 链接:https://pan.baidu.com/s/1a7UDSVeLC4ktHNN9lV9oIA 提取码:1234 通过以上下载mdk531和注册器,安装mdk,自行更改软件路径和支持包路径,填写相关信息,等待安装完成,点击Finish。
2.注册器的注册
(1)运行注册器
(2)开始—keil图标-以管理员身份运行
(3)File–Lincense Management–Single-User Lincense
找到CID,复制CID中的内容填写到注册器的CID空白处,将注册器中Target选择为ARM,点击Generate,得到注册码。
(4)将注册码复制到Keil的New Lincense ID Code空白处,点击Add LIC,点击Close。支持包安装
点击运行下载的支持包,Finish即安装完成。
二、构建stm32程序
1.新建工程
Project–>New μVision Project,新建项目,在弹窗中设置工程项目的名称和路径为test1的文件
2.配置环境
Project-Options for Target ‘Target 1’-STM32F103ZE 配置相应的运行环境
3.新建main.c文件编写源码。
#define PERIPH_BASE ((unsigned int)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000)
#define GPIOA_ODR_Addr (GPIOA_BASE+12)
#define GPIOB_ODR_Addr (GPIOB_BASE+12)
#define GPIOC_ODR_Addr (GPIOC_BASE+12)
#define GPIOD_ODR_Addr (GPIOD_BASE+12)
#define GPIOE_ODR_Addr (GPIOE_BASE+12)
#define GPIOF_ODR_Addr (GPIOF_BASE+12)
#define GPIOG_ODR_Addr (GPIOG_BASE+12)
#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))
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 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;
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
void LEDInit( void )
{
RCC->APB2ENR|=1<<2;
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;
Delay_ms(500);
LED0=1;
Delay_ms(500);
}
}
保存文件,切记保存文件时将文件名改为main.c,确保文件存储类型为c文件。
4.程序的运行过程
右键 Source Group 1- Add Existing Files to Group-(即添加main.c文件) 选择main.c-add Source Group 1下出现了main.c
5.编译程序
编译完成,0个错误,0个警告,表示编译成功。
6.stm32程序的仿真调试
魔法棒-Debug-Use Simulator - ULINK2/ME Cortex Debugger -Settings Settings保证Port为JTAG,Reset设置为SYSRESEETREQ返回ok即可 开始调试 记录build生成的 hex文件各段的大小,了解Hex文件格式及其前8个字节内容含义;
学习在没有硬件条件下进行仿真调试的方法,观察ARM寄存器变化状况。
三、总结
由于没有接入硬件设施仅仅只是进行了一个简单的软件调试,其调试结果展现不太直观,如果想要更加直观的展现这个LED灯程序展现则需要将程序下载至stm32的单片机上运行,这篇文章的重点仅仅是如何安装MDK软件、建立工程、如何编写代码、编译程序、仿真调试的基础教程,希望能帮到你。
四、参考文献
STM32入门教程----闪烁LED 简单的stm32程序的编译
|