Skocz do zawartości

STM32F4 Nucleo F446ZE komunikacja UART


Qwazi

Pomocna odpowiedź

Witam,

Posiadam płytkę STM32F4 Nucleo F446ZE. Korzystam z kursu pod STM32F1. Utknąłem w miejscu z komunikacją UART. Próbowałem dostosować program do swojej płytki, następuje debugowanie lecz brak rezultatów w Tera Term. Czy ktoś może programował tą płytkę, wie o co chodzi?

Załączam swój program:

/**
 ******************************************************************************
 * @file    main.c
 * @author  Ac6
 * @version V1.0
 * @date    01-December-2013
 * @brief   Default main function.
 ******************************************************************************
*/

#include "stm32f4xx.h"

 void send_char(char c)
{
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
USART_SendData(USART2, c);
}

void send_string(const char* s)
{
while (*s)
send_char(*s++);
}

int main(void)
{
GPIO_InitTypeDef gpio;
USART_InitTypeDef uart;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOG, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

GPIO_StructInit(&gpio);
gpio.GPIO_Pin = GPIO_Pin_5;
gpio.GPIO_Mode = GPIO_Mode_AF;
gpio.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOD, &gpio);

gpio.GPIO_Pin = GPIO_Pin_6;
gpio.GPIO_Mode = GPIO_Mode_IN;
GPIO_Init(GPIOD, &gpio);

USART_StructInit(&uart);
uart.USART_BaudRate = 9600;
USART_Init(USART2, &uart);

USART_Cmd(USART2, ENABLE);

while (1) {
send_string("Hello world! \r\n");
}
}
Link do komentarza
Share on other sites

Musisz ustawić typ użytej funkcji alternatywnej dla pinów. Podpowiem, że potrzebujesz wywołać:

GPIO_PinAFConfig

Wygląda na to, że USART2 jest jako AF7, czyli pewnie coś w stylu GPIO_AF_USART2 trzeba będzie przekazać jako jeden z parametrów.

Link do komentarza
Share on other sites

Zastosowałem się do rad, kod wygląda tak:

#include "stm32f4xx.h"
#include <stdio.h>

void send_char(char c){
   while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
   USART_SendData(USART2, c);
}

void send_string(const char* s){
   while (*s)
       send_char(*s++);
}

volatile uint32_t timer_ms = 0;

void SysTick_Handler()
{
if (timer_ms) {
timer_ms--;
}
}

void delay_ms(int time)
{
timer_ms = time;
while (timer_ms) {};
}

int main(void)
{
   GPIO_InitTypeDef gpio;
   USART_InitTypeDef usart;

   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

   GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_USART2);
   GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_USART2);
   GPIO_StructInit(&gpio);
   USART_StructInit(&usart);

//LED
   gpio.GPIO_Pin = GPIO_Pin_7;
   gpio.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_Init(GPIOB, &gpio);
//USART
   //Tx
   gpio.GPIO_Pin=GPIO_Pin_5;
   gpio.GPIO_Mode=GPIO_Mode_AF;
   GPIO_Init(GPIOD,&gpio);
   //Rx
   gpio.GPIO_Pin=GPIO_Pin_6;
   gpio.GPIO_Mode=GPIO_Mode_IN;
   GPIO_Init(GPIOD,&gpio);

//USART Config
   usart.USART_BaudRate = 115200;
   USART_Init(USART2,&usart);
   USART_Cmd(USART2,ENABLE);

   SysTick_Config(SystemCoreClock / 1000);

   while(1){
       GPIO_SetBits(GPIOB, GPIO_Pin_7);
       delay_ms(100);
       GPIO_ResetBits(GPIOB, GPIO_Pin_7);
       delay_ms(100);

       send_string("Hello\r\n");
   }
}

i nadal nic... Zaczynam myśleć, że jest to problem ze sterownikami, gdyż po napisaniu tego programu dioda działa jak powinna i w momencie jej zapalenia powinienem mieć komunikat, a komunikatu brak.

P.S. Zrobione! 4dni kombinowania i działa. Zmiana w rejestrach, dokładne przeczytanie dokumentacji, lekka modyfikacja i działa jak powinno!

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.