Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
6 years, 2 months ago.
comunicação RS-485 lpc1768 modbus
First name = Leandro santos silva Country = Brazil Electrical Engineering Student
lpc1768 = master, soft-starter slave
Hi everyone, I would like some help from you, and now I'm practicing in the firmware area. I am trying to perform serial communication from LPC1768 to WEG SOFT-STARTER. I am looking for a difficulty to send my command, I am using ModbusTOOLS software (slave) where it simulates receiving a command, when sending my command is not available, let me post my code below, I would like a guidance and example of code (a send function).
- include "mbed.h"
- include "lpc17xx.h"
Serial modbus(p9, p10);
volatile char modbus_buffer_char; uint8_t modbus_input_buffer[12]; volatile uint8_t modbus_input_buffer_counter = 0; volatile bool modbus_interrupt_complete = false;
uint16_t modbus_crc(uint8_t* buf, int len) { uint16_t crc = 0xFFFF;
for (int pos = 0; pos < len; pos++) { crc ^= (uint16_t)buf[pos]; XOR byte into least sig. byte of crc
for (int i = 8; i != 0; i) { Loop over each bit
if ((crc & 0x0001) != 0) { If the LSB is set
crc >>= 1; Shift right and XOR 0xA001
crc ^= 0xA001;
} else Else LSB is not set
crc >>= 1; Just shift right
}
}
Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)
return crc;
}
void modbus_read_L1V(char slave_address)
{
wait_ms(4);
modbus.putc(slave_address);
modbus.putc(0x03);
modbus.putc(0x00);
modbus.putc(0x06);
modbus.putc(0x00);
modbus.putc(0x02);
modbus.putc(0x00);
modbus.putc(0x00);
wait_ms(4);
} int main() {
modbus.baud(9600); printf("start\n\r");
while(1) {
modbus_read_L1V(0x01);
} }