一、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的简单设置

首先点击EditConfiguration…,或者直接点工具栏的扳手图标,进入设置界面。
在这里插入图片描述
设置编码形式为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最小系统设计原理及其相关应用

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