Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 9.01 Kraj: Krško
|
Objavljeno: Čet Dec 18, 2014 3:48 pm Naslov sporočila: ST32F4 discovery in težave z UART |
|
|
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 |
|
|
mujo Član
Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 722 Aktiv.: 3.24 Kraj: MB
|
Objavljeno: Čet Dec 18, 2014 4:21 pm Naslov sporočila: |
|
|
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 |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 9.01 Kraj: Krško
|
Objavljeno: Čet Dec 18, 2014 5:12 pm Naslov sporočila: |
|
|
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 |
|
|
jmivsek Član
Pridružen-a: Tor 06 Avg 2013 12:41 Prispevkov: 468 Aktiv.: 3.59 Kraj: Ajdovščina
|
Objavljeno: Čet Dec 18, 2014 6:27 pm Naslov sporočila: |
|
|
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 |
|
|
dule26 Član
Pridružen-a: Tor 28 Sep 2010 7:30 Prispevkov: 26 Aktiv.: 0.16 Kraj: Murska Sobota
|
Objavljeno: Čet Dec 18, 2014 6:58 pm Naslov sporočila: |
|
|
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 |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 9.01 Kraj: Krško
|
Objavljeno: Čet Dec 18, 2014 7:58 pm Naslov sporočila: |
|
|
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 |
|
|
. Član
Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 75257.44
|
Objavljeno: Čet Dec 18, 2014 7:59 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
Nazadnje urejal/a . Pet Feb 27, 2015 9:54 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 9.01 Kraj: Krško
|
Objavljeno: Čet Dec 18, 2014 8:04 pm Naslov sporočila: |
|
|
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 |
|
|
. Član
Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 75257.44
|
Objavljeno: Čet Dec 18, 2014 8:27 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
Nazadnje urejal/a . Pet Feb 27, 2015 9:54 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 9.01 Kraj: Krško
|
Objavljeno: Čet Dec 18, 2014 8:55 pm Naslov sporočila: |
|
|
Ima kdo 'surov' primer inicializacije uarta z registri? Da slpoh vem, da nisem kakega pozabil. _________________ Dobrga štromarja samo slab šnops strese! |
|
Nazaj na vrh |
|
|
malakai Neznanec
Pridružen-a: Tor 03 Maj 2011 12:12 Prispevkov: 2 Aktiv.: 0.01 Kraj: Notranjska
|
Objavljeno: Čet Dec 18, 2014 9:16 pm Naslov sporočila: |
|
|
@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 |
|
|
IzidorM Član
Pridružen-a: Sob 01 Jan 2011 17:54 Prispevkov: 107 Aktiv.: 0.66 Kraj: Lj
|
Objavljeno: Čet Dec 18, 2014 9:26 pm Naslov sporočila: |
|
|
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 |
|
|
dejko1 Član
Pridružen-a: Ned 16 Mar 2008 0:21 Prispevkov: 265 Aktiv.: 1.35 Kraj: Ljubljana
|
Objavljeno: Čet Dec 18, 2014 9:39 pm Naslov sporočila: |
|
|
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 |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 9.01 Kraj: Krško
|
Objavljeno: Čet Dec 18, 2014 10:06 pm Naslov sporočila: |
|
|
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 |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.20 Kraj: Črnomelj
|
Objavljeno: Čet Dec 18, 2014 11:21 pm Naslov sporočila: |
|
|
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 |
|
|
|