1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bg4uvr-ds3231

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
power.c 2.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
bg4uvr Отправлено 5 лет назад 375fac1
#include "power.h"
//#include "led.h"
//1Hz信号端口及引脚号
#define SIG_1Hz_PORT GPIOB
#define SIG_1Hz_PIN GPIO_PIN_2
#define SIG_1Hz_EXTI_PORT EXTI_PORT_GPIOB
//KEY1端口及引脚号
#define KEY1_PORT GPIOB
#define KEY1_PIN GPIO_PIN_3
#define KEY1_EXTI_PORT EXTI_PORT_GPIOB
//KEY2端口及引脚号
#define KEY2_PORT GPIOD
#define KEY2_PIN GPIO_PIN_3
#define KEY2_EXTI_PORT EXTI_PORT_GPIOD
bool halfsec; //半秒标志
bool key_flag; //按键标志
//初始化电源管理
void power_init(void)
{
//LED_Init(LED3); //初始化LED
//设置1Hz信号脚为输入,开上拉,并开启中断
GPIO_Init(SIG_1Hz_PORT, SIG_1Hz_PIN, GPIO_MODE_IN_PU_IT);
//设置1Hz中断为上升下降沿触发
EXTI_SetExtIntSensitivity(SIG_1Hz_EXTI_PORT, EXTI_SENSITIVITY_RISE_FALL);
//使能所有中断
enableInterrupts();
}
//进入停机模式
void power_halt(void)
{
//保存端口方向状态
uint8_t
DDRa=GPIOA->DDR,
DDRb=GPIOB->DDR,
DDRc=GPIOC->DDR,
DDRd=GPIOD->DDR,
DDRe=GPIOE->DDR;
//除无关端口外,全部设置为输入
GPIOA->DDR=GPIO_PIN_1|GPIO_PIN_2; //晶振脚设置为输出并拉低,以降低功耗
GPIOB->DDR=0;
GPIOC->DDR=GPIO_PIN_5|GPIO_PIN_6; //LED的VCC和GND
GPIOD->DDR=00;//GPIO_PIN_2; //LED3
GPIOE->DDR=0;
//更改两个按键的端口为下沿中断模式,开启上拉
GPIO_Init(KEY1_PORT, KEY1_PIN, GPIO_MODE_IN_PU_IT);
GPIO_Init(KEY2_PORT, KEY2_PIN, GPIO_MODE_IN_PU_IT);
EXTI_SetExtIntSensitivity(KEY1_EXTI_PORT, EXTI_SENSITIVITY_FALL_ONLY);
EXTI_SetExtIntSensitivity(KEY2_EXTI_PORT, EXTI_SENSITIVITY_FALL_ONLY);
//关灯待机
//LED_Off(LED3);
halt();
//LED_On(LED3);
//唤醒恢复端口方向(此时自动关闭了后设置的按键中断)
GPIOA->DDR=DDRa;
GPIOB->DDR=DDRb;
GPIOC->DDR=DDRc;
GPIOD->DDR=DDRd;
GPIOE->DDR=DDRe;
}
//B端口外部中断
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
{
//读取半秒状态
halfsec = (bool)GPIO_ReadInputPin(SIG_1Hz_PORT,SIG_1Hz_PIN);
//如果按键1为低电位,设置按键标志
if(!(bool)GPIO_ReadInputPin(KEY1_PORT,KEY1_PIN))
{
//关闭按键中断,恢复为普遍输入模式
GPIO_Init(KEY1_PORT,KEY1_PIN, GPIO_MODE_IN_FL_NO_IT);
//设立按键标志
key_flag=TRUE;
}
}
//D端口外部中断
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
//如果按键2为低电位,设置按键标志
if(!(bool)GPIO_ReadInputPin(KEY2_PORT,KEY2_PIN))
{
//关闭按键中断,恢复为普遍输入模式
GPIO_Init(KEY2_PORT,KEY2_PIN, GPIO_MODE_IN_FL_NO_IT);
//设立按键标志
key_flag=TRUE;
}
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/bg4uvr-ds3231.git
git@gitlife.ru:oschina-mirror/bg4uvr-ds3231.git
oschina-mirror
bg4uvr-ds3231
bg4uvr-ds3231
master