单片机/MCUwilliam hill官网
直播中

jinglixixi

8年用户 1641经验值
擅长:嵌入式技术 光电显示 接口/总线/驱动 控制/MCU
私信 关注
[文章]

【益登科技代理 Silicon Labs SLSTK3301A开发板试用体验】由LED开始来编程

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

更多回帖

发帖
×
20
完善资料,
赚取积分