www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ST32F4 discovery in težave z UART
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Čet Dec 18, 2014 3:48 pm    Naslov sporočila:  ST32F4 discovery in težave z UART Odgovori s citatom

Zdravo,

nikakor mi ne uspe vzpostaviti delovanje UART1 in prosim za pomoč.

V CUBE sem nastavil uart in izhodne pine.

V glavnem programu:

definiram spremenljivke:
Koda:

UART_HandleTypeDef huart1;

/* Buffer used for transmission */
#define TXBUFFERSIZE 100
uint8_t aTxBuffer[TXBUFFERSIZE];

/* Buffer used for reception */
#define RXBUFFERSIZE 100
uint8_t aRxBuffer[RXBUFFERSIZE];



v main definiram txbuffer in inicializiram hardware:
Koda:


uint8_t aTxBuffer[]="Hello world....\n";

HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_I2C1_Init();
  MX_SPI2_Init();
  MX_TIM2_Init();
  MX_TIM3_Init();
  HAL_UART_MspInit(&huart1);    /* tega sem dodal jaz, in ne CUBE */
  MX_USART1_UART_Init();


in nato poskušam pisati:

Koda:

if(HAL_UART_Transmit(&huart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000)!= HAL_OK)
  {
 //   Error_Handler();   
  }



Vendar ne gre. Izpisa ni niti v debuggerju, niti fizično na serijskem portu.Kodo je zgeneriral Cube. Ko sem videl, da ni nikjer definirana alternativna funkcija Rx in Tx pinov (PA9 in PA10), sem to dodal (glej komentar v kodi)

Kaj delam narobe?

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
mujo
Član
Član



Pridružen-a: Ned 02 Jan 2005 19:24
Prispevkov: 722
Aktiv.: 3.25
Kraj: MB

PrispevekObjavljeno: Čet Dec 18, 2014 4:21 pm    Naslov sporočila:   Odgovori s citatom

z CUBE nisem kaj dosti delal ampak vseeno.

Si kje definiral kaj imaš v huart1 strukturi? V njej se tipično definira baudrate, handshaking, itd.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Čet Dec 18, 2014 5:12 pm    Naslov sporočila:   Odgovori s citatom

Evo, tole je inicializacija uarta:

Koda:

void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(huart->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* Peripheral clock enable */
    __USART1_CLK_ENABLE();
 
    /**USART1 GPIO Configuration   
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN USART1_MspInit 1 */

  /* USER CODE END USART1_MspInit 1 */
  }

}


in pa:

Koda:
void MX_USART1_UART_Init(void)
{

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart1);

}

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
jmivsek
Član
Član



Pridružen-a: Tor 06 Avg 2013 12:41
Prispevkov: 468
Aktiv.: 3.61
Kraj: Ajdovščina

PrispevekObjavljeno: Čet Dec 18, 2014 6:27 pm    Naslov sporočila:   Odgovori s citatom

S staro Peripheral lib je bila potrebna še komanda za zagon vmesnika, katere nadomestka v zgornji kodi ne najdem:
Koda:
   USART_Cmd(USART1, ENABLE);

Lep pozdrav
Janko
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
dule26
Član
Član



Pridružen-a: Tor 28 Sep 2010 7:30
Prispevkov: 26
Aktiv.: 0.16
Kraj: Murska Sobota

PrispevekObjavljeno: Čet Dec 18, 2014 6:58 pm    Naslov sporočila:   Odgovori s citatom

Si vključil Clock, pri nastavitvah RCC npr. HIGH SPEED CLOCK: crystal/ceramic Resonator? Poglej pri nastavitvah Clock Configuration, če ima UART1 nastavljen clock.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Čet Dec 18, 2014 7:58 pm    Naslov sporočila:   Odgovori s citatom

Janko:

usart je vključen z makrojem:
Koda:

#define __USART1_CLK_ENABLE()  (RCC->APB2ENR |= (RCC_APB2ENR_USART1EN))


dule:

clock je vključen, saj gpio delajo. tule je koda:

