Skip to main content
RComa.1
Associate II
October 18, 2021
Solved

How to use a same uart for two devices

  • October 18, 2021
  • 5 replies
  • 2370 views

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.
Best answer by S.Ma

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

5 replies

S.Ma
S.MaBest answer
Principal
October 18, 2021

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
October 18, 2021

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

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

TDK
October 18, 2021

> 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
October 18, 2021

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

TDK
October 18, 2021

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
October 18, 2021

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
October 18, 2021

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
October 18, 2021

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