actuator/users/Src/timer.c

91 lines
2.5 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 "timer.h"
#include "iousart.h"
#include "atcom.h"
int it_5ms_flag = 0;
int it_5ms_cnt = 0;
int it_10ms_flag = 0;
int it_10ms_cnt = 0;
int it_25ms_flag = 0;
int it_25ms_cnt = 0;
int it_50ms_flag = 0;
int it_50ms_cnt = 0;
int it_100ms_flag = 0;
int it_100ms_cnt = 0;
int it_300ms_flag = 0;
int it_300ms_cnt = 0;
int it_500ms_flag = 0;
int it_500ms_cnt = 0;
int it_1000ms_flag = 0;
int it_1000ms_cnt = 0;
int it_2000ms_flag = 0;
int it_2000ms_cnt = 0;
void tim6_cnt(void)
{
it_5ms_cnt++;
if(it_5ms_cnt > 4 ) { it_5ms_flag = 1; it_5ms_cnt = 0; }
it_10ms_cnt++;
if(it_10ms_cnt > 9 ) { it_10ms_flag = 1; it_10ms_cnt = 0; }
it_25ms_cnt++;
if(it_25ms_cnt > 24 ) { it_25ms_flag = 1; it_25ms_cnt = 0; }
it_50ms_cnt++;
if(it_50ms_cnt > 49 ) { it_50ms_flag = 1; it_50ms_cnt = 0; }
it_100ms_cnt++;
if(it_100ms_cnt > 99 ) { it_100ms_flag = 1; it_100ms_cnt = 0; }
it_300ms_cnt++;
if(it_300ms_cnt > 299) { it_300ms_flag = 1; it_300ms_cnt = 0; }
it_500ms_cnt++;
if(it_500ms_cnt > 499) { it_500ms_flag = 1; it_500ms_cnt = 0; }
it_1000ms_cnt++;
if(it_1000ms_cnt > 999) { it_1000ms_flag = 1; it_1000ms_cnt = 0; }
it_2000ms_cnt++;
if(it_2000ms_cnt > 1999) { it_2000ms_flag = 1; it_2000ms_cnt = 0; }
}
//重写TIM中断调用函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim6)
{
tim6_cnt();
}
if(htim == &MODBUS_HTIM)
{
if(usart_flag == 1)
{
__HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE);//产生中断证明超过1ms没有接收到数据了一帧接收完成
HAL_TIM_Base_Stop_IT(&MODBUS_HTIM); //中断之后停止定时器,开启在下一次接收到数据开始
MODBUS_UART.rx_size = MODBUS_UART.rx_buf_cnt; //将接收到数据数量赋值
MODBUS_UART.rx_buf_cnt = 0; //清零
modbus_process_rtu();
}
if(usart_flag == 6)
{
__HAL_TIM_CLEAR_FLAG(&MODBUS_HTIM, TIM_FLAG_UPDATE);//产生中断证明超过1ms没有接收到数据了一帧接收完成
HAL_TIM_Base_Stop_IT(&MODBUS_HTIM); //中断之后停止定时器,开启在下一次接收到数据开始
uart6.rx_size = uart6.rx_buf_cnt; //将接收到数据数量赋值
uart6.rx_buf_cnt = 0; //清零
if(uart6.rx_size < 8) return; // 数据长度不是有效值
if(wifi_set_state == 0)
{
if((_memcmp(array1,(const uint8_t*)"WIFI DISCONNECT",14) == 0) || (_memcmp(array1,(const uint8_t*)"WIFI CONNECT",14) == 0))
{
wifi_set_state = 11;
}
}
modbus_analysis_tcp(array1, uart6.rx_size); // 协议处理uart6.rx_buf
}
}
if(htim == &htim11)
{
iousart_tim_cb();
}
}