怎样去认识ARM从入门开始,编译一个简单的STM32程序(LED案例)
1、MDK5的环境搭建及STM32与C51支持包的安装注册2、学习一个stm32的实例(LED闪烁)一、创建一个新的工程二、选择stm32芯片三、对环境进行初始设置四、编写代码并保存格式化五、进行编译
3、学习总结
1、MDK5的环境搭建及STM32与C51支持包的安装注册
初入MDK的学习及应用,在环境搭建配置及安装方面不做多的解释,全程靠网上的大大们支持,其中发现一个特别好的帖子,我也是参考他的安装步骤进行配置的。链接分享给大家
上不错的安装教程(有附资源包哦不用自己下载)
2、学习一个stm32的实例(LED闪烁)
一、创建一个新的工程
二、选择stm32芯片
三、对环境进行初始设置
四、编写代码并保存格式化
#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);
}
}
在new一个文件当中写入如上代码,并进行保存对文件后缀名写为.c文件,这里保存为LED.c文件。(不保存文件格式后缀名是无法进行编译的)
五、进行编译
3、学习总结
在弄软件环境的配置就遇到许多问题,通过这个联系,熟悉uvprojx软件使用即MDK开发环境,通过网络学习,对MDK编译过程有简单理解。缺少了LED闪烁程序的仿真效果,希望有了芯片后可以进行进一步的实践。