STM32cubeIDE+Proteus 8只需两个软件即可进行stm32的仿真与调试

我就不把仿真文件和代码文件放在后面了,直接给有需要的人,还有不喜欢看内容的人

链接:https://pan.baidu.com/s/1cPim96Wg4YSeOjBA7YMDng
提取码:3gsp

1、首先打开Proteus 8它的主界面如下图所示

2、 新建工程并选择保存位置

3、画出单片机的最小系统,如下图所示

4、在此基础上,画出输入输出的引脚连接的物件,如图中的LED和按键开关

5、打开stm32cubeide,并新建stm32工程

6、选择单片机的型号为stm32f103r6 选择LQFP64封装

7、取个名字,点击完成,在弹出的窗口中有Linux的选项中选择No,之后就进行了如下图所示的界面

 8、配置PA4和PA5引脚分别是输出和输入的引脚,如图所示

9、在左边选中RCC,将HSE和LSE配置成如下图所示,注:如果用内部时钟可以不用配置,系统默认使用内部时钟,并且在Proteus中也可以不用画出晶振

 10、同样点击左边的GPIO将两个引脚配置成如下图所示

11、配置外部时钟,如果只用内部时钟可以跳过此步骤

12、 选择多文件系统,更有条理性(可以不用设置)

 13、点击yes后会进入main.c函数的界面

14、在inc和src文件夹中分别新建led.h led.c key.h key.c 四个文件它们的代码如下

led.h:

#ifndef __LED_H
#define __LED_H

#include "gpio.h"

#define LED0(x)	{(x==0)?(HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET)):(HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET));}


#define LED0_T	HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);


void led_init(void);

#endif

led.c

#include "led.h"
void led_init(void)
{
	LED0(0);	//init led0 and led1,close them.
}

key.h

#ifndef __KEY_H
#define __KEY_H

#include"gpio.h"

#define KEY0         HAL_GPIO_ReadPin(KEY0_GPIO_Port, KEY0_Pin)     /* 读取KEY0引脚 */
//#define KEY1         HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)     /* 读取KEY1引脚 */
//#define WKUP        HAL_GPIO_ReadPin(WKUP_GPIO_Port, WKUP_Pin)     /* 读取WKUP引脚 */

#define KEY0_PRES    1      /* KEY0按下  */
//#define KEY1_PRES    2      /* KEY1按下  */
//#define WKUP_PRES    3      /* WKUP按下  */

uint8_t key_scan(uint8_t mode);/* 按键扫描函数 */

#endif

key.c

#include "key.h"
#include "led.h"

//int ret;

/*
 #define KEY0_RET	1
#define KEY1_RET	2
#define KEY2_RET	3

#define KEY_UP		1
#define KEY_DOWN	0
#define	KEY0_VAL	HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);
#define	KEY1_VAL	HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
#define	KEY2_VAL
 */

uint8_t key_scan(uint8_t mode)
{
    static uint8_t key_up = 1;  /* 按键按松开标志 */
    uint8_t keyval = 0;

    if (mode) key_up = 1;   	/* 支持连按 */

    if (key_up && (KEY0 == 0 ))   /* 按键松开标志为1, 且有任意一个按键按下了 */
    {
    	HAL_Delay(10);       		/* 去抖动,后面会换成高精度延时函数! */
        key_up = 0;

        if (KEY0 == 0)
        	keyval = KEY0_PRES;

    }
    else if (KEY0 == 1)  /* 没有任何按键按下, 标记按键松开 */
    {
        key_up = 1;
    }

    return keyval;  /* 返回键值 */
}

main.c文件也只需要修改下面的地方
 


/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "led.h"
#include "key.h"
/* USER CODE END Includes */



  /* USER CODE BEGIN 2 */
  uint8_t key_val;
  led_init();
  /* USER CODE END 2 */



  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  key_val = key_scan(0);
	  if(key_val == KEY0_PRES)
	  {
		  LED0_T;

	  }
//	  LED0_T;
	  HAL_Delay(10);
  }
  /* USER CODE END 3 */
}

15、点击左上角的锤子进行编译,看是否有错误

16、在左边选中该工程右键选最后一个,或者Alt+Enter会弹出一个窗口

17、选择settings在其中勾选生成hex文件,然后再次编译,在debug文件夹中就会生成hex文件了

 18、再次回到Proteus软件双击上面的晶振配置成32.768kHz,双击下面的晶振配置成8MHz

 

19、双击单片机在中间的文件program file中定位到hex文件,如图所示

 20、单击左下角的运行按键,就可以看见单片机在运行了因为配置的引脚初始状态是down所以初始是亮灯的。而输入引脚是up的

单击一下(或长按)按钮可以看见输入引脚变蓝了(down)了,并且在松开按钮后LED灯灭了

说明一下函数key_scan中的参数如果是1则会立即响应。

 再次单击则会点亮灯,从而实现了LED灯的翻转

总结:本篇文章只是一个引子,stm32低端产品的开发其实和51类似都是可以通过仿真来实现的,而且本篇文章只使用了两个软件,对于摸不到头脑的新手来说十分友好。注:若出现VSSA,VDDA的问题请参考本篇文章Proteus仿真错误解决方法:No power supply specified for net 5V in Power Rail Configuration._HALFA博客-CSDN博客_proteus仿真错误

  • 16
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值