cancel
Showing results for 
Search instead for 
Did you mean: 

How to use a same uart for two devices

RComa.1
Associate II

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!

1 ACCEPTED SOLUTION

Accepted Solutions
S.Ma
Principal

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...

View solution in original post

10 REPLIES 10
S.Ma
Principal

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...

TDK
Guru

> 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".

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

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

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

TDK
Guru

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

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
Associate II

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...

@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 

@RComa.1​ - " 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)..."

That sounds like a separate question - so start a separate thread. 

You can always give a link back to here for reference. And a link from here to the new thread.

You will need to give more details, though - there's not enough to go on as it stands.