Usart Veri Gönderme Sorunu

Başlatan Analog, 21 Mart 2018, 15:49:13

Analog

Herkese merhaba
STM32f429  uzerinden usart ile bir haberleşme yapmak istiyorum ama bir türlü karttan veri gönderemedim ama bu kodun üzerine veri alma kodunu eklediğim zaman veri almada bir sıkıntı olmuyor. Geri bildirim yaparsanız sevinirim
#include "stm32f4xx.h"                  // Device header
#include <stdio.h>
#include <stdlib.h>

char str[50];
uint32_t i=600000;

void USART_Puts(USART_TypeDef* USARTx, volatile char *s)
{
	while(*s)
	{
		while(! (USARTx ->SR & 0x00000040));
		USART_SendData(USARTx,*s);
		*s++;
	}
}

int main()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2);
	
	USART_InitStructure.USART_BaudRate=115200;
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode=USART_Mode_Tx;
	USART_InitStructure.USART_Parity=USART_Parity_No;
	USART_InitStructure.USART_StopBits=USART_StopBits_1;
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;
	USART_Init(USART2, &USART_InitStructure);
	USART_Cmd(USART2, ENABLE);
	
	while(1)
	{
		sprintf(str, "1111\n");
		USART_Puts(USART2,str);
		while(i);
		i--;
	}
		
}

elektronart

kodun sadece 1 kez çalışıyor görememiş olabilir misin, while(i); yerine şunu dene

while(i) i--; // i 0a kadar sayacak ve çıkacak
i=60000; //i yi yeniden eşitleyecek sonra while(1) başına geri dönecek ve usartputs tekrar çalışacak

Açık Elektronik

Analog

Alıntı yapılan: elektronart - 26 Mart 2018, 23:39:25kodun sadece 1 kez çalışıyor görememiş olabilir misin, while(i); yerine şunu dene

while(i) i--; // i 0a kadar sayacak ve çıkacak
i=60000; //i yi yeniden eşitleyecek sonra while(1) başına geri dönecek ve usartputs tekrar çalışacak




yardımınız için teşekkür ederim. Yazmış olduğunuz kısmı denedim ama yine bir sonuç alamadım. Onun yerine aşağıdaki kodu yazıp çalıştırınca oldu. (AYNI kod PA2 de olmuyor sanırım kartta bir sıkıntı var)


void USART_Put(char *s)
{
	while (*s)
	{
		while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
		USART_SendData(USART1, *s++);
		
	}
}

int main()
{
	GPIO_InitTypeDef   GPIO_InitStructure;
	USART_InitTypeDef   USART_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	
  USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Tx;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_Init(USART1, &USART_InitStructure);
  USART_Cmd(USART1, ENABLE);
		
  USART_Put("MERHABA");
		
  while(1)
	{
			USART_Put("DUNYA\n");
	}
}

mehmet

Kartın yollarını ve bağlı jumperleri
takip ediniz. Bazı modüllerde Rx ve Tx
ST-link için kullanılabiliyor.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr