actuator/users/Src/gpios.c

162 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "gpios.h"
#include "ds18b20.h"
#include "spi.h"
#include "atcom.h"
uint8_t coil1 = 0,coil2 = 0;
uint8_t u2tx_buf;
uint8_t u3tx_buf[8] = {0x01,0x03,0x00,0x00,0x00,0x04,0x44,0x09};
//温度
short Temp = 0;
bool spi_flag = true;
int wifi_cnt = 0;
uint8_t position_on = 0,position_off = 0,position_esd = 0;
void led_ctrl()
{
if(it_1000ms_flag == 1)
{
it_1000ms_flag = 0;
HAL_GPIO_TogglePin(GPIO_LED_GPIO_Port,GPIO_LED_Pin);
//Temp = ds18b20_get_temp(); //环境温度
//InputReg[19] = Temp;
uart_send(&huart3,u3tx_buf,8);
wifi_cnt++;
if(wifi_cnt == 2)
{
wifi_set();
wifi_cnt = 0;
}
}
}
void digital_ctrl()
{
led_ctrl();
//全开全关ESD控制信号互斥
if(((CoilState[0]>>0)&0x01) && !position_on)
{
CoilState[0] = CoilState[0] & 0xfd;
CoilState[0] = CoilState[0] & 0xfb;
}
if(((CoilState[0]>>1)&0x01) && !position_off)
{
CoilState[0] = CoilState[0] & 0xfe;
CoilState[0] = CoilState[0] & 0xfb;
}
if(((CoilState[0]>>2)&0x01) && !position_esd)
{
CoilState[0] = CoilState[0] & 0xfe;
CoilState[0] = CoilState[0] & 0xfd;
}
position_on = (CoilState[0]>>0)&0x01;
position_off = (CoilState[0]>>1)&0x01;
position_esd = (CoilState[0]>>2)&0x01;
//八位DO输出控制
PE2_DO1((GPIO_PinState)((CoilState[0]>>0)&0x01));
PE3_DO2((GPIO_PinState)((CoilState[0]>>1)&0x01));
PE4_DO3((GPIO_PinState)((CoilState[0]>>2)&0x01));
PE5_DO4((GPIO_PinState)((CoilState[0]>>3)&0x01));
PE6_DO5((GPIO_PinState)((CoilState[0]>>4)&0x01));
PC13_DO6((GPIO_PinState)((CoilState[0]>>5)&0x01));
PC14_DO7((GPIO_PinState)((CoilState[0]>>6)&0x01));
PC15_DO8((GPIO_PinState)((CoilState[0]>>7)&0x01));
coil1 = coil2;
coil2 = CoilState[2];
//当有595级联的时候先发的数据会级联到第二块595芯片中
if(coil1 != coil2)
{
hc595_write_data(CoilState[2]);
hc595_write_data(CoilState[1]);
disp_out();
}
else
{
hc595_write_data(CoilState[1]);
disp_out();
}
if((CoilState[3]>>0)&0x01)
{
//laser_handle.state = LASER_OPEN_STATUS;
CoilState[3] -= 0x01;
}
if((CoilState[3]>>1)&0x01)
{
//flow_state = 0;
CoilState[3] -= 0x02;
}
if((CoilState[3]>>2)&0x01)
{
__HAL_TIM_SetCounter(&htim1, 0x9718); //编码器初始值一千万
cnt_update = 152;
CoilState[3] -= 0x04;
}
// if((CoilState[3]>>3)&0x01)
// {
// if(!spi_flag)
// {
// HAL_SPI_MspInit(&hspi2);
// MX_SPI2_Init();
// ch395_gpio_init();
// spi_flag = true;
// }
// HAL_GPIO_WritePin(CH395Q_TX_CTRL_GPIO_Port, CH395Q_TX_CTRL_Pin, GPIO_PIN_SET);
// }
// else
// {
// if(spi_flag)
// {
// ch395_spi_off();
// spi_flag = false;
// }
// HAL_GPIO_WritePin(CH395Q_TX_CTRL_GPIO_Port, CH395Q_TX_CTRL_Pin, GPIO_PIN_RESET);
// }
if((CoilState[3]>>4)&0x01)
{
for(int i = 25;i < 36;i++)
{
InputReg[i] = 0;
}
u2tx_buf = 0xF5;
uart_send(&huart2,(uint8_t *)&u2tx_buf,1);//启动气密仪开始检测(相当于按气密仪上的[启动]按键) 回传0xF5+0x0D+0x0A
CoilState[3] -= 0x10;
}
if((CoilState[3]>>5)&0x01)
{
for(int i = 25;i < 36;i++)
{
InputReg[i] = 0;
}
u2tx_buf = 0xF3;
uart_send(&huart2,(uint8_t *)&u2tx_buf,1);//读取最后一次检测结果(相当于检测完毕后,仪器自动发送的结果)
CoilState[3] -= 0x20;
}
if((CoilState[3]>>6)&0x01)
{
for(int i = 25;i < 36;i++)
{
InputReg[i] = 0;
}
u2tx_buf = 0xF0;
uart_send(&huart2,(uint8_t *)&u2tx_buf,1);//复位气密仪(复位过程约8秒) 回传 0xF0+0x0D+0x0A
CoilState[3] -= 0x40;
}
DisState[0] = (_74hc165_read_byte()>>8) & 0x00FF;
DisState[1] = _74hc165_read_byte() & 0x00FF;
DisState[2] = DI_NAMUR1 + DI_NAMUR2 * 2;
}