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--;
}
}
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
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");
}
}
Kartın yollarını ve bağlı jumperleri
takip ediniz. Bazı modüllerde Rx ve Tx
ST-link için kullanılabiliyor.