Koda:

void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 192;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV8;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);

}

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 75546.61

PrispevekObjavljeno: Čet Dec 18, 2014 7:59 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.

Nazadnje urejal/a . Pet Feb 27, 2015 9:54 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Čet Dec 18, 2014 8:04 pm    Naslov sporočila:   Odgovori s citatom

Predvidevam, da bi CUBE moral narediti kompletno inicializacijo in ni nič pozabil.

Je mogoče napaka, ker jaz uporabljam handle "huart1", v funkcijah pa je "huart"? po moje so to 2 različna kazalca, lahko pa se motim...

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 75546.61

PrispevekObjavljeno: Čet Dec 18, 2014 8:27 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.

Nazadnje urejal/a . Pet Feb 27, 2015 9:54 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Čet Dec 18, 2014 8:55 pm    Naslov sporočila:   Odgovori s citatom

Ima kdo 'surov' primer inicializacije uarta z registri? Da slpoh vem, da nisem kakega pozabil.
_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
malakai
Neznanec
Neznanec



Pridružen-a: Tor 03 Maj 2011 12:12
Prispevkov: 2
Aktiv.: 0.01
Kraj: Notranjska

PrispevekObjavljeno: Čet Dec 18, 2014 9:16 pm    Naslov sporočila:   Odgovori s citatom

@damo:

Zdi se mi, da ti manjka naslednja vrstica
Koda:
__GPIOA_CLK_ENABLE();  //#define __GPIOA_CLK_ENABLE()         (RCC->AHB1ENR |= (RCC_AHB1ENR_GPIOAEN))
kar ti je že MarE69 predlagal

Koda:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
IzidorM
Član
Član



Pridružen-a: Sob 01 Jan 2011 17:54
Prispevkov: 107
Aktiv.: 0.66
Kraj: Lj

PrispevekObjavljeno: Čet Dec 18, 2014 9:26 pm    Naslov sporočila:   Odgovori s citatom

stmf4cube ima primere uporabe uarta. Nekaj primerov se nahaja v:
STM32Cube_FW_F4_V1.3.0/Projects/STM32F4-Discovery/Examples/UART/

_________________
Lp, I
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
dejko1
Član
Član



Pridružen-a: Ned 16 Mar 2008 0:21
Prispevkov: 265
Aktiv.: 1.36
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 18, 2014 9:39 pm    Naslov sporočila:   Odgovori s citatom

CubeMX sam zažene HAL_UART_MspInit, tako da ti tega ni treba dodatno ročno poganjat.

Z debuggerjem poglej kaj ti vrne HAL_UART_Transmit(&huart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE, 5000) oz. kaj se dogaja znotraj funkcije. Z debuggerjem seveda lahko opazuješ tudi delovanje periferije (registre).

Če si na roko urejal je pa mogoče res da ti manjka ura za GPIO-je kot je že bilo napisano.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Čet Dec 18, 2014 10:06 pm    Naslov sporočila:   Odgovori s citatom

Ura za gpio-je je v funkciji, ki inicializira gpio-je.

Iskal sem, pa nisem nikjer našel, da bi se zagnal msp_init, zato sem ga dodal. No,saj če ga kličem 2x, ne škodi.

Razmišljam, ali sem pravilno nastavil pll in frekvence:

SYSCLK:24 MHz
HCLK:24
Ethernet PTP: 24
HCLK: 24
Cortex sys timer: 3
FCLK: 24

APB1 in APB2 timer in periph. clock: 24Mhz.

_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Čet Dec 18, 2014 11:21 pm    Naslov sporočila:   Odgovori s citatom

UART1 NE DELA v konfiguraciji PA9/PA10 na STM32F4-Discovery platici.
Na PA9/10 pinih so kondenzatorji za USB komunikacijo (VBUS, ID).

Uporabi pine PB6 (TX pin) in PB7 (RX pin).

PS: Nastavi hitrost procesorju na 168MHz.

Kristal = 8MHz

_________________
Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group