Unofficial update by Zhironkin

This commit is contained in:
Pavel Volkov
2022-05-25 00:00:06 +03:00
parent e226faa454
commit fe0b46c130
8 changed files with 86 additions and 46 deletions

View File

@@ -12,6 +12,10 @@
#define REL_MAIN_BIT (1u<<0)
#define REL_AUX_BIT (1u<<1)
#define MOTOR_MIN 0
#define MOTOR_MAX 255
void loop_iterate();

View File

@@ -1,7 +1,7 @@
/*
* user_modbus.h
*
* Created on: 13 <20><><EFBFBD>. 2019 <20>.
* Created on: 13 <20><><EFBFBD>. 2019 <20>.
*/
#ifndef MODBUS_LOGIC_H_
@@ -9,9 +9,11 @@
#include <stdint.h>
#define BOARD_ADRESS 34 //Relay Module 1
#define BOARD_ADRESS_Panel 32 //Relay Module 1
#define BOARD_ADRESS_DAC 36 //DAC module 1
//#define BOARD_ADRESS 35 //Relay Module 2
#define BUS_IDLE_TIME 3
#define BUS_IDLE_TIME 15
#define MODBUS_PROTOCOL_VERSION (1)
#define MODBUS_HEADER_SIZE (13)

View File

@@ -12,6 +12,7 @@
#define BOARD_DESC_LEN (23)
extern TIM_HandleTypeDef htim3;
static const char board_description[BOARD_DESC_LEN] = "RS485 Relay Module v1";
extern uint16_t tranfer_errors_count;
extern uint16_t last_rx_time;
@@ -56,17 +57,9 @@ void loop_iterate()
REL_AUX_OFF;
LED_AUX_OFF;
}
/*
if(motor_pwm>MOTOR_MAX)motor_pwm=MOTOR_MAX;
if(motor_pwm<MOTOR_MIN)motor_pwm=MOTOR_MIN;
if(motor_pwm==0)
//TCCR1A&=~(1<<COM1B1);
else
{
//MOTOR_PWM = motor_pwm;
//TCCR1A|=(1<<COM1B1);
}
*/
/* */
modbus_loop_iterate();
HAL_Delay(1);
}
@@ -151,7 +144,18 @@ uint8_t write_register(uint16_t address, uint16_t value)
switch (address)
{
case 0x2001: relays = value; break;
case 0x2002: motor_pwm = value; break;
case 0x2002: motor_pwm = value;
if(motor_pwm>MOTOR_MAX)motor_pwm=MOTOR_MAX;
if(motor_pwm<MOTOR_MIN)motor_pwm=MOTOR_MIN;
if(motor_pwm==0)
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
else
{
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, motor_pwm);
HAL_Delay(5);
}
break;
default: ret = 1;
}
return ret;

View File

@@ -12,6 +12,9 @@
volatile uint8_t recv_buffer[BUFFERS_SIZE];
volatile uint8_t send_buffer[BUFFERS_SIZE];
extern uint16_t uart_rx_counter;
extern uint16_t uart_rx_len;
uint16_t bytes_to_send = 0;
uint16_t last_rx_time = 0xFFFF;
enum recv_state cmd_receiving = RECV_IDLE;
@@ -30,7 +33,16 @@ void UART_RxCpltCallback(void)
// Check destination address
if (recv_buffer[5] != BOARD_ADRESS)
{
cmd_receiving = RECV_ERROR;
// if(recv_buffer[5]==BOARD_ADRESS_Panel || recv_buffer[5]==BOARD_ADRESS_DAC )
// {
// memset(&recv_buffer[0],0,BUFFERS_SIZE);
last_rx_time =0;
// }
cmd_receiving = RECV_ERROR;
return;
}
@@ -76,14 +88,15 @@ void modbus_loop_iterate()
{
if (cmd_receiving == RECV_ERROR)
{
//delay_ms(30); // poor man's way to synchronize packets
// HAL_Delay(10); // poor man's way to synchronize packets
if(last_rx_time>=BUS_IDLE_TIME)
{
{
cmd_receiving = RECV_IDLE;
// memset(&recv_buffer[0],0,BUFFERS_SIZE);
//TXEN_485 = 1;
//delay_us(10);
//TXEN_485 = 0;
}
}
}
if (cmd_receiving == RECV_IDLE)
{

View File

@@ -94,9 +94,9 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/* Peripheral clock enable */
__HAL_RCC_TIM1_CLK_ENABLE();
/* TIM1 interrupt Init */
HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0);
HAL_NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
/* USER CODE BEGIN TIM1_MspInit 1 */