基于Proteus无实物STM32入门自学教程(二)--LED流水灯

本教程面向新手,前期没有用到stm32的内部库,源程序尽量使用单文件。方便从51直接转过来的同学有个适应期。proteus仿真stm32总所周知没有51仿真的那么完美。笔者在51年代进行仿真时基本与实物电路一样,程序一致,切换到实物时完美复刻。无奈可能是stm32太复杂太新的缘故?致使很多同学在使用proteus仿真stm32时候出现莫名其妙的故障被劝退。笔者潜心研究proteus的各种bug,终于找到不出毛病的各种任务的仿真电路奉献给大家,希望大家多多支持。

一、Proteus仿真图

本次带来的为第二个自学教程LED流水灯,代码在原来的基础上进行一定拓展。在展示代码前,先看仿真效果。

二、MDK代码

第二讲教程在第一讲的基础上,正常的逻辑思维会了点亮一个led之后,点亮四个led只是简单的复制过程。所以在这里不多讲了,但是给大家拓展另外一种不常用的方法给深入的同学看看。

		temp=0x0100;
		for(i=0;i<4;i++)
		{
			GPIO_Write(GPIOB,~temp);
//			GPIO_SetBits(GPIOB,0x0ffff);
//			GPIO_ResetBits(GPIOB,temp);
			Delay(100);
			temp=temp<<1;
		}

//以下分别使用两种形式使用GPIO_SetBits和GPIO_ResetBits函数。
//		GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_8);
//		Delay(100);
//		GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_9);
//		Delay(100);
//		GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_10);
//		Delay(100);
//		GPIO_SetBits(GPIOB,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_11);
//		Delay(100);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_8); 				
//		GPIO_SetBits(GPIOB,GPIO_Pin_9);
//		GPIO_SetBits(GPIOB,GPIO_Pin_10);
//		GPIO_SetBits(GPIOB,GPIO_Pin_11);
//		Delay(100);										
//		GPIO_SetBits(GPIOB,GPIO_Pin_8);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_9);
//		GPIO_SetBits(GPIOB,GPIO_Pin_10);
//		GPIO_SetBits(GPIOB,GPIO_Pin_11);
//		Delay(100);
//		GPIO_SetBits(GPIOB,GPIO_Pin_8);
//		GPIO_SetBits(GPIOB,GPIO_Pin_9);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_10);
//		GPIO_SetBits(GPIOB,GPIO_Pin_11);
//		Delay(100);
//		GPIO_SetBits(GPIOB,GPIO_Pin_8);
//		GPIO_SetBits(GPIOB,GPIO_Pin_9);
//		GPIO_SetBits(GPIOB,GPIO_Pin_10);
//		GPIO_ResetBits(GPIOB,GPIO_Pin_11);
//		Delay(100);

注释掉的代码与第一讲一样,只不过在使用多个IO的时候可以用“|”命令将各个引脚一起写出来,代码会看着好看一些。

另外,例程中实际的使用代码是引用以下函数,类似51单片机的操作。

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  
  GPIOx->ODR = PortVal;

}

举例:GPIO_Write(GPIOB,0x0100)   //使PB8为高电平,可以一次给整个IO赋值。

三、仿真效果和源代码资源

仿真资源包含proteus仿真文件和keil源代码,下载的同学可以直接运行proteus观察试验效果。

基于Proteus无实物零基础STM32入门自学教程(二)--LED流水灯-单片机文档类资源-CSDN下载

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

永远都是新手

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

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

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

打赏作者

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

抵扣说明:

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

余额充值