/* ********************************************************************************************************* * IAR Development Kits * on the * * M451 * * Filename : gpio_vcc.c * Version : V1.00 * Programmer(s) : Qian Xianghong ********************************************************************************************************* */ /* ********************************************************************************************************* * INCLUDE FILES ********************************************************************************************************* */ #include "includes.h" volatile uint8_t LCD_Disabled = 0; void Vcc_Init() { LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOE); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOH); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOD); // 设置空闲引脚 GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; // PA.13~14 is JTAG-SW GPIO_InitStruct.Pin = LL_GPIO_PIN_4 |LL_GPIO_PIN_8|LL_GPIO_PIN_11; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_2; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); // PC.14~15 is OSC32 GPIO_InitStruct.Pin = LL_GPIO_PIN_4|LL_GPIO_PIN_5 |LL_GPIO_PIN_13; LL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_3 |LL_GPIO_PIN_14; LL_GPIO_Init(GPIOD, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_2 |LL_GPIO_PIN_10; LL_GPIO_Init(GPIOE, &GPIO_InitStruct); // PH.0~1 is OSC_HSE GPIO_InitStruct.Pin = LL_GPIO_PIN_3; LL_GPIO_Init(GPIOH, &GPIO_InitStruct); // 设置输出引脚 GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; GPIO_InitStruct.Pin = LL_GPIO_PIN_12; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_6|LL_GPIO_PIN_7; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_12; LL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_4|LL_GPIO_PIN_11; LL_GPIO_Init(GPIOD, &GPIO_InitStruct); GPIO_InitStruct.Pin = LL_GPIO_PIN_1 |LL_GPIO_PIN_9|LL_GPIO_PIN_11; LL_GPIO_Init(GPIOE, &GPIO_InitStruct); // 设置开关的默认状态 VCC_GSM_OFF(); VCC_GPS_OFF(); VCC_RS485_OFF(); VCC_RF_OFF(); VCC_CC200A_OFF(); VCC_SFLASH_FRAM_ON(); VCC_SENSOR_5V_OFF(); KZ_CHARGE_ENABLE_LOW(); // 上电先关闭电磁阀 KZ_CHARGE_DISABLE_HIGH(); Charge_Pulse_Time = GetDelayTick(1000); KZ_ALARM_OFF(); KZ_LOW_ALARM_OFF(); KZ_LOW_LEVEL_OFF(); KZ_LEVEL_OFF(); } // 禁止引脚输出 void Vcc_Disable() { // 把除了LCD、按键、加速度中断、充电检测、控制开关以外的外设引脚设为模拟输入 LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; // PA.12 is VCC_GSM // PA.13~14 is JTAG-SW GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3 |LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7 |LL_GPIO_PIN_8|LL_GPIO_PIN_9|LL_GPIO_PIN_10|LL_GPIO_PIN_11 |LL_GPIO_PIN_15; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); // PB.6 is KZ_CHARGE_ENABLE // PB.7 is KZ_CHARGE_DISABLE // PB.8~9 is lcd (scl, sda) // PB.12 is accelero-cs // PB.13~15 is accelero-spi GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3 |LL_GPIO_PIN_4|LL_GPIO_PIN_5 |LL_GPIO_PIN_10|LL_GPIO_PIN_11; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); // PC.7~9 is MA-CS // PC.12 is VCC_RS485 // PC.14~15 is OSC32 GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_3 |LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6 |LL_GPIO_PIN_10|LL_GPIO_PIN_11 |LL_GPIO_PIN_13; LL_GPIO_Init(GPIOC, &GPIO_InitStruct); // PD.0 is KZ_LOW_LEVEL // PD.1 is KZ_LEVEL // PD.2 is VCC_BD // PD.4 is VCC_GPS // PD.10 is accelero-int // PD.11 is VCC_RF GPIO_InitStruct.Pin = LL_GPIO_PIN_3 |LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7 |LL_GPIO_PIN_8|LL_GPIO_PIN_9 |LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15; LL_GPIO_Init(GPIOD, &GPIO_InitStruct); // PE.1 is VCC_SENSOR_5V // PE.3~6 is keys // PE.7 is ex-power // PE.8 is leak_in // PE.9 is KZ_ALARM // PE.11 is VCC_SFLASH_FRAM GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_2 |LL_GPIO_PIN_10 |LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15; LL_GPIO_Init(GPIOE, &GPIO_InitStruct); // PB.13~15 is accelero-spi GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15; GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); LL_GPIO_SetOutputPin(GPIOB, LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15); } // 恢复通信引脚输出 void Vcc_Enable() { Console_Init(); SFlash_Init(); FRAM_Init(); DAC7311_Init(); Wakeup_Init(); if(RF_initStatus) RF_Init(); else { // BD_Init(); Slave_Init(); } Sensor_Init(); Accelero_Init(); Sample_Init(); // Sample_ReOpen(); // 休眠唤醒以后需重新执行该函数 Battery_Init(); DTU_Init(); Key_Init(); LCD_Init(); // 恢复外设引脚 VCC_SFLASH_FRAM_ON(); // 控制电流输出开关 DAC7311_Open(); }