最近在學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,延遲也正常。
現在問題是為什么調用正點原子的延遲函數不能正常工作呢?
請各位大神賜教!!!