keil构建STM32工程并使用proteus仿真led点灯实验

这篇具有很好参考价值的文章主要介绍了keil构建STM32工程并使用proteus仿真led点灯实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    STM32单片机与51单片机有很大区别,不仅结构上有很大差异,STM32更复杂一些,在操作上来说,STM32也要复杂很多,51单片机上手写代码,可以很直接操作引脚,但是STM32单片机在操作引脚之前需要作很多初始化工作,比如开启时钟使能,GPIO管脚初始化。

    下面就入门STM32单片机开发做一个简单的介绍,本文是仿真,不需要真实的STM32单片机,只需要电脑安装开发相关的软件即可,主要是keil-mdk,proteus。

    keil这里安装的是支持STM32单片机的版本,这个需要安装mdk那个版本。这里提供一个支持mdk的keil下载链接,提取码:1234。它的安装和破解和keil-51类似,破解也是使用keygen.exe来生成注册码,安装之后,还需要安装支持STM32单片机的包:Keil.STM32F1xx_DFP.1.0.5.pack,将上面链接下载的包离线安装即可,如下所示:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    选择keil工具栏上的Pack Install按钮,在弹出框中选择File->Import,弹出选择文件对话框,选中下载的pack包,即可离线安装。

    我们要构造STM32工程,还需要一个标准库,同样的,在刚才的下载链接里面自带了:STM32F10x_StdPeriph_Lib_V3.5.0.rar,解压之后,结构如下所示:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真 

    我们这里使用标准库来构建STM32工程,这里面有我们工程需要的头文件和源文件,以及启动文件。我们新建STM工程之前,先准备一个这样的工程文件结构:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    这里Core,也可以起名CMSIS,根据个人习惯,字面意思就是核心文件,这里我们要将标准库中core_cm3.h , core_cm3.c文件拷贝进来。路径是STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

   Fwlib是固件库firmware library的意思,这里我们把标准库中STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src的inc和src文件夹都拷贝过来。

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    Project 是用来存放keil工程的,后面在keil中新建工程,我们把保存位置指定到这里。

    User,这里是用户文件,拷贝STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x下的stm32f10x.h,system_stm32f10x.c,system_stm32f10x.h文件 和

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 下的stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h,system_stm32f10x.h(重复)。

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真 

    Startup启动文件存放的文件夹,这里我们把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm下的s结尾的文件都拷贝过来(实际只用到一个)。

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

   这样,我们除了Project文件夹中没有文件之外,其他四个目录都有了文件。

   keil新建工程

   打开keil-mdk,新建工程,位置选择刚才准备的Project文件夹。

    利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真 

    在接下来的向导,为构建目标选择设备,我们选择STM32F103C8,其他也可以,根据仿真需要选择。

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真 

这个新工程是没有任何内容的,我们要重新设置。点击工具栏的"管理工程项目"按钮(三色块):

Project Targets 修改为工程名称,

Groups这里添加四个Group,分别是Core,Fwlib,Startup,User,他们里面的文件,我们通过选择之前放到文件夹Core,Fwlib,Startup,User里面的文件,结构如下所示:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

我们还需要手动在User目录中添加main.c文件,然后通过在User这个Group上右键选择:添加已有文件到组中。

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

最终的工程文件结构:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    我们可以在main.c中增加部分代码,让他可以作为一个空工程编译。

#include "stm32f10x.h"

int main()
{

}

这个时候直接编译项目会报错,我们需要作设置,设置头文件查找范围,具体操作是点击工具栏魔法棒(Options for Targets),弹出框中选择c/c++,Define处输入USE_STDPERIPH_DRIVER,下方的Include Paths选择我们的文件夹Core,Fwlib/inc,User三个目录,手动选择:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    最后可以编译成功:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真 

  因为仿真最后需要的是hex文件,所以还需要一个设置,点击Options for Targets,切换到output,然后勾选Create HEX File:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    STM32单片机点灯的代码有一些复杂,主要需要开启时钟,并设置管脚电平。

