/********************************************************/ // CPU需要:STM32F103--RAM内存不小于64K Flash内存不小于128K // 本代码已在STM32F103RDT6、VET6测试通过 // 编辑日期:20150909 // editor by 小小晟 // 网店:shop182385147.taobao.com /********************************************************/ #include "PLC_IO.h" #include "stm32f10x.h" #include #include "absacc.h" #include "PLC_Dialogue.h" extern u8 power_down; //断电检测程序 extern bit_byte PLC_16BIT[12100]; u8 X_DIY=10; //指令修改滤波时间X000-X007 #define D8020 PLC_16BIT[0x0714].bytes //滤波时间X010以后的 //====================================================================================================== // 函数名称: void PLC_X_config(void) // 功能描述: PLC_运行状态IO初始化 // 输 入: void // 输 出: void // 全局变量: // 调用模块: // 作 者: 小小晟 // 日 期: 2014年6月13日 // 备 注: //------------------------------------------------------------------------------------------------------ // 修改人: // 日 期: // 备 注: //======================================================================================================= void PLC_EXTI15_10_config(void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource12|GPIO_PinSource11); EXTI_InitStructure.EXTI_Line=EXTI_Line12; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line=EXTI_Line11; EXTI_Init(&EXTI_InitStructure); } //====================================================================================================== // 函数名称: void PLC_X_config(void) // 功能描述: PLC_运行状态IO初始化 // 输 入: void // 输 出: void // 全局变量: // 调用模块: // 作 者: 小小晟 // 日 期: 2014年6月13日 // 备 注: //------------------------------------------------------------------------------------------------------ // 修改人: // 日 期: // 备 注: //======================================================================================================= void PLC_EXTI9_5_config(void) { EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource9); EXTI_InitStructure.EXTI_Line=EXTI_Line9; EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd=ENABLE; EXTI_Init(&EXTI_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource8); EXTI_InitStructure.EXTI_Line=EXTI_Line8; EXTI_Init(&EXTI_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource7); EXTI_InitStructure.EXTI_Line=EXTI_Line7; EXTI_Init(&EXTI_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6); EXTI_InitStructure.EXTI_Line=EXTI_Line6; EXTI_Init(&EXTI_InitStructure); } //====================================================================================================== // 函数名称: void PLC_X_config(void) // 功能描述: PLC_运行状态IO初始化 // 输 入: void // 输 出: void // 全局变量: // 调用模块: // 作 者: 小小晟 // 日 期: 2014年6月13日 // 备 注: //------------------------------------------------------------------------------------------------------ // 修改人: // 日 期: // 备 注: //======================================================================================================= void PLC_Mode_config(void) { GPIO_InitTypeDef GPIO_InitStructure; //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);陈凡注释 //define EEPROM // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; //EEPROM // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // GPIO_Init(GPIOB,&GPIO_InitStructure); //define OTHER IO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //SHUTDOWN GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //RUN/STOP_SWITCH GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; //RUN_LED ERR_LED GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7 |GPIO_Pin_8; //文本显示 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ; //PLC_485通讯 // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO_Init(GPIOD, &GPIO_InitStructure); } //====================================================================================================== // 函数名称: void PLC_X_config(void) // 功能描述: PLC_X_输入初始化 // 输 入: void // 输 出: void // 全局变量: // 调用模块: // 作 者: 小小晟 // 日 期: 2014年6月13日 // 备 注: //------------------------------------------------------------------------------------------------------ // 修改人: // 日 期: // 备 注: //======================================================================================================= void PLC_X_config(void) { GPIO_InitTypeDef GPIO_InitStructure; //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);陈凡注释 //define X00-X14 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC,&GPIO_InitStructure); } //====================================================================================================== // 函数名称: PLC_Y_config(void) // 功能描述: PLC_Y_输出初始化 // 输 入: void // 输 出: void // 全局变量: // 调用模块: // 作 者: 小小晟 // 日 期: 2014年6月13日 // 备 注: //------------------------------------------------------------------------------------------------------ // 修改人: // 日 期: // 备 注: //======================================================================================================= void PLC_Y_config(void) { GPIO_InitTypeDef GPIO_InitStructure; //GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); 陈凡注释 //define Y00-Y15 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); } void X_filter(void) //每 1ms 需调用一次,用于X滤波,暂定为20MS { static signed char x_buffer[33]; //暂定刷新16个X (X00) ? (x_buffer[0]=0,PLC_16BIT[64].bits.bit0=0) : (x_buffer[0]0)power_down--;} } //刷新输出,一个地址为32个点 void PLC_IO_Refresh(void) { // Y00=~PLC_16BIT[80].bits.bit0; // Y01=~PLC_16BIT[80].bits.bit1; // Y02=~PLC_16BIT[80].bits.bit2; // Y03=~PLC_16BIT[80].bits.bit3; // Y04=~PLC_16BIT[80].bits.bit4; // Y05=~PLC_16BIT[80].bits.bit5; // Y06=~PLC_16BIT[80].bits.bit6; // Y07=~PLC_16BIT[80].bits.bit7; // Y10=~PLC_16BIT[80].bits.bit10; // Y11=~PLC_16BIT[80].bits.bit11; // Y12=~PLC_16BIT[80].bits.bit12; // Y13=~PLC_16BIT[80].bits.bit13; // Y14=~PLC_16BIT[80].bits.bit14; // Y15=~PLC_16BIT[80].bits.bit15; // Y16=~PLC_16BIT[80].bits.bit16; // Y17=~PLC_16BIT[80].bits.bit17; // // Y20=~PLC_16BIT[81].bits.bit0; // Y21=~PLC_16BIT[81].bits.bit1; // Y22=~PLC_16BIT[81].bits.bit2; // Y23=~PLC_16BIT[81].bits.bit3; // Y24=~PLC_16BIT[81].bits.bit4; // Y25=~PLC_16BIT[81].bits.bit5; // Y26=~PLC_16BIT[81].bits.bit6; // Y27=~PLC_16BIT[81].bits.bit7; // Y30=~PLC_16BIT[81].bits.bit10; // Y31=~PLC_16BIT[81].bits.bit11; // Y32=~PLC_16BIT[81].bits.bit12; // Y33=~PLC_16BIT[81].bits.bit13; // Y34=~PLC_16BIT[81].bits.bit14; // Y35=~PLC_16BIT[81].bits.bit15; // Y36=~PLC_16BIT[81].bits.bit16; // Y37=~PLC_16BIT[81].bits.bit17; Y00=PLC_16BIT[80].bits.bit0; Y01=PLC_16BIT[80].bits.bit1; Y02=PLC_16BIT[80].bits.bit2; Y03=PLC_16BIT[80].bits.bit3; Y04=PLC_16BIT[80].bits.bit4; Y05=PLC_16BIT[80].bits.bit5; Y06=PLC_16BIT[80].bits.bit6; Y07=PLC_16BIT[80].bits.bit7; Y10=PLC_16BIT[80].bits.bit10; Y11=PLC_16BIT[80].bits.bit11; Y12=PLC_16BIT[80].bits.bit12; Y13=PLC_16BIT[80].bits.bit13; Y14=PLC_16BIT[80].bits.bit14; Y15=PLC_16BIT[80].bits.bit15; // Y16=PLC_16BIT[80].bits.bit16; // Y17=PLC_16BIT[80].bits.bit17; // Y20=PLC_16BIT[81].bits.bit0; // Y21=PLC_16BIT[81].bits.bit1; // Y22=PLC_16BIT[81].bits.bit2; // Y23=PLC_16BIT[81].bits.bit3; // Y24=PLC_16BIT[81].bits.bit4; // Y25=PLC_16BIT[81].bits.bit5; // Y26=PLC_16BIT[81].bits.bit6; // Y27=PLC_16BIT[81].bits.bit7; // Y30=PLC_16BIT[81].bits.bit10; // Y31=PLC_16BIT[81].bits.bit11; // Y32=PLC_16BIT[81].bits.bit12; // Y33=PLC_16BIT[81].bits.bit13; // Y34=PLC_16BIT[81].bits.bit14; // Y35=PLC_16BIT[81].bits.bit15; // Y36=PLC_16BIT[81].bits.bit16; // Y37=PLC_16BIT[81].bits.bit17; } void PLC_IO_config(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);//RCC_APB2Periph_AFIO Err_Lamp_OFF; //ADD PLC_Y_config(); PLC_IO_Refresh(); //刷新Y输出() PLC_X_config(); PLC_Mode_config(); // PLC_EXTI15_10_config(); // 小小晟,20160929屏蔽 // PLC_EXTI9_5_config(); // 小小晟,20160929屏蔽 }