STM32和C51程序编译并基于Proteus仿真

一、MDK5环境的安装

文件资源主要来自老师的分享,值得一提的是在使用keygen破解之前,需要以管理员身份打开Keil uVision5,否则生成的注册码将会出错。
在这里插入图片描述

可以看到这里我将之使用时间注册至2032年。

二、第一个STM32工程–LED闪烁

1. 工程创建

在这里插入图片描述

2. 选择芯片

在这里插入图片描述
这里我选择了STM32F103R8

3. Run-Time Environment设置(可省略)

在这里插入图片描述
由于这里进行了设置,后面我没有将启动文件引入Source Group 中

4.工程文件的创建

在之前的操作基础上我测试了编译helloworld,这里就不做演示了。
接着我再次建立工程,跳过了Run-Time Environment设置,然后进行工程文件的创建。在这里插入图片描述
建立一个文件夹,并在文件夹里创建如下子目录。
在这里插入图片描述
CMSIS中建立startup文件夹在这里插入图片描述
satrtup中的文件如图所示
在这里插入图片描述
Doc中放客户说明文件
在这里插入图片描述
Libraries中文件如下(直接copy自STM32F10x_StdPeriph_Lib_V3.5.0标准库)
在这里插入图片描述
User中文件如下,其中mian.c文件是自己建立的
所有文件来自标准库(标准库来自老师的分享,官方也可以下载,这里不提供链接),按照这个格式放好。
进入Keil uVision5,建立新工程,在这里插入图片描述
按图示按钮,进入新增分组界面
在这里,建立与刚才文件夹同名的分组。
双击分组将之前文件夹里的文件放进去在这里插入图片描述
注意这里要选择相应的文件类型,不然搜索不到。
点击魔法棒-c/c++在这里插入图片描述
Define按图示填入USE_STDPERIPH_DRIVER(注意,这很重要,不然后面编译会出现很多问题,别问我怎么知道的)

Inciude paths按图示加入包含头文件的文件夹,工程会自动优先在添加进来的文件夹里搜索头文件。
自此,工程文件的创建才算完成,

5.编写代码(LED闪烁)





#include "stm32f10x.h"  
#include "stm32f10x_gpio.h"
/*

    *由于STM32的GPIO工作模式有8种(输入4种+输出4种)
    *在GPIO输出之前要先对要操作的GPIO进行配置
    知识点:
    一个结构体
                    typedef struct//结构体
                {
                    uint16_t GPIO_Pin;
                    GPIOSpeed_TypeDef GPIO_Speed;
                    GPIOMode_TypeDef GPIO_Mode;
                }GPIO_InitTypeDef;
    三个函数:
    1、GPIO_Init(GPIOB,&GPIO_InitTypeDef);
    2、GPIO_ResetBits(GPIOB,GPIO_Pin_5);  这里的意思是给端口5高电平
    3、GPIO_SetBits(GPIOB,GPIO_Pin_5);   把GPIO引脚设置低电平(红LED灯亮)
    */

//驱动程序:GPIO初始化设置
int led_gpio_init_()
{
    GPIO_InitTypeDef GPIO_InitTypeDef;//定义一个结构体变量

    /*使能GPIO的rcc时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

    /*配置GPIO引脚*/
    GPIO_InitTypeDef.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_0|GPIO_Pin_1;//使用操作符可以一次使用多个引脚,端口0是绿色  1是蓝色    5是红色
    GPIO_InitTypeDef.GPIO_Speed  = GPIO_Speed_50MHz;//设置输出速率50MHz
    GPIO_InitTypeDef.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    /*初始化*/
    GPIO_Init(GPIOB,&GPIO_InitTypeDef);//参数一选择GPIO外设(ABCDE)参数二指向GPIO_InitTypeDef的指针
}

//延时函数
void delay()
{
 int i = 10000000;
    while(i--);
}

//主函数
int main(void)
{
    led_gpio_init_();//调用GIPO初始化函数

    /*循环给高低电平实现闪烁*/
    while(1)
    {
        GPIO_ResetBits(GPIOB,GPIO_Pin_5);
        delay();
        GPIO_SetBits(GPIOB,GPIO_Pin_5);
        delay();

        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
        delay();
        GPIO_SetBits(GPIOB,GPIO_Pin_0);
        delay();

        GPIO_ResetBits(GPIOB,GPIO_Pin_1);
        delay();
        GPIO_SetBits(GPIOB,GPIO_Pin_1);
        delay();
    }
}

