day05:新建Keil 工程模板

 打开Keil,Project,New uVision Project...,输入工程名:YH-F103,保存,弹出:

根据自己的板子型号,这里选择STM32F103RC,OK,弹出:

这个是配置环境,直接关掉,新建了一个工程:

新建文件,保存,命名:main.c,保存,右键Source Group1,Add Existing Files...,选择main.c,add,close,新建了一个文件:

(1)添加启动文件(单片机初始化的系统文件),我们知道STM32F103RCT6这个板子的FLASH大小256KB,

查看STM32F103用户手册(零死角玩转STM32—F103MINI.pdf),

可知对应的启动文件是:startup_stm32f10x_hd.s

 

然后,找单片的开发资料(一般板子都有提供资料),以下是野火的板子提供的资料:

启动文件对应目录:

D:\STM32\野火\A盘(资料盘)\6-STM32官方手册\【固件库】STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

将其拷贝到工程目录下,和main.c同级目录下:

并添加到Keil中:

(2)添加库文件(相当于51中的reg52.h)

在和main.c同级目录下新建文件:stm32f10x.h,并添加到Keil,这个暂时是空文件。

(3)编写main.c文件

#include "stm32f10x.h"

int main(void)
{
	
	while(1);
}

以上环境就已经搭建好了,把文件烧录到单片机中,单片机首先执行的是启动文件startup_stm32f10x_hd.s,会先执行main.c文件

设置,让它执行main函数:这样就可以实现汇编到C语言的国过渡。

另外,这汇编语言中声明了一个函数,如果不定义,在编译的时候就会报错,所以这里定义,但是什么事都不做:

void SystemInit(void)
{
	/* 函数体为空,目的是为了骗过编译器不报错 */
}

这时候main.c完整代码是:

#include "stm32f10x.h"

int main(void)
{
	
	while(1);
}

void SystemInit(void)
{
	/* 函数体为空,目的是为了骗过编译器不报错 */
}

 编译一下:编译通过。

设置以下,输出 .hex 文件:

点击编译“Build”,就会生成 .hex 文件:

使用mcuisp.exe可以将 .hex 文件烧录到单片机中:

但是单片机没有任何反应,英文刚刚的文件是空的,什么也没有,所以不会有反应:

下面代码演示点亮LED灯:

#include "stm32f10x.h"

#define GPIO_RCC *(unsigned int *)0X40021018
#define GPIO_CRL *(unsigned int *)0X40011000
#define GPIO_ODR *(unsigned int *)0X4001100C

int main(void)
{
	/* 配置RCC寄存器,使能GPIO口的时钟 */
	GPIO_RCC |= ( 1<<4 );
	
	/* 配置CRL寄存器,配置为推挽输出 */
	GPIO_CRL |= ( 1<<(4*2) );
	
	/* 配置ODR寄存器 */
	GPIO_ODR &= ~( 1<<2 );

	while(1);
}


void SystemInit(void)
{
	/* 函数体为空,目的是为了骗过编译器不报错 */
}

 烧录到单片机中,发现D4的LED灯被点亮了

 

========================= 以上新建工程模板完成,实际开发中请按需要操作,不一定相同===============

 

posted @ 2018-04-15 11:58  半生戎马,共话桑麻、  阅读(445)  评论(0)    收藏  举报
levels of contents