//*****************************************************************************
// 基础练习1.1: 软件延时实现LED闪烁
//
// 硬件描述:
// LED2(蓝色) --PF0
// LED3(绿色) --PA4
// LED4(红色) --PD6 --使用这个引脚
//
// 注意事项:
// 引脚PF0和PD7比较特殊,默认是保护的。要重新编程操作的话,需要先解锁
// 小技巧:
// 通过SysConfig工具进行引脚的初始配置,就不用考虑这些因素了.
// SysConfig的使用可参考链接: https://www.bilibili.com/read/cv6258251
//
// 过程描述:
// 把引脚配置成GPIO,输出。 通过输出高电平和低电平来控制LED的亮和灭。
// 亮/灭的速度如果很快,人眼就识别不出来了.所以要放慢速度,才有闪烁的效果.
//
// 思考:
// 1. 蓝色LED默认是亮的,怎么办? --初始化相关的GPIO
// 2. Launchpad上的三色LED也是亮的,怎么办? --初始化相关的GPIO
//
//*****************************************************************************
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_gpio.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
void main(void)
{
//0-2的32次方-1, 4294967295
uint32_t ui32_delay;
//使能PD外设的时钟
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
//等待外设Ready
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOD))
{
}
//将PD6配置成GPIO,方向为输出
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_6);
//可能出现的错误:
//(1) 没有加while(1),程序语句按顺序执行1遍就结束了.
//(2) 不加延时,单步运行,全速运行
//(3) 要在两个地方加软件延时,点亮LED后延时,熄灭LED后也要加延时;
// +-----+ +------+
// | | | |
// ---+ +------+ +---------
//
while(1)
{
//PD6输出低电平,LED亮
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0x00);
for(ui32_delay=0;ui32_delay<300000;ui32_delay++);
//PD6输出高电平,LED灭
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0xFF);
//此处要加延时,延时越长,表示亮的时间越久
for(ui32_delay=0;ui32_delay<300000;ui32_delay++);
}
}