第一课--EFM32GG11系列--点亮LED灯
一、从参考手册获取GPIO使用方法
从芯片外设参考手册知道,要用GPIO引脚,需要使能CMU_HFBUSCLKEN0中的GPIO使能位,如下图1和图2所示,
图1
图2
二、LED接GPIO引脚硬件原理图
下图3是两颗LED灯所接的GPIO引脚,LED0G--PH11,LED1G--PH14,
图3
三、把引脚设置为推挽输出
四、GPIO推挽输出高低电平切换保持状态
五、程序实现
实现功能:LED0G和LED1G以1s为周期不断交替闪烁。
程序如下所示,
int main(void)
{
/*初始化芯片*/
CHIP_Init();
/*设置系统嘀嗒定时器为1s*/
if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000))
{
while (1) ;
}
/*使能LED GPIO的时钟--位带操作*/
//BUS_RegBitWrite(&CMU->HFBUSCLKEN0, 5, true);
uint32_t aliasAddr = BITBAND_PER_BASE + (((uint32_t)&CMU->HFBUSCLKEN0 - PER_MEM_BASE) * (uint32_t) 32) + (5 * (uint32_t) 4);
*(volatile uint32_t *)aliasAddr = (uint32_t)true;
/*把GPIO设置为推挽输出*/
//GPIO_PinModeSet(gpioPortH, GPIO_PIN_11, gpioModePushPull, 0);
GPIO->P[gpioPortH].MODEH = (GPIO->P[gpioPortH].MODEH & ~(0xFu << ((GPIO_PIN_11 - 8) * 4))) | (gpioModePushPull << ((GPIO_PIN_11 - 8) * 4));
//GPIO_PinModeSet(gpioPortH, 14, gpioModePushPull, 0);
GPIO->P[gpioPortH].MODEH = (GPIO->P[gpioPortH].MODEH & ~(0xFu << ((GPIO_PIN_14 - 8) * 4))) | (gpioModePushPull << ((GPIO_PIN_14 - 8) * 4));
/*把LED0G设置为高低电平切换保持*/
GPIO->P[gpioPortH].DOUTTGL = 1 << GPIO_PIN_11;
/* Infinite blink loop */
while (1)
{
Delay(1000); //延时1s
GPIO->P[gpioPortH].DOUTTGL = 1 << GPIO_PIN_11; // 把LED0G设置为高低电平切换保持
GPIO->P[gpioPortH].DOUTTGL = 1 << GPIO_PIN_14; //把LED1G设置为高低电平切换保持
}
}
总结
以上是生活随笔为你收集整理的第一课--EFM32GG11系列--点亮LED灯的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 单片机编程之联合体(union)的妙用
- 下一篇: 全套CRC校验的算法