从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温湿度传感器的驱动中。
|