STM32 基于正电原子开发板,改换芯片为STM32F103R6,Proteus仿真的一些问题

最近在学STM32,网上收集了一些信息,最后用正点原子的开发板来学习。

MDK的配置请参考原子哥的资料,我主要的学习方法是参考原子哥的开发板与实验案例,改换不一样的芯片,也要做出的一样的效果。但在最基础的入门就遇到了不少问题。

入门的流水灯发现更改芯片后,用原子哥的程序在Proteus仿真过程中,LED灯会非常快速的闪炼,我原以为可能是原子哥用的是外部晶振,而我是用HIS导致的,但用了外部晶振后,结果还是一样。最后我自己写了一个延迟函数,就可以正常点亮LED,而且延迟也正常。

下图是无外部晶振LED快速闪烁的图片
上图是无外部晶振LED快速闪烁的图片
下图是带外部晶振LED快速闪烁的图片
带外部晶振
Main.c

#include "led.h"
#include "delay.h"
#include "sys.h"

/* 这个是我自己写的延迟函数
void Delay(u32 t)            //延时函数
{
    u16 i;
    while(t--)
    for(i=0;i<1000;i++);
}
*/

int main(void)
{
	delay_init(); //延时函数初始化
	LED_Init(); //初始化与 LED 连接的硬件接口
	while(1)
		{ 
			LED0=0;
			LED1=1;
			//Delay(500); //调自己写的延迟函数
			delay_ms(500); //延时 500ms
			LED0=1;
			LED1=0;
			//Delay(500); //调自己写的延迟函数
			delay_ms(500);			//延时 500ms
		}
}

当用改用自己的延迟函数时个LED可以正常灯亮

LED.c

#include "led.h"


void LED_Init(void)
{
 
	GPIO_InitTypeDef  GPIO_InitStructure;
 	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能 PC端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //LED0-->PC.0 LED1-->PC.1端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz
	GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化 GPIOC.0 GPIOC.1
	GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1); 
}
 

下面是改用自己的延迟函数可以正常点亮LED,延迟也正常。
在这里插入图片描述
在这里插入图片描述
现在问题是为什么调用正点原子的延迟函数不能正常工作呢?

请各位大神赐教!!!

猜你喜欢

转载自blog.csdn.net/jasneik/article/details/86592601