2020年5月10日日曜日

LPC812:シリアル通信を115200bps でする方法

 結論から書くとメインクロックが 12MHz ではダメ。24MHz にすれば OK。

 LPCXpressoBoard OM13053 + MCUXpresso IDE の組み合わせで、MCUXpresso
SDK のサンプルプログラム lpcxpresso812max_usart_transfer_ring_buffer をベースに開発を行っているのだが、オリジナルのボーレート 9600bps を 115200bps に変更すると動かない。具体的には fsl_usart.c の USART_SetBaudRate() 内の

assert((((srcClock_Hz >> 4U) / brgval) - baudrate_Bps) < ((baudrate_Bps / 100) * 3));
 が例外を吐いてプログラムを止める(JTAG デバッガ万歳!!)

 Arduino の Atmega328 でも 115200bps でいけるのに、Cortext-M0 がダメってどういうこと??と色々調べていくと、ボーレートジェネレータへの入力クロックが 12MHz では低いらしい(Arduino Uno の CPU クロックは 16MHz)。

 ということで、CPU クロックを変更。

 usart_transfer_ring_buffer.c の main() の

    BOARD_BootClockIRC12M();
 を

    BOARD_BootClockPll24M();
に変更して、clock_config.c の BOARD_BootClockPll24M() の

    config.targetFreq = 12000000U;                /*!< set pll target freq */


 を

    config.targetFreq = 24000000U;                /*!< set pll target freq */


     CLOCK_SetCoreSysClkDiv(1U); 




     CLOCK_SetCoreSysClkDiv(2U);

  にすれば OK 。(ここはサンプルのバグっぽい...)

 ただし、他のクロック系にどんな影響が出るかは調べていなので要注意。





0 件のコメント:

コメントを投稿