11 Ağustos 2020, 16:50:46

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


MikroC Arm Uart İnterap

Başlatan universitelim54, 07 Haziran 2019, 17:16:27

universitelim54

Mrb. Arkadaşlar uarttan gelen veriyi interap yardımı ile almak istiyorum .. MikroC arm de uart için interap nasıl kurabilirim . Saygılarımla

Murat Mert

S.A. hangi mcu yu, hangi portu kullanacaksın kod gönderelim.
mert07

universitelim54

stm32f407 discovery kartını kullanıyorum. uart2 pa2 ve pa3 pinlerini haberlesme olarak bagladım.

universitelim54

Cevap verebiliecek yok mu...  acil cozmem gerekıyor bu sorunu

universitelim54

acil yardım arkadaslar cozemedım interupp olayını

universitelim54

08 Haziran 2019, 13:10:38 #5 Son düzenlenme: 10 Haziran 2019, 03:02:46 mehmet Sebep: Mesajınıza kod eklerken "Kod" bu tonunu kullanınız...
Mrb. Arkadaşlar formdaki degerli arkadaşımız Murat Mert ile görüşmemize istinaden sorunu çözdük. istedik ki bu sorunla karşılaşanlarda bu tecrübeden faydalansın. kodları buradan yayınlıyorum... saygılar 


//  Murat Mert & Evliya Songül


// Stm32f407 discovery


unsigned char rcv 0;
char *yazi="deneme\n\r";


void set_up();
void USART2_send(unsigned char value);
void yaz(char *s);








void main() 
{
     
set_up();
     

     
yaz(yazi);
     
Delay_ms(500);

     while(
1)
     {
     
       
yaz(yazi); Delay_ms(500);   // uart hattının calıstıgını gozlemlemek ıcın her 500 ms de bır char 
                                   //   *yazi="deneme yazi yazma\n\r"; gonderılıyor
     
     
     
}

}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void data_received()iv IVT_INT_USART2 ics ICS_AUTO          //RX interrupt burada olusuyor
{
   if(
USART2_SRbits.RXNE == 1)          //RX buffer veri geldi
   
{
       
rcv = (0xFF USART2_DR);        //gelen datayı okuma registeri
   
}
   
USART2_send(rcv);                    //gelen datayı gönder _usart2_send fonksiyonu ile geri gonder
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void USART2_send(unsigned char value)
{
     
USART2_DR = (value);//& 0xFF);      // yollanacak datayıusart2 nin registerinden yolla
     
while(USART2_SRbits.TXE == 0);     //data transmisyonu komple bitene kadar bekle
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void yaz(char *s)
{

  while(*
s)
  {
    
USART2_send(*s++); // Send Char_karekter yolla
  
}
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void set_up()
{


UART2_Init_Advanced(9600_UART_8_BIT_DATA_UART_NOPARITY_UART_ONE_STOPBIT, &_GPIO_MODULE_USART2_PA23); // seri port ayarı
USART2_CR1bits.RXNEIE 1;             // seri port enable RX interrupt biti aktif
NVIC_IntEnable(IVT_INT_USART2);        // usart2 kesme aktif
     


}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

Murat Mert

 Sn. Arkadaımızın verdiğini ben de kod içinde vereyim.
sbit LED1  at GPIOD_ODR.B12;
sbit LED2  at GPIOD_ODR.B13;
sbit LED3  at GPIOD_ODR.B14;
sbit LED4  at GPIOD_ODR.B15;

unsigned char rcv 0;
char *yazi="deneme yazi yazma\n\r";

void data_received();//iv IVT_INT_USART2 ics ICS_AUTO
void set_up();
void USART2_send(unsigned char value);
void yaz(char *s);








void main() 
{
     
set_up();
     

     
yaz(yazi);
     
Delay_ms(500);

     while(
1)
     {
     
       
yaz(yazi); Delay_ms(500);
     
     
     }

}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void data_received()iv IVT_INT_USART2 ics ICS_AUTO          //RX interrupt subroutine
{
   if(
USART2_SRbits.RXNE == 1)          //RX buffer veri geldi
   
{
       
rcv = (0xFF USART2_DR);        //gelen datayı okuma registeri
   
}
   
USART2_send(rcv);                    //gelen datayı gönder _******deneme için ******* normal rutinde burada olmaz
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void USART2_send(unsigned char value)
{
     
USART2_DR = (value);//& 0xFF); // yollanacak datayıusart2 nin registerinden yolla
     
while(USART2_SRbits.TXE == 0);     //data transmisyonu komple bitene kadar bekle
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------
void yaz(char *s)
{

  while(*
s)
  {
    
USART2_send(*s++); // Send Char_karekter yolla
  
}
}
//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

void set_up()
{

GPIO_Digital_Output(&GPIOD_BASE_GPIO_PINMASK_12);
GPIO_Digital_Output(&GPIOD_BASE_GPIO_PINMASK_13);
GPIO_Digital_Output(&GPIOD_BASE_GPIO_PINMASK_14);
GPIO_Digital_Output(&GPIOD_BASE_GPIO_PINMASK_15);

UART2_Init_Advanced(9600_UART_8_BIT_DATA_UART_NOPARITY_UART_ONE_STOPBIT, &_GPIO_MODULE_USART2_PA23); // seri port ayarı
     
USART2_CR1bits.RXNEIE 1;             // seri port enable RX interrupt biti aktif
     
NVIC_IntEnable(IVT_INT_USART2);        // usart2 kesme aktif
     
     
Delay_ms(1000);
     
     
LED1=1Delay_ms(1000);
     
LED1=0Delay_ms(1000);
     
LED2=1Delay_ms(1000);
     
LED2=0Delay_ms(1000);
     
LED3=1Delay_ms(1000);
     
LED3=0Delay_ms(1000);
     
LED4=1Delay_ms(1000);
     
LED4=0Delay_ms(1000);

}

//-------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------

mert07