STM32F4xx RS485 Transmit Sorunu

Başlatan mcaltindal, 23 Eylül 2022, 20:33:57

mcaltindal

Merhaba Arkadaşlar,
STM32F401 UART üzüerinden veri göndermek DE ve RE Pinlerini aktif edip veriyi gönderiyorum. ancak hiç birşey gelmiyor debug yönetimi olarak breakpoint koyarak denediğimde veriyi gönderiyor DMA ilede denetim Hal kütüphanesi kullanıyorum sorun ondan mı çözemedim.

void CommEotCommand(void) {
	HAL_GPIO_TogglePin(USART2_EN_GPIO_Port, USART2_EN_Pin);
	TxBuffer[0] = device_StartFlag;
	TxBuffer[1] = DeviceAddress;
	TxBuffer[2] = device_EOT;
	TxBuffer[3] = device_StopFlag;
	TxBufferSize = 4;
	HAL_UART_Transmit_DMA(&huart2, TxBuffer, TxBufferSize);
HAL_GPIO_TogglePin(USART2_EN_GPIO_Port, USART2_EN_Pin);
}

gold3nnn

Belki DMA olduğu için DMA daha veriyi tasiyamadan De ve Re kapaniyordur. Breakpointde Dma ya zaman veriyorsun gibi geldi

Cemre.

#2
Dma Transfer Complete interrupt'ını aktif edip ilgili callback içerisinde DE/RE pinini low'a çekerseniz sorun çözülür. DMA henüz veriyi göndermeden pin'i low'a çekiyorsunuz belli ki.

Ek olarak, aslında DMA TC interrupt da tam olarak verinin gönderildiği anlamı çıkarmayacağı için son byte'ın gitmediğini veya hatalı gittiğini görebilirsiniz. Bunun için UART TXE bitini de kontrol etmek gerekiyor. Alternatif olarak DMA TC int rutini içerisinde UART TXE interrupt'ını aktif edip int geldiğinde pini low'a çekmeyi ve TXE int. deaktif etmeyi deneyebilirsiniz.

mcaltindal

Merhaba arakdaşlar önerileriniz için teşekkür ederim. Aslında devre kısmında sorun yok sorun tamamen bilgisayarda yazmış olduğum programda çıktı. Serial Port manuel okuma while döngüsünün dışına yazılmış olan read komutu olduğunda hiç okuma yapmadığını 2 günlük bir acı tecrübe ile öğrendim paylaşmak istedim.
Saygılarımla;