This is a RS485 class that uses the second UART and was tested on a Nucleo F030R8. A main demo program howto use the class is included. This class control the direction pin on the transceiver buffer automatically, and used transmit and receive interrupts. Ring buffers (256 bytes) are implemented on both transmission and reception. It assumes a ADM3485 'type' buffer where pins 2 ans 3 are connected and seen as direction. This test program could easily be adapted as base for other programs.

Dependencies:   mbed

Committer:
creatron
Date:
Tue Nov 11 16:01:12 2014 +0000
Revision:
0:044dfba47660
Child:
3:29454cac7930
Flashing led

Who changed what in which revision?

UserRevisionLine numberNew contents of line
creatron 0:044dfba47660 1 #ifndef DLMS_COMMS_H
creatron 0:044dfba47660 2 #define DLMS_COMMS_H
creatron 0:044dfba47660 3
creatron 0:044dfba47660 4 #include "types.h"
creatron 0:044dfba47660 5
creatron 0:044dfba47660 6 class dlms_comms
creatron 0:044dfba47660 7 {
creatron 0:044dfba47660 8 public:
creatron 0:044dfba47660 9 dlms_comms (void);
creatron 0:044dfba47660 10 void initialise (INT_16 baudrate,
creatron 0:044dfba47660 11 UINT_8 bits,
creatron 0:044dfba47660 12 UINT_8 parity,
creatron 0:044dfba47660 13 UINT_8 stop_bits);
creatron 0:044dfba47660 14 public:
creatron 0:044dfba47660 15 void send_packet (const UINT_8 * ptr,
creatron 0:044dfba47660 16 const UINT_8 length);
creatron 0:044dfba47660 17 bool char_available (void);
creatron 0:044dfba47660 18 UINT_8 get_char (void);
creatron 0:044dfba47660 19 void init (RawSerial * parent_uart,
creatron 0:044dfba47660 20 Timer * parent_timer);
creatron 0:044dfba47660 21 bool get_dir485 (void);
creatron 0:044dfba47660 22 bool poll_rs485 (void);
creatron 0:044dfba47660 23 UINT_64 ret_irq_count (void);
creatron 0:044dfba47660 24 private:
creatron 0:044dfba47660 25 void Rx_interrupt (void);
creatron 0:044dfba47660 26 void Tx_interrupt (void);
creatron 0:044dfba47660 27 // parent classes
creatron 0:044dfba47660 28 RawSerial * debug_uart;
creatron 0:044dfba47660 29 Timer * timer;
creatron 0:044dfba47660 30 UINT_8 rx_buffer[256];
creatron 0:044dfba47660 31 UINT_8 rx_head_ptr;
creatron 0:044dfba47660 32 UINT_64 irq_count;
creatron 0:044dfba47660 33 UINT_8 rx_tail_ptr;
creatron 0:044dfba47660 34 };
creatron 0:044dfba47660 35 #endif