Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: Analog - 21 Mart 2018, 15:49:13

Başlık: Usart Veri Gönderme Sorunu
Gönderen: Analog - 21 Mart 2018, 15:49:13
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--;
}

}
Başlık: Ynt: Usart Veri Gönderme Sorunu
Gönderen: elektronart - 26 Mart 2018, 23:39:25
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

Başlık: Ynt: Usart Veri Gönderme Sorunu
Gönderen: Analog - 05 Nisan 2018, 13:41:48
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");
}
}
Başlık: Ynt: Usart Veri Gönderme Sorunu
Gönderen: mehmet - 05 Nisan 2018, 13:52:58
Kartın yollarını ve bağlı jumperleri
takip ediniz. Bazı modüllerde Rx ve Tx
ST-link için kullanılabiliyor.