feat: lower dependence from HAL library used
This commit is contained in:
28
modbus.c
28
modbus.c
@@ -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) {}
|
||||
void Modbus_GetByte(unsigned char byte) {
|
||||
if (rx_buf_ptr < 128) {
|
||||
rx_buf[rx_buf_ptr++] = (unsigned char)Modbus_UART -> DR;
|
||||
} else {
|
||||
Modbus_UART -> DR;
|
||||
rx_buf[rx_buf_ptr++] = byte;
|
||||
}
|
||||
USART_ClearITPendingBit(Modbus_UART, USART_IT_RXNE);
|
||||
|
||||
if (timer_state == 0) {
|
||||
timer_state = 1;
|
||||
Modbus_TIM -> CNT = 0;
|
||||
TIM_Cmd(Modbus_TIM, ENABLE);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
4
modbus.h
4
modbus.h
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user