Keil安装与STM32简单程序编写---LED闪烁
关于keil5 MDK安装、编程与烧录至STM32F103C8T6核心板过程
目录
一、Keil软件安装与配置
我们使用Keil软件编写C51程序
关于Keil软件的下载、安装和新建工程可以参考链接:1.keil MDK(ARM)的安装;2为添加keil MDK STM32F系列的芯片包 ;3.keil MDK兼用编译51单片机;4.为keil添加51单片机芯片包;5.长期使用keil MDK
1)安装Keil ARM
解压到当前文件夹
双击运行MDK


我先在E盘,新建了文件夹Keil
选择MKD和芯片库安装路径界面(我选择的刚才新建的文件夹目录)
随意输入一些,然后NEXT
安装中
如果出现了这个,选安装

Keil MDK(ARM)安装完成
2)为MDK添加STM32系列的芯片库


选中它们复制到我们安装keil mdk的文件夹中的keil5/ARM/PACK里面
以安装STM32f1系列芯片为例:
双击
点NEXT
点Finish
新建工程时,就会出现刚才安装的芯片库
同样的方式,安装剩下的芯片库
stm32芯片库安装好后,继续进行兼用C51单片机,使得Keil也可以对C51单片机进行编程
3)Keil MDK兼用编译C51单片机

将C51复制到Keil的安装目录Keil5下

打开keil相关辅助辅助文件里面的c51UV4,将里面的文件复制到安装位置keil5里面的UV4.

双击打开keil相关辅助辅助文件里面的tool C51,全选,然后复制
粘贴到安装位置keil5里面的TOOLS内容的后面。 
更改TOOLS里面51的运行目录,改成keil5\C51.(这里我们直接往上滑动,复制 ARM的运行目录,然后粘贴到PATH后面,把ARM改成C51)
并把ARM改为C51
最后,按CTRL+S保存,保存后,左上角的*会消失

此时,重新启动Keil,新建Project时,我们会发现芯片包下面的选项会多出一个C51的芯片包。

接下来我们继续添加stc15系列的芯片包
4)为keil添加51单片机芯片包

打开后点击keil仿真设置,再点击添加型号
选择安装目录keil5中的C51文件夹,点击确定
重新启动Keil,新建工程,我们会发现芯片包下面的选项又会多出一个STC的芯片包。
5)Keil5的长期使用(破解)
破解前断开网络,退出电脑管家等软件
点击打开注册机文件夹,右键解压到当前文件夹
选中注册机,右键,点击管理员的身份运行
点击Feil,然后点击License Managment.
将keil mdk的CID复制到注册机的CID
target选中ARM,点击Generate。就会生成特殊码
复制特殊码到keil mdk的LIC中。
点击 add LIC,这时上面会出现2032的使用期,说明成功了。
同样的操作,我们选择C51,点击Generate,把生成的特殊码复制到keil mdk的LIC中,点击add LIC ,把C51的使用期也到2032
至此,安装完成
6)Keil的简单设置
首先点击Edit→Configuration…,或者直接点工具栏的扳手图标,进入设置界面。
设置编码形式为Chinese GB2312(Simplified),如果不设置,你从其它地方粘贴过来的代码含有中文的话,就会出现乱码,然后设置Tab size为4。
进入Color & Fonts,选中C/C++ Editor files,选中中间窗口内的元素后,可以在右侧修改样式,比如设置字体、大小、颜色、背景,Sample是设置后预览效果。
二、STM32简单程序编写(某一个GPIO端口点亮LED)
1、新建工程
选择路径,输入工程名,保存
在左侧的窗口内选择STM32芯片,我的芯片是STM32F103C8T6核心板,所以这里我们选择STM32F103C8,并保存。

按CTRL+N新建文件,然后保存为main.c
**ps:**一定是.c文件格式

选择刚才保存的main.c文件
添加成功后,如图所示
在main.c文件中输入以下代码:
//用来存放STM寄存器映射
#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);//延时
}
}
我有报错出现了
error: #5: cannot open source input file “core_cm3.h”: No such file or directory
在我的文件下路径是:
E:\Keil5\ARM\CMSIS\5.4.0\CMSIS\Core\Include
但我安装路径下有这个文件
按照这个路径将core_cm3.h这个文件粘贴进来
完成这个后,还有其他的文件没找到
所以我把下列路径里的所有文件全都复制粘贴过去了
粘贴到下列路径(如图)
然后就没有报错了
2、程序烧录
1、下载ST-LINK资料包
http://openedv.com/posts/list/0/62552.htm
在资料包里,点击dpinst_amd64.exe即可下载
2、硬件连接
如果最小系统板里没有写RXD/TXD可以连接PA10与PA9

点击魔术棒
在Flashi Download里点击Reset and Run, 然后确定
确定后,重新编译,然后点LOAD,下载
3、LED闪烁实验结果
LED闪烁实验结果
三、STM32芯片原理
1、STM32核心板原理图

2、STM32最小系统设计原理及其相关应用
参考链接:STM32最小系统设计原理及其相关应用
更多推荐



所有评论(0)