#include "stm32f10x.h"

void Delay()
{
	unsigned int i, j;
    for(i = 0; i < 2000; i++)
	  for(j = 0; j < 110; j++);
}

void LED_Config()
{
      GPIO_InitTypeDef GPIO_InitStructure;                  // GPIO初始化结构体
	
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2时钟使能,这里单片机开启的是B口,所以对应RCC_APB2Periph_GPIOB,如果开启A口,这里对应RCC_APB2Periph_GPIOA
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      // 推挽模式
	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;             // 管脚B5作为输出
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //时钟频率
      GPIO_Init(GPIOB, &GPIO_InitStructure);                // GPIO初始化,开启GPIOB,如果要开启A或者C,改变这里的GPIOA或者GPIOC
}

int main()
{
    LED_Config();
	  while(1)
	  {
			GPIO_SetBits(GPIOB, GPIO_Pin_5);
			Delay();
			GPIO_ResetBits(GPIOB, GPIO_Pin_5);
			Delay();
	 }
}

    编译不报错,就可以开始进行仿真了,在proteus中,我们搭建如下所示的led设计图:

 利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

   选择芯片STM32F103C8,然后找到发光二极管LED-GREEN,再加上电阻,接地。简单的连线,STM32单片机好像和51单片机有些不一样,这里还需要对连线作处理,在菜单栏Design选择Power Rail Configuration,把GND和VCC/VDD左侧列出的部分都通过中间的Add(右移)箭头添加到右边:

利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    还有一个地方很重要,需要设置,就是单片机的晶振频率,如果不设置,将会报错:

Access to register of unclocked peripheral at 0x40010C00 cause BUS_FAULT [U1_CM3CORE]
 

    这个问题只有在仿真的时候可能会报错,有的地方说需要在代码里面设置开启时钟使能,但是我们的代码里面明显设置了,就是 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   这句代码。这个问题很折腾人,我开始以为是代码没有执行到main.c文件中的内容,其实不是的,而是晶振频率问题,但是同样不设置频率,我使用STM32CubeMX生成的代码执行就没有问题,这也很奇怪。

    利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

    这里的50MHz就是代码中设置的时钟频率GPIO_Speed_50MHz。 

    最后仿真不报错的情况: 利用proteus设计单片机仿真电路,建立keil项目,实现:按键识别,发光二极管状态,51单片机,stm32,proteus,嵌入式硬件,GPIO,仿真

     这里是使用标准库建立STM32工程,所以加入了一些标准库的头文件和源文件,这里根据项目特点新建了Core,Fwlib,Project,Startup,User文件夹,并加入了相关文件,最后在keil工程的目标中建立的组Core,Fwlib,Startup,User并不是一个意思,只是名字相同而已,最后还需要手动添加文件到这些组中。

    文章来源地址https://www.toymoban.com/news/detail-787010.html

