feat: lower dependence from HAL library used

This commit is contained in:
2025-12-30 20:21:51 +03:00
parent 84b64b68a9
commit 8b2cf439a6
3 changed files with 31 additions and 29 deletions

View File

@@ -25,6 +25,8 @@ static uint16_t dev_id = DEFAULT_DEVICE_MODBUS_ID;
const uint16_t com_dev_id = 247;
static void (*ModbusUartSendByte)(USART_TypeDef*, unsigned char);
static void (*ModbusTimEnable)(TIM_TypeDef*);
static void (*ModbusTimDisable)(TIM_TypeDef*);
static int32_t (*ModbusTcpSendByte)(uint8_t, unsigned char*, uint16_t);
static void (*ModbusRIRPoll)(void);
static void (*ModbusRHRPoll)(void);
@@ -34,6 +36,12 @@ static void (*ModbusWSRPoll)(uint16_t, uint16_t);
void modbus_connect_callback_send_byte(void (*s)(USART_TypeDef*, unsigned char)) {
ModbusUartSendByte = s;
}
void modbus_connect_callback_tim_en(void (*s)(TIM_TypeDef*)) {
ModbusTimEnable = s;
}
void modbus_connect_callback_tim_dis(void (*s)(TIM_TypeDef*)) {
ModbusTimDisable = s;
}
#endif
#ifdef CURRENT_OPERATION_MODE_TCP
@@ -388,29 +396,19 @@ void modbus_poll(void) {
}
//======================= UART HANDLERS =========================//
#ifdef CURRENT_OPERATION_MODE_UART
void Modbus_UART_IRQHandler(void) {
if (USART_GetITStatus(Modbus_UART, USART_IT_RXNE) != RESET) {
while(USART_GetFlagStatus(Modbus_UART,USART_FLAG_RXNE) == RESET) {}
if (rx_buf_ptr < 128) {
rx_buf[rx_buf_ptr++] = (unsigned char)Modbus_UART -> DR;
} else {
Modbus_UART -> DR;
}
USART_ClearITPendingBit(Modbus_UART, USART_IT_RXNE);
void Modbus_GetByte(unsigned char byte) {
if (rx_buf_ptr < 128) {
rx_buf[rx_buf_ptr++] = byte;
}
if (timer_state == 0) {
timer_state = 1;
Modbus_TIM -> CNT = 0;
TIM_Cmd(Modbus_TIM, ENABLE);
}
if (timer_state == 0) {
timer_state = 1;
ModbusTimEnable(Modbus_TIM);
}
}
void Modbus_TIM_IRQHandler(void) {
if (TIM_GetITStatus(Modbus_TIM, TIM_IT_Update) != RESET)
TIM_ClearITPendingBit(Modbus_TIM, TIM_IT_Update);
TIM_Cmd(Modbus_TIM, DISABLE);
void Modbus_TIM_Handler(void) {
ModbusTimDisable(Modbus_TIM);
timer_state = 0;
rx_flag = 1;
}

View File

@@ -28,10 +28,14 @@ void set_modbus_id(unsigned char);
void modbus_connect_callback_send_byte(void (*s)(USART_TypeDef*, unsigned char));
void modbus_connect_callback_tim_en(void (*s)(TIM_TypeDef*));
void modbus_connect_callback_tim_dis(void (*s)(TIM_TypeDef*));
void modbus_connect_callback_send_buf_tcp(int32_t (*s)(uint8_t, unsigned char*, uint16_t));
void modbus_connect_callback_rir_poll(void (*s)(void));
void modbus_connect_callback_rhr_poll(void (*s)(void));
void modbus_connect_callback_wsr_poll(void (*s)(uint16_t, uint16_t));
void Modbus_GetByte(unsigned char);
void Modbus_TIM_Handler(void);
void modbus_poll(void);
void modbus_reset(void);

View File

@@ -6,28 +6,28 @@
// MCU Includes
#include "stm32f4xx_ll_lptim.h"
#include "stm32f4xx_ll_gpio.h"
#include "stm32f4xx_ll_tim.h"
// Needed Constants
#define DEFAULT_DEVICE_MODBUS_ID 1
#define CURRENT_OPERATION_MODE_TCP
#define CURRENT_OPERATION_MODE_UART
#define Modbus_LED GPIOB
#define Modbus_LED_Pin LL_GPIO_PIN_9
#define Modbus_LED_Pin LL_GPIO_PIN_2
#define MODBUS_LED_ON LL_GPIO_SetOutputPin(Modbus_LED, Modbus_LED_Pin);
#define MODBUS_LED_OFF LL_GPIO_ResetOutputPin(Modbus_LED, Modbus_LED_Pin);
#ifdef CURRENT_OPERATION_MODE_UART
#define RS485_GPIO GPIOB
#define RS485_GPIO_Pin GPIO_Pin_6
#define MODBUS_TX_EN GPIO_WriteBit(RS485_GPIO, RS485_GPIO_Pin, Bit_SET);
#define MODBUS_TX_DIS GPIO_WriteBit(RS485_GPIO, RS485_GPIO_Pin, Bit_RESET);
#define Modbus_UART USART2
#define MODBUS_TX_EN LL_GPIO_SetOutputPin(RS485_GPIO, RS485_GPIO_Pin);
#define MODBUS_TX_DIS LL_GPIO_ResetOutputPin(RS485_GPIO, RS485_GPIO_Pin);
#define RS485_GPIO GPIOA
#define RS485_GPIO_Pin LL_GPIO_PIN_11
#define Modbus_UART USART1
#define Modbus_TIM TIM2
#define Modbus_UART_IRQHandler USART2_IRQHandler
#define Modbus_TIM_IRQHandler TIM2_IRQHandler
#endif