通过库函数和宏定义的方法完整初始化配置和输入输出的读写操作
工程文件的初始化
GPIO_InitTypeDef GPIO_InitStruct;
__RCC_GPIOA_CLK_ENABLE(); // 使能GPIO的配置时钟
__RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.IT = GPIO_IT_FALLING;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pins = KEY_GPIO_PINS;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = 0xFF00;
GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
//配置中断滤波为LSI,脉冲宽度小于LSI的则不会触发中断
GPIO_ConfigFilter(CW_GPIOA, bv1 | bv2, GPIO_FLTCLK_LSI);
PB09_SETHIGH();
//等待PA01所在的端口为低后才进入DEEPSLEEP,以防止芯片被锁死(不能再进行调试)
while (PA01_GETVALUE());
GPIO_HighByte_Write(CW_GPIOB, 0); //从高8bit输出唤醒次数
//清除PA01中断标志并使能NVIC //相关程序在中断服务GPIOA_IRQHandler中进行处理
GPIOA_INTFLAG_CLR(bv1 | bv2);
NVIC_EnableIRQ(GPIOA_IRQn);
tmp8 = 0x00;
响应代码
SCB->SCR = 0x04;
__WFI();
tmp8++;
GPIO_HighByte_Write(CW_GPIOB, tmp8); //从高8bit输出唤醒次数
这里就是看到两个LED为二进制计数。
|