proteus仿真stm32——流水灯(Cube MX+Keil5+proteus操作详解)

前言

之前都是用HAL库+实际单片机进行调试,网上proteus教程多基于51单片机且并非HAL库,本文便基于proteus仿真stm32——流水灯,利用Cube MX+Keil5+proteus来实现8个led依次交替闪烁,并且总结自己踩过的大坑,如有问题请多多指教。

Cube MX配置

芯片选择

proteus能够选择的stm32单片机有限,此次试验采用F103R6进行仿真
在这里插入图片描述

SYS、RCC配置

在这里插入图片描述

在这里插入图片描述

GPIO

选择PC0~PC7共8个引脚,且输出模式均设置为高电平,其他不用修改
在这里插入图片描述

在这里插入图片描述

Clock Configuration

在这里插入图片描述

其他

在这里插入图片描述
基本配置完成后即可生成代码(generate code)

Keil5 代码编写

由于实现工程的代码体量并不大,(相关模式配置及初始化均之前在Cube Mx 中已经完成)以下代码全部写在main.c中即可

宏定义待设置端口位

在这里插入图片描述

数组初始化

在这里插入图片描述

led灯控制

/* USER CODE BEGIN PFP */
void led_control(uint8_t led_number)//控制led闪烁的函数,传入参数为所对应的led编号
{
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);//将所有led灯都熄灭
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN[led_number],GPIO_PIN_RESET);//对应的led灯点亮
}

在这里插入图片描述

主函数

  /* USER CODE BEGIN 2 */
	int led_number=0;//定义代表led编号的变量初始化为0
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */
		led_control(led_number);//调用控制对应led灯点亮的函数
		HAL_Delay(200);//延时200ms
		led_number++;//led编号加1
		if(led_number==8)//当编号为8时完成一次点亮,将其置0,继续重新依次点亮led
			led_number=0;
  }
  /* USER CODE END 3 */

也可以利用标志位flag实现另外一种流水灯的效果,代码如下,感兴趣或许可以试试
在这里插入图片描述

proteus仿真

在这里插入图片描述

详细步骤可以参考:
proteus创建工程、芯片选择、元件配置操作方法
代码不同,不过proteus配置还是完全一样的方法。

建议一步步按步骤来,常见踩坑
第四步:设置晶振8MHZ一定不能省略
led灯连线时注意不能接反
否则到时候没有现象,程序也没有报错,很难找到原因,这时候可能因为自己不熟悉proteus的操作而在某些方面的配置没有谨慎小心

总结

proteus软件原本是主要用于绘制PCB板,辅以仿真功能,如今仿真功能愈加常见。所以用proteus仿真不一定要像实际单片机一样找到其所有引脚对应的原理图才能编写程序,相当于你自己设计其内部电路,用于实现底层设计的正确性,应该熟悉相关基本操作并且注意细节

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drawing Ting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值