通过库函数和宏定义的方法完整初始化配置和输入输出的读写操作
工程文件的初始化
- 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为二进制计数。
|