Skip to main content
RComa.1
Associate II
Oct 18, 2021 11:46 AM UTC
Solved

How to use a same uart for two devices

Hello every one , i'm using a STM32L100RX, i am using PC11 and PC10 ports as USART3, so far everything it's okay, but i need to use the same usart (USART3) on the PB11 and PB10 pins...i need configure these pins in runtime because i have another device on it! something like multiplexor, so what i do?¿

this is my code:

GPIO_InitTypeDef def,def2;
 
 HAL_GPIO_DeInit(GPIOB,GPIO_PIN_11); //Deinit port 11 and 10 of B PORT
 HAL_GPIO_DeInit(GPIOB,GPIO_PIN_10);
 
 def.Alternate = GPIO_AF7_USART3;
 def.Pull = GPIO_NOPULL;
 def.Mode = GPIO_MODE_AF_PP;
 def.Pin = GPIO_PIN_11;
 def.Speed = GPIO_SPEED_FREQ_HIGH;
 HAL_GPIO_Init(GPIOC,&def);
 
 def2.Alternate = GPIO_AF7_USART3;
 def2.Pull = GPIO_NOPULL;
 def2.Mode = GPIO_MODE_AF_PP;
 def2.Pin = GPIO_PIN_10;
 def2.Speed = GPIO_SPEED_FREQ_HIGH;
 HAL_GPIO_Init(GPIOC,&def2); //Set now the usart 3 to the desired PORT

but it doesn't work...any idea?¿

Regards!

This topic has been closed for replies.
S.Ma
S.MaBest answer
Principal
Oct 18, 2021 12:15 PM UTC

You must have only one set of pins wired to the uart. Dynamically deselect as input with pull up the unused ones first. Would be clean to reset usart when switching the pins in case transmission on going. This is a dynamic hw reconfiguration which is fine. CubeMX mostly covers the static ones and require coder override...

10 replies

S.Ma
S.MaBest answer
Principal
Oct 18, 2021 12:15 PM UTC

You must have only one set of pins wired to the uart. Dynamically deselect as input with pull up the unused ones first. Would be clean to reset usart when switching the pins in case transmission on going. This is a dynamic hw reconfiguration which is fine. CubeMX mostly covers the static ones and require coder override...

RComa.1
RComa.1Author
Associate II
Oct 18, 2021 1:15 PM UTC

Dynamically deselect as input with pull up the unused ones first.

how i do that?¿ i thought  HAL_GPIO_Init does...

TDK
Oct 18, 2021 1:06 PM UTC

> but it doesn't work

Why do you think so? Have you looked at the signal on the lines?

"If you feel a post has answered your question, please click ""Accept as Solution""."
RComa.1
RComa.1Author
Associate II
Oct 18, 2021 1:14 PM UTC

Shure, i have no see any signal in the osciloscope...

TDK
Oct 18, 2021 1:45 PM UTC

What you're doing should work. Verify the pins are actually connected by initializing as GPIO output and toggling them and monitoring on a scope.

"If you feel a post has answered your question, please click ""Accept as Solution""."
S.Ma
Principal
Oct 18, 2021 2:02 PM UTC

With STLink in debug mode, put a breakpoint and even manually inpect and play with uart and gpio registers until you are satisfied. You can make a transmission loop, break, change gpios until things start to work...

RComa.1
RComa.1Author
Associate II
Oct 18, 2021 2:57 PM UTC

HI guys, it seems work finally, however i just found out another issue...,when i use the portc with the usart to measure my sensor, measures affected by the other sensor on the other port (port b)...maybe it's because of @S.Ma​  said a about to set pull up on that port...

Andrew Neil
Super User
Oct 18, 2021 3:37 PM UTC

@RComa.1​  - "HI guys, it seems work finally"

So how about posting the working code for the benefit of others who might come along looking for answers to the same question?

And mark the solution:

0693W000008y9fZQAQ.png 

A complex system that works is invariably found to have evolved from a simple system that worked.A complex system designed from scratch never works and cannot be patched up to make it work.