STM32F429 Ustawienie pinów pod UART5

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
StaryAnoda

STM32F429 Ustawienie pinów pod UART5

Postautor: StaryAnoda » poniedziałek 31 lip 2017, 18:45

Hej

Panowie czy może ktoś sprawdzić czy dobrze skonfigurowałem pin pracujący jako RX w UART5;
Pytam ponieważ nie mogę uruchomić przerwania odbiorczego.

Kod: Zaznacz cały

#include "stm32f4xx.h"

uint32_t I;

void UART5_GPIO_INIT(void);

int main(void)
{
   RCC->APB1ENR = RCC_APB1ENR_UART5EN;
   RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN;
   
   RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_GPIOCEN;
   __DSB();

   GPIOG->MODER = GPIO_MODER_MODER13_0 | GPIO_MODER_MODER14_0;
   UART5_GPIO_INIT();

   UART5->BRR = SystemCoreClock/9600;
   UART5->CR1 = USART_CR1_UE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE;
   NVIC_EnableIRQ(UART5_IRQn);
   SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk;

   //__WFI();

   while(1)
   {
      for(I = 0; I < 1000000; I++)
      {

      }
      GPIOG->ODR ^= GPIO_ODR_ODR_13;
   }
   return 0;
}

__attribute__((interrupt)) void UART5_IRQHandler(void)
{
   if (UART5->SR & USART_SR_RXNE)
   {
      UART5->SR &= ~USART_SR_RXNE;
      uint16_t tmp;
      tmp = UART5->DR;
      UART5->DR = tmp+1;
   }
   GPIOG->ODR ^= GPIO_ODR_ODR_14;
}

void UART5_GPIO_INIT(void)
{
   // Config for RX PD2
   GPIOD -> MODER |= GPIO_MODER_MODER2_1;
   GPIOD -> OTYPER |= 0x00000004;
   GPIOD -> PUPDR |= 0x00000020;
   GPIOD -> AFR[0] |= 0x00000800;
}



Mały update program działa ale nie do końca poprawnie. Po uruchomieniu programu dioda Miga: GPIOG->ODR ^= GPIO_ODR_ODR_13;
Po kliknięciu niektórych klawiszy przerwanie jest wywoływane na przykład spacji ale muszą ją kliknąć czasami jeden raz czasami dwa. Prze wejściu w procedurę przerwania dioda przestaję migać do ponownego resetu procesora.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: STM32F429 Ustawienie pinów pod UART5

Postautor: Antystatyczny » poniedziałek 31 lip 2017, 21:52

Jeśli możesz, dorzuć komentarze przy wierszach modyfikujących wartości rejestrów, żebym nie musiał się przegrzebywać przez opisy wszystkich bitów. Najczęściej błędy siedzą w kolejności działań, w wywoływaniu przerwań w przerwaniu itp.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

StaryAnoda

Re: STM32F429 Ustawienie pinów pod UART5

Postautor: StaryAnoda » wtorek 01 sie 2017, 20:50

Oko problem ogarnięty

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: STM32F429 Ustawienie pinów pod UART5

Postautor: Antystatyczny » wtorek 01 sie 2017, 21:00

A gdzie miałeś błąd?
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości