(Edit: After changing serial clock source, I can get baud rate set to 460800. I think the issue has to do with my TTL-RS232 converter board not supporting 460800.)
I’m using an i.MX RT1050 EVKB eval board running Mbed OS 6. I’m trying to set LPUART3 to 460800 baud. However this fails. I can set the baud to anything below that speed. For example, 230400 works great.
Mbed OS 6 calls it’s own function serial_baud() which in turn calls an NXP DRIVER function called LPUART_SetBaudRate() with a serial clock rate of 24000000 that is defined in fsl_lpuart.c.
LPUART_SetBaudRate() returns kStatus_LPUART_BaudrateNotSupport on baud rate 460800.
If I change the serial clock setup so that the serial clock rate is 80000000 by doing the following:
void serial_setup_clock(void)
{
/* Configure UART divider to default */
//CLOCK_SetMux(kCLOCK_UartMux, 1); /* Set UART source to OSC 24M */
CLOCK_SetMux(kCLOCK_UartMux, 0);
CLOCK_SetDiv(kCLOCK_UartDiv, 0); /* Set UART divider to 1 */
}
Then LPUART_SetBaudRate() succeeds. However, this only allows me to properly receive serial data at 460800 baud, but I can’t send data at that rate.
Notice in the above code Mbed OS is calling an NXP fsl_clock_config.c function CLOCKSetMux(kCLOCK_UartMux, 0) which gives a uart clock rate of 80000000.
if you look in fsl_lpuart.c, I see that LPUART_SetBaudRate() returns not supported when the actual baud rate is more than 3 percent in error from your desired baud rate.
It looks to me like you might want to run LPUART_SetBaudRate() under a debugger so you can see the osr value used. Could turn out that you need more than 80MHz clock to get the baud rate you want with under 3 percent error.
Running my code with the 80MHz clock I get the following output:
Setting baudrate: 460800 Serial Clock= 80000000
Result: SUCCESS
The issue is with the TTL to RS232 converter that I’m using. It’s limited to 250k which clearly won’t work for 460800. I need to use a different TTL to RS232 chip that is capable of 1Mb baud rates and I should be off to the races.