10 years, 6 months ago.

Serial malfunctions when changing baud rate of other serial port for mBed LPC1549

Dear,

I am working on mBed LPC1549 platform and try to enable 2 serial ports, one is for debug port and the other is for functional port.

After debugging port is initialized, the debug information can output normally. However, when I change the function port baud rate, the debug port will output unkown code and work abnormally. When I switch the function baud rate back to the SAME baud rate(115200) as debug serial port, the debug serial port works normally again. When I switch the function baud rate back to another baud rate(57600 or 4800) different from the debug port baud rate, the debug serial port still works abnormally.

Below is my test code and log information for your reference(Please note it is based on mBed platfrom):

  1. include "mbed.h"
  1. define DBG_PORT_BAUD 115200
  2. define FUNC_PORT_BAUD1 4800
  3. define FUNC_PORT_BAUD2 115200 57600

static Serial sSerialDebug(D1, D0); static RawSerial sSerialFunc(D8, D2);

int main(void) { int cnt = 1; int br = FUNC_PORT_BAUD2;

sSerialDebug.baud(115200);

while(1) { if((cnt & 0x7) == 0) { br = br==FUNC_PORT_BAUD2?FUNC_PORT_BAUD1:FUNC_PORT_BAUD2; sSerialDebug.printf("set br %d\r\n", br); sSerialFunc.baud(br); } sSerialDebug.printf("test cnt = %d\r\n", cnt++); wait_ms(1000); } }

The output log is below.

test cnt = 1 test cnt = 2 test cnt = 3 test cnt = 4 test cnt = 5 test cnt = 6 test cnt = 7 set br 4800?磂s?c畉 ?8?磂s?c畉 ?9?磂s?c畉 ?1? 磂s?c畉 ?1? 磂s?c畉 ?1? 磂s?c畉 ?1? 磂s?c畉 ?1? 磂s?c畉 ?1? 砮t燽r€?5?0 test cnt = 16 test cnt = 17 test cnt = 18 test cnt = 19 test cnt = 20 test cnt = 21 test cnt = 22 test cnt = 23 set br 4800?磂s?c畉 ?2? 磂s?c畉 ?2? 磂s?c畉 ?2? 磂s?c畉 ?2? 磂s?c畉 ?2? 磂s?c畉 ?2? 磂s?c畉 ?3? 磂s?c畉 ?3? 砮t€br€?5?0 test cnt = 32 test cnt = 33 test cnt = 34

Thanks.

Question relating to:

1 Answer

10 years, 3 months ago.

Hi,

All three Serial port of the LPC1549 use a common peripheral clock source (U_PCLK) and mbed library use this clock for fractional baudrate generator. So when you change baudrate of the serial port, other serial port boadrate is affected since U_PCLK may be changed. You can find more detail information of this in "Secion 24.3.1 Configure the USART clock and baud rate" of the LPC1549 user manual.

Cheers, Toyo

Accepted Answer

That sounds like a nasty bug in the mbed lib that should be fixed.

posted by Wim Huiskamp 20 Aug 2014

I've made excel sheet to see pattern and made a formula for setting baud rates, now can easily adjust all three serial ports to different baud rates. U_PCLK should remain constant, no idea why mbed library not do that.

posted by Farrukh Hussain 12 Oct 2016