212 lines
4.8 KiB
C
212 lines
4.8 KiB
C
#include "timer.h"
|
||
|
||
int heart_1000ms_flag = 0;
|
||
int heart_1000ms_cnt = 0;
|
||
int battery_2000ms_flag = 0;
|
||
int battery_2000ms_cnt = 0;
|
||
int plot_ms_flag = 0;
|
||
int plot_ms_cnt = 0;
|
||
int twk_1000ms_flag = 0;
|
||
int twk_1000ms_cnt = 0;
|
||
int input_500ms_flag = 0;
|
||
int input_500ms_cnt = 0;
|
||
uint16_t sig2slave_previous_tick = 0;
|
||
uint16_t sig2slave_current_tick = 0;
|
||
|
||
void duty_tim3(void)
|
||
{
|
||
freq_signal.over_cnt++;
|
||
|
||
}
|
||
|
||
void duty_tim6(void)
|
||
{
|
||
//lv_tick_inc(1);
|
||
|
||
heart_1000ms_cnt++;
|
||
if( heart_1000ms_cnt >= 1000)
|
||
{
|
||
heart_1000ms_cnt = 0;
|
||
heart_1000ms_flag = 1;
|
||
}
|
||
|
||
battery_2000ms_cnt++;
|
||
if( battery_2000ms_cnt >= 2000)
|
||
{
|
||
battery_2000ms_cnt = 0;
|
||
battery_2000ms_flag = 1;
|
||
}
|
||
|
||
plot_ms_cnt++;
|
||
if( plot_ms_cnt >= tabdata.item1_page0_sample_interval)
|
||
{
|
||
plot_ms_cnt = 0;
|
||
plot_ms_flag = 1;
|
||
}
|
||
|
||
twk_1000ms_cnt++;
|
||
if( twk_1000ms_cnt >= 1000)
|
||
{
|
||
twk_1000ms_cnt = 0;
|
||
twk_1000ms_flag = 1;
|
||
}
|
||
|
||
input_500ms_cnt++;
|
||
if( input_500ms_cnt >= 500)
|
||
{
|
||
input_500ms_cnt = 0;
|
||
input_500ms_flag = 1;
|
||
}
|
||
|
||
//发送完成 或者 已经接收到一部分数据之后开始计时
|
||
if( (sig2slave_step == 1)||(mod_master.tx_flag == TX_OK) )
|
||
{
|
||
sig2slave_current_tick++;
|
||
mod_master.rx_error_message = RX_ERROR_NONE;
|
||
|
||
if(sig2slave_current_tick > mod_master.timeout)
|
||
{
|
||
if(sig2slave_step == 0)
|
||
{
|
||
//进入此处说明发送成功后未收到任何数据
|
||
mod_master.rx_error_message = RX_ERROR_TIMEOUT;
|
||
mod_master.tx_flag = TX_NONE;
|
||
}
|
||
|
||
HAL_UART_DMAStop(&huart2);
|
||
__HAL_UART_CLEAR_IDLEFLAG(&huart2);
|
||
|
||
sig2slave_current_tick = 0;
|
||
sig2slave_step = 2; //无论是哪个阶段出现超时,均跳转至step2
|
||
scom2_rs485.rx_flag = TRUE;
|
||
sig_trans = TRANS_MODBUS_SIG_TO_SLAVE; //发送回调中会修改成none,因此在这里重新赋值(接收超时也属于接收的一种结果)
|
||
}
|
||
}
|
||
}
|
||
|
||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
|
||
{
|
||
//记录发送完成的时间点
|
||
st_flag = TRANSPARENT_TRANSMIT_END;
|
||
tick_end = xTaskGetTickCountFromISR();
|
||
|
||
//计算延迟,捕获失败时清零(速度过快,小于1ms)
|
||
//trans_log_rx = tick_middle - tick_start;
|
||
//if(trans_log_rx > 1000) trans_log_rx = 0;
|
||
trans_log_tx = tick_end - tick_middle;
|
||
if(trans_log_tx > 1000) trans_log_tx = 0;
|
||
|
||
//发送完成后将相关数组清零
|
||
if(huart == &huart1)
|
||
{
|
||
//HART重新使能接收
|
||
HART_RTS(RTS_OFF);
|
||
|
||
memset(scom1_hart.tx_buff, 0, scom1_hart.tx_len);
|
||
scom1_hart.tx_len = 0;
|
||
|
||
//PC--->SIG--->HART,重新开启485的DMA
|
||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
|
||
}
|
||
|
||
if(huart == &huart2)
|
||
{
|
||
memset(scom2_rs485.tx_buff, 0, scom2_rs485.tx_len);
|
||
scom2_rs485.tx_len = 0;
|
||
|
||
//开启对应的DMA
|
||
switch (sig_trans)
|
||
{
|
||
case TRANS_HART_TO_PC:
|
||
{
|
||
HAL_UART_Receive_DMA(&huart1, scom1_hart.rx_buff, BUFFER_SIZE);
|
||
}
|
||
break;
|
||
|
||
case TRANS_BLE_TO_PC:
|
||
{
|
||
HAL_UART_Receive_DMA(&huart6, scom6_ble.rx_buff, BUFFER_SIZE);
|
||
}
|
||
break;
|
||
|
||
case TRANS_MODBUS_PC_TO_SIG:
|
||
{
|
||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
|
||
}
|
||
break;
|
||
|
||
case TRANS_MODBUS_SIG_TO_SLAVE:
|
||
{
|
||
mod_master.tx_flag = TX_OK;
|
||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
|
||
sig2slave_current_tick = 0;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
if(huart == &huart6)
|
||
{
|
||
memset(scom6_ble.tx_buff, 0, scom6_ble.tx_len);
|
||
scom6_ble.tx_len = 0;
|
||
|
||
//PC--->SIG--->BLE,重新开启485的DMA
|
||
HAL_UART_Receive_DMA(&huart2, scom2_rs485.rx_buff, BUFFER_SIZE);
|
||
}
|
||
|
||
//通讯模式清空,等待下一次接收
|
||
sig_trans = TRANS_NONE;
|
||
|
||
//如果显示任务被挂起,则在此处释放(无DMA的情况)
|
||
if(screen_suspend_flag)
|
||
{
|
||
xTaskResumeFromISR(task_lcdHandle);
|
||
xTaskResumeFromISR(task_menuHandle);
|
||
screen_suspend_flag = 0;
|
||
}
|
||
}
|
||
|
||
void delay_cnt(uint16_t cnt)
|
||
{
|
||
while(cnt > 0)
|
||
{
|
||
cnt--;
|
||
}
|
||
}
|
||
|
||
#define CPU_FREQUENCY_MHZ 165.888 // STM32时钟主频
|
||
void wu_delay_us(__IO uint32_t delay)
|
||
{
|
||
int last, curr, val;
|
||
int temp;
|
||
|
||
while (delay != 0)
|
||
{
|
||
temp = delay > 900 ? 900 : delay;
|
||
last = SysTick->VAL;
|
||
curr = last - CPU_FREQUENCY_MHZ * temp;
|
||
if (curr >= 0)
|
||
{
|
||
do
|
||
{
|
||
val = SysTick->VAL;
|
||
}
|
||
while ((val < last) && (val >= curr));
|
||
}
|
||
else
|
||
{
|
||
curr += CPU_FREQUENCY_MHZ * 1000;
|
||
do
|
||
{
|
||
val = SysTick->VAL;
|
||
}
|
||
while ((val <= last) || (val > curr));
|
||
}
|
||
delay -= temp;
|
||
}
|
||
}
|
||
|