6.代码讲解

对GPIO的配置是通过各种函数实现的, 这点和51有所不同,51是直接操作寄存器,其实库函数的本质还是操作寄存器,只不过官方将它封装成了各种函数,来方便操作寄存器,毕竟STM32的寄存器要比51多很多,要记住每个寄存器的名称是不容易的,而通过各个函数就可以简单的操作各个寄存器了,在MDK开发环境中可以通过右键Go to definition of 'xxx’来查看各个函数是如何操作寄存器的。
在这里插入图片描述

从初始化配置时,要先使能GPIO的时钟,指定引脚,设定输出速率和工作模式,这些是必不可少的。
此处放几张截图,来自STM32f10固件库使用手册中文版手册,有很大帮助。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.编译成功

在这里插入图片描述

8.调试

在这里插入图片描述

三、安装并熟悉Proteus 电路仿真软件

1.安装及遇到的问题

文件来自老师分享,不便提供,安装过程不做赘述。当安装完毕后,建立工程,然后准备进入元器件库,出现了一个棘手的问题,提示找不到元器件库。

在这里插入图片描述
解决办法是,右键Proteus 8 Professional文件夹,选择属性,按照图示,勾选允许完全控制、修改,点击应用。在这里插入图片描述
问题解决。
在这里插入图片描述

2.配置电源线

在这里插入图片描述
design–power rial configuration–更改name为GND–分别添加VDDA、VSSA

3.连接组件

在这里插入图片描述
连线如图所示

4.开始仿真

在这里插入图片描述
在这里插入图片描述
可以看到出现高低电平,但是灯没有亮,猜测是电阻值的问题,目前没有得到解决,但是可以得知仿真成功。

四、C51程序的设计和仿真

1.keil c51的安装

我在网上找到一个c51的安装包,打开安装程序后,生成的安装目录跟MDK5所在目录一样在这里插入图片描述
然后出现了一个C51文件夹,这里我不是很懂,是否是keil c51与mdk5共存了,后续我也没遇到问题,但是看网上教程没有这么简单啊,有点迷惑,但是也算搭建成功了。

2.建立c51工程–实现led流水灯效果

前面选择芯片那些步骤之前都做过,这里选择了AT89C51,然后添加启动文件,新建main文件,这里不做截图一一展示了,最终创建的界面如下。
在这里插入图片描述

3.写入代码(参考网上博文,文末提供链接)

#include <reg51.h>
void delay(void)
{
 unsigned char i ,j;
 for(i=0;i<250;i++)
 for(j=0;j<250;j++);
}
void main(void)
{
 while(1)
 {
   P0=0xfe;
  delay();
  P0=0xfd;
  delay();
  P0=0xfb;
  delay();
  P0=0xf7;
  delay();
  P0=0xef;
  delay();
  P0=0xdf;
  delay();
  P0=0xbf;
  delay();
  P0=0x7f;
  delay();
 }
}

代码很简单,不做解释

4.生成hex文件

在这里插入图片描述

5.进入Proteus连接组件

在这里插入图片描述

6.链接到hex文件

在这里插入图片描述

7.开始仿真

在这里插入图片描述
很遗憾灯没有亮,但是通过高低电平的变化可以看出仿真成功了,可能电阻值,或者电源线配置有问题,这个留给以后去探究。

五、总结

这次工作开始于国庆假期,但是我大部分时间都享受假期去了,在八号的下午五点才开始,而且一路做过来,遇到大大小小各种各样不同的问题,而且很多知识都是才开始看书,一点一点啃出来的,九号花了几乎大半天才最终勉强完成,而且还要很多地方并不完善。比如我还没搞清楚我的keil c51是怎么安装起的,虽然可以用。程序代码大多数是来自参考,只是勉强看懂,没有动手去写。最后的仿真步骤,灯老是不亮,多次调试无果。但是总的来说,还是收获颇丰,在本篇博文里也算详尽的写下了各种操作步骤和知识点。感想是,嵌入式系统的学习不是那么容易的,并且一定要善于运用网络去寻找各种问题的解决办法,不能轻易放弃。

六、参考资料及网址

工程文件创建步骤
KEIL频繁出现Cannot read project file提示信息的解决方法
Undefined symbol assert_param (referred from misc.o).解决办法
点亮LED灯
使用库函数操作GPIO
Proteus找不到元器件库的解决办法
keil C51下载地址
51程序与仿真(该博主有51单片机系列教程)

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值