Posts: 38
Registered: ‎06-15-2017
Accepted Solution

UART bgm113 weird gliching on databuss



My controller is bgm113 and have uart databuss configured as follows:

	//Init variable
	//Init usart to async mode, baudrate 115200
	USART_InitAsync_TypeDef usart0_init = USART_INITASYNC_DEFAULT;
	usart0_init.enable = usartEnableTx;
	usart0_init.baudrate = UART_BAUDRATE;
	//eof async mode

	//binding gpio pin to usart peripheral
	uint32_t Pd13_asyncTxLoc = 21;//datasheet TX location 21, PD13 for USART0 async tx
	USART0->ROUTELOC0 = (USART0->ROUTELOC0 & ~(_USART_ROUTELOC0_TXLOC_MASK)) | (Pd13_asyncTxLoc << _USART_ROUTELOC0_TXLOC_SHIFT);//gpio binding happens here

	//interrupts for usart

Somehow there is periodical pulse in few u-seconds with this setting.


When I change the baudrate the period changes accordingly, also pulse width changes. Smaller baudrate gives bigger pulse width.


Do you have some knowledge on this matter?

Did I conf this wrong way?


Thx Robot Happy

Posts: 230
Registered: ‎08-19-2015

Re: UART bgm113 weird gliching on databuss

Hi @Troldenstein,


Thank you for your inquiry about using the BGM113 USART in asynchronous mode.  After looking at your configuration I have a few comments and questions:


1) Where do you observe the periodic pulse - i.e. is it on the USART0 TX pin (PD13)?  How does the pulse relate to the baudrate (i.e. what is the period of the pulse at different baudrates)?  If possible, please post a screen capture or photo of an oscilloscope capture of the periodic pulse.


2) Your GPIO binding in the USART0_ROUTEPEN and USART0_ROUTLOC0 registers appears correct, however you do not configure the pin in the GPIO module in your code snippet (i.e. enable clock to GPIO, set pin mode to push-pull).  Do you do this elsewhere in your initialization code?


3) You should enable the USART0 clock before calling USART_Reset(USART0) or modifying any registers in the USART0 module.


4) Note that you enable to USART0 (because usart0_init.enable = usartEnableTx; and you call USART_InitAsync()) before you enable and configure the GPIO TX pin.  This could cause glitches on the pin.  You could consider setting usart0_init.enable = usartDisable in your init structure and then enabling the USART after you conbfigure the GPIO by calling:

USART_Enable(uart, usartEnableTx);


Thank you, and let me know if you have any questions or if you have more details about the issue you are observing.