到了这里,关于keil构建STM32工程并使用proteus仿真led点灯实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Stm32f103c8t6(proteus仿真)学习——1.点亮LED流水灯

    软件准备:keil uVsion 5 和 proteus 8.15 打开proteus8.15 - 新建项目 - 改名 - 一直next 鼠标右键 - 放置 - 元件 - From Libraries 搜索Stm32 - 选择stm32f103c8 画出点亮一个LED灯的原理图 提示,各元器件搜索: 主控芯片:stm32 电阻:res LED灯:led 鼠标右键 - 放置 - 元件 - From Libraries 地和VCC 在左侧

    2024年02月08日
    浏览(59)
  • STM32——LED内容补充(寄存器点灯及反转的原理)

    本篇文章使用的是STM32F103xC系列的芯片,四个led灯在PE2,PE3,PE4,PE5上连接 1.开时钟 2.配置IO口 (1)清零指定寄存器位 (2)设置模式为推挽输出模式(led灯低电平有效) 3.设置开关灯 4.宏定义灯的反转 开时钟 1.先看时钟树,找到PE总线在APB2时钟 2.我们先来打开对应芯片的参考手

    2024年02月14日
    浏览(35)
  • stm32 使用keil无实物(软件)仿真,虚拟串口通讯

    准备 1.keil 2.vspd虚拟串口 3.sscom串口助手 4.CubeMX 设置好ini文件和程序后,编译前虚拟串口是关闭的  编译完成后,串口显示打开,说明keil使用了vspd的串口。  然后就是修改程序,接收和发送数据。 无硬件仿真,有些定时器和其他一些配置通过 CubeMX 进行配置,再把配置文件给

    2024年02月12日
    浏览(67)
  • 使用Git管理keil Stm32工程

    在软件开发领域,版本控制是非常重要的一环。它能够让我们追踪代码的变化、合作开发、管理不同的版本以及回滚到之前的状态。Git 是一个流行的分布式版本控制系统,本文将向你介绍如何使用 Git 来管理你的代码(以keil工程为例)。 一、Git Bush的配置 在使用git之前,我

    2024年02月04日
    浏览(57)
  • 使用Proteus 8.9仿真STM32F103流水灯实验

    STM32流水灯程序非常简单,在我的实验中使用GPIOC的引脚连接流水灯。主要程序如下: LED初始化:led.h  led.c test.c文件,main主函数:  工程目录如下,记得包含头文件。工程链接在文末。  编译生成.hex文件即可,接下来绘制仿真电路。 打开Proteus 点击新建工程。 我将工程保存

    2024年02月04日
    浏览(67)
  • 使用STM32和C51实现LED闪烁(仿真+程序)

    1、新建程序(如下图) 先点击project,在单击new uvision project。 2.命名文件 3.生成main文件 (右键source group再点击Add new item…) 点击c File (.c) 4.在main.c项目中输入以下代码 5.生成 .hex 文件 魔术棒- Output - 勾选Create HEX File - ok 1.上传.hex文件到proteus 双击芯片在program file 中选择刚刚

    2024年02月04日
    浏览(40)
  • 【STM32】STM32CubeMX教程一--基本使用(新建工程点亮LED灯)

    前言 在配置好CubeMX之后,就是新建工程的开始了,那么首先我们需要一些准备,本片博客我们会很详细的介绍STM32CubeMX的基本使用和如何创建一个新的工程并且点亮LED灯 在新建工程时,我们分为了具体流程1~7,如果您不想看每部分的讲解,直接按照流程操作即可,5分钟即可

    2024年02月09日
    浏览(50)
  • Proteus使用STM32F103系列芯片仿真ADC电压总是为0问题解答

    STM32F103芯片有一组ADC参考电压端口  对应到Proteus中,发现原理图上并没有但是在“配置供电网”中存在 可以看出,VSSA与VDDA同为3.3V,这就导致采集到的电压没有0电位参考,所以需要将 VSSA 转移到 GND 组   此时再允许正确的ADC程序就可以采集到正确的电压了      

    2024年02月13日
    浏览(49)
  • stm32开关控制led灯泡(附Proteus电路图)

     说明:我的灯泡工作电压2V,电流设置为10um,注意了不是10毫安时微安啊,要不然电流太小亮不起来的。 2:我用的开关不是按钮button而是switch, 3:PB0,PB1默认都是低电平,采用了PULLDOWN模式,如果设置为其他模式就会一直亮。 4 这里采用了while();这样的循环,保证了引脚位置的

    2024年02月11日
    浏览(42)
  • 【正点原子STM32】STM32初体验(Keil MDK工具下载使用、DAP仿真器、MDK上配置DAP、Debug)

    一、MDK5编译例程 二、串口下载程序 2.1、串口下载程序须知 2.2、串口下载硬件连接 2.3、配置下载工具 (ATK-XISP.exe) 2.4、STM32启动模式(M3和M4) 三、DAP下载程序 3.1、DAP下载硬件连接 3.2、在MDK上配置DAP 不同开发板的下载算法有所不同 Build构建 F7、Download下载 F8 四、DAP调试程序 4.

    2024年02月20日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包