本教程面向新手,前期没有用到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观察试验效果。