本帖最后由 jinglixixi 于 2018-11-17 15:00 编辑
前面一直受困于无法更新调试固件,经多次摸索终于搞定了。似乎在Win7专业版上较困难,而在Win7旗舰版上较好使。更新完调试固件,就可以回到原开发环境使用了。 在开发板上板载了三色LED,通过编程可实现3色彩灯效果(见图1),其主程序如下: - int main(void)
- {
- SystemCoreClockUpdate();
- Board_Init();
- Board_LED_Set(0,0);//灭
- Board_LED_Set(1,0);//灭
- Board_LED_Set(2,0);//灭
- while(1)
- {
- Board_LED_Set(0,1);//亮
- delay(10000);
- Board_LED_Set(0,0);//灭
- delay(10000);
- Board_LED_Set(1,1);//亮
- delay(10000);
- Board_LED_Set(1,0);//灭
- delay(10000);
- Board_LED_Set(2,1);//亮
- delay(10000);
- Board_LED_Set(2,0);//灭
- delay(10000);
- }
- return0;
- }
复制代码
图1 彩灯效果
那么为什么单用一个Board_LED_Set()函数就可以轻松地实现呢? 原来在board.c中已定义好了函数Board_LED_Init()和Board_LED_Set(),而对函数Board_LED_Init()的调用是在函数Board_Init()中。 Board_Init函数的内容为: void Board_Init(void) { /* Sets upDEBUG UART */ DEBUGINIT(); /* InitializeGPIO */ Chip_GPIO_Init(LPC_GPIO); /* InitializeLEDs */ Board_LED_Init(); } 那函数Board_LED_Init()和Board_LED_Set()有是如何写的呢?其内容如下: static void Board_LED_Init(void) { int idx; for (idx = 0;idx < MAXLEDS; idx++) { /* Set theGPIO as output with initial state off (high) */ Chip_GPIO_SetPinDIROutput(LPC_GPIO,ledports[idx], ledpins[idx]); Chip_GPIO_SetPinState(LPC_GPIO,ledports[idx], ledpins[idx], true); } }
/* Sets the state of a board LED to on or off */ void Board_LED_Set(uint8_t LEDNumber, bool On) { if (LEDNumber< MAXLEDS) { /* Togglestate, low is on, high is off */ Chip_GPIO_SetPinState(LPC_GPIO,ledports[LEDNumber], ledpins[LEDNumber],!On); } }
结合彩灯原理图和相关的定义就可以明白,它其实就是将相应的引脚设为输出口,然后再控制其输出高低电平而已。 #define MAXLEDS 3 static const uint8_t ledports[MAXLEDS] = {2, 2, 2}; static const uint8_t ledpins[MAXLEDS] = {17, 16, 18}; 图2 彩灯原理图
其实我们完全可以用以下的语句来实现,即: Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 16); Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 17); Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 18);
Chip_GPIO_SetPinState(LPC_GPIO, 2, 16, 0);//绿亮 Chip_GPIO_SetPinState(LPC_GPIO, 2, 16, 1);//绿灭 Chip_GPIO_SetPinState(LPC_GPIO, 2, 17, 0);//红亮 Chip_GPIO_SetPinState(LPC_GPIO, 2, 17, 1);//红灭 Chip_GPIO_SetPinState(LPC_GPIO, 2, 18, 0);//蓝亮 Chip_GPIO_SetPinState(LPC_GPIO,2, 18, 1);//蓝灭
|