最近在学STM32,网上收集了一些信息,最后用正点原子的开发板来学习。
MDK的配置请参考原子哥的资料,我主要的学习方法是参考原子哥的开发板与实验案例,改换不一样的芯片,也要做出的一样的效果。但在最基础的入门就遇到了不少问题。
入门的流水灯发现更改芯片后,用原子哥的程序在Proteus仿真过程中,LED灯会非常快速的闪炼,我原以为可能是原子哥用的是外部晶振,而我是用HIS导致的,但用了外部晶振后,结果还是一样。最后我自己写了一个延迟函数,就可以正常点亮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); //延时 500msLED0=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 口速度为 50MHzGPIO_Init(GPIOC, &GPIO_InitStructure); //初始化 GPIOC.0 GPIOC.1GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);
}
下面是改用自己的延迟函数可以正常点亮LED,延迟也正常。
现在问题是为什么调用正点原子的延迟函数不能正常工作呢?
请各位大神赐教!!!