2023-04-24 7:00 AM
Sub: Single wire communication is not working
Dear Sir
I developed Hw design and and now writing firmware for stm32L476 microcontroller. Requirement of project is Single wire communication. I chose STM32L476, the reason behind was single wire communication (SWMPI on Port B pin12) peripheral present in this microcontroller. I took Bit rate 100kBits/sec.I connected both boards using swmpi wire and ground pins. Problem is that single wire communication is not working. I am not able to receive data at receiver side board.
i used as below code snippet:
To Initialize SWMPI
hswpmi1.Instance = SWPMI1;
hswpmi1.Init.VoltageClass = SWPMI_VOLTAGE_CLASS_B;
hswpmi1.Init.BitRate = 19;
hswpmi1.Init.TxBufferingMode = SWPMI_TX_NO_SOFTWAREBUFFER;
hswpmi1.Init.RxBufferingMode = SWPMI_RX_NO_SOFTWAREBUFFER;
i am using API for communication
Receiver Side microcontroller:
char tx_data_buf[32];
while(1){
status = HAL_SWPMI_Receive(&hswpmi1,(uint32_t *)&obj_convrt.v, 1,100);
if(status== HAL_OK)
{
memset(tx_data_buf,0,32);
sprintf(&tx_data_buf[0],"<%x,%x,%x,%x>\n", obj_convrt.b[0],obj_convrt.b[1], obj_convrt.b[2], obj_convrt.b[3]);
HAL_UART_Transmit_IT(&huart1,(uint8_t *)tx_data_buf,4);
}
}
Transmitter side Microcontroller:
uint32_t tx_swmpi_data = 0x12345678;
while(1){
HAL_SWPMI_Transmit(&hswpmi1,(uint32_t *)&tx_swmpi_data,1,100);
HAL_Delay(1000);
}
Please help in this regards . I have also attached hardware schematic snap shots
2023-04-24 7:10 AM - edited 2023-11-20 7:18 AM
Sub: Single wire communication is not working
Dear Sir
I developed Hw design and and now writing firmware for stm32L476 microcontroller. Requirement of project is Single wire communication. I chose STM32L476, the reason behind was single wire communication (SWMPI on Port B pin12) peripheral present in this microcontroller. I took Bit rate 100kBits/sec.I connected both boards using swmpi wire and ground pins. Problem is that single wire communication is not working. I am not able to receive data at receiver side board.
i used as below code snippet:
To Initialize SWMPI
hswpmi1.Instance = SWPMI1;
hswpmi1.Init.VoltageClass = SWPMI_VOLTAGE_CLASS_B;
hswpmi1.Init.BitRate = 19;
hswpmi1.Init.TxBufferingMode = SWPMI_TX_NO_SOFTWAREBUFFER;
hswpmi1.Init.RxBufferingMode = SWPMI_RX_NO_SOFTWAREBUFFER;
i am using API for communication
Receiver Side microcontroller:
char tx_data_buf[32];
while(1){
status = HAL_SWPMI_Receive(&hswpmi1,(uint32_t *)&obj_convrt.v, 1,100);
if(status== HAL_OK)
{
memset(tx_data_buf,0,32);
sprintf(&tx_data_buf[0],"<%x,%x,%x,%x>\n", obj_convrt.b[0],obj_convrt.b[1], obj_convrt.b[2], obj_convrt.b[3]);
HAL_UART_Transmit_IT(&huart1,(uint8_t *)tx_data_buf,4);
}
}
Transmitter side Microcontroller:
uint32_t tx_swmpi_data = 0x12345678;
while(1){
HAL_SWPMI_Transmit(&hswpmi1,(uint32_t *)&tx_swmpi_data,1,100);
HAL_Delay(1000);
}
Please help in this regards . I have also attached hardware schematic snap shots
2023-04-24 7:14 AM
Define "not working"
Perhaps use a scope or logic analyzer to review signals and contrast against expected signals.
Your UART transmit doesn't seem to output enough data
2023-04-24 7:22 AM
Thanks for reply.
I am sending data one WORD size. with value 0x12345678 from one board as Transmitter unit ;
And Other MCU board Unit as Receiver to read data from SWMPI single wire communication.
But I got value as 0x00 00 00 00 , as four bytes. I also used Oscilloscope to view data pattern.
2023-04-24 9:45 AM
Perhaps try some of the examples, and test functionality of those, port to your platform
STM32Cube_FW_L4_V1.17.2\Projects\STM32L476G-EVAL\Examples\SWPMI\SWPMI_Session\Src\main.c
Find an FAE in your local sales office to discuss this with. Not sure there's much support of SWPMI here, or many with own hardware.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.