从blink例程起步是学习和掌握编程的最好起点,该例程的程序如下: /************************************************************************** Simple LED Blink Demo *************************************************************************/ #include #include #include"em_device.h" #include"em_chip.h" #include"em_cmu.h" #include"em_emu.h" #include"bsp.h" vola tile uint32_t msTicks; /* counts 1mstimeTicks */ voidDelay(uint32_t dlyTicks); /************************************************************************** SysTick_Handler *Interrupt Service Routine for system tick counter **************************************************************************/ voidSysTick_Handler(void) { msTicks++; /* incrementcounter necessary in Delay()*/ } /************************************************************************** Delays number of msTick Systicks (typically1 ms) dlyTicks Number of ticks to delay *************************************************************************/ voidDelay(uint32_tdlyTicks) { uint32_tcurTicks; curTicks = msTicks; while((msTicks - curTicks) < dlyTicks) ; } /************************************************************************** Mainfunction **************************************************************************/ int main(void) { EMU_DCDCInit_TypeDefdcdcInit = EMU_DCDCINIT_STK_DEFAULT; /*Chip errata */ CHIP_Init(); EMU_DCDCInit(&dcdcInit); /*Setup SysTick Timer for 1 msec interrupts */ if(SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) { while(1) ; } /*Initialize LED driver */ BSP_LedsInit(); //Turn on LED1 BSP_LedToggle(1); /*Infinite blink loop */ while(true) { Delay(1000); //Toggle LEDs BSP_LedToggle(0); BSP_LedToggle(1); } } 通过对该程序解读,我们能有哪些收获呢? 1)这是一个LED灯闪烁的程序,之所以能闪烁是靠的BSP_LedToggle()函数; 2)有2个LED灯参与其中,并通过编号0和1来调用; 3) 2个LED灯是错开进行闪烁的,因为在初始化之后一个LED先执行一次BSP_LedToggle()函数; 4)闪烁间隔是通过延时函数Delay()来控制的,延时长短可由参数来调节; 5)有了毫秒级的延时函数,就可以尝试产生微秒级的延时函数,因为毫秒级延时是通过设置SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000来产生的,可将1000该为1000000来看一看; 6)LED的初始化函数为BSP_LedsInit(),是通过它来使相关的引脚定义为输出功能,我们可以学习输入功能的定义; 7)查看原理图可弄清2个LED所占用的引脚,我们也可以仿照着来使用其他的引脚。 LED0---PD2 LED1---PC2 8)通过延伸学习,我们还可以掌握如何控制高低电平的输出,例如以语句 BSP_LedSet(0); 来控制LED0输出高电平,而以语句 BSP_LedClear(1); 来控制LED1输出低电平。 读一个程序能有这么多的收获,难道有什么不值得的吗? 这种收获我们可以用在OLED屏的驱动及DHT22温湿度传感器的驱动中。
|