Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: ArifAhmet - 20 Eylül 2014, 14:32:01

Başlık: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 14:32:01
Merhabalar,
KEİL ile stm32f4 kullanarak pin okumaya çalışıyorum. Kodlar şöyle;

if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) {
   
    //İşlemler..

}
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0)) {

   //İşlemler..

}


GPIOA doğru bir şekilde çalışıyor fakat C portunda hiçbirşey bağlı olmamasına rağmen sürekli bu koşulun içine giriyor, ancak gnd'ye bağlayınca duruyor. Sorun nerdedir acaba?
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: kimlenbu - 20 Eylül 2014, 14:57:15
Pin ayarlarını nasıl yaptın, onun da kodunu koyar mısın ?
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: JKramer - 20 Eylül 2014, 14:57:46
Dahili pullup'lar aktif olabilir, GPIO init kısmını incelemeniz lazım.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 15:15:30

GPIO_InitDef.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 ;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitDef);

GPIO_InitDef.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 ;
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitDef);
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: minicihazlar - 20 Eylül 2014, 15:55:35
Peki bu GPIO'ların clock'ları da aktif edildimi?
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 16:00:24
Evet aktif
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: LukeSkywalker - 20 Eylül 2014, 17:20:03
Discovery kiti kullaniyorsaniz c0 pini bir yerlere baglanmis olabilir. Kontrol edin semadan.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 17:25:41
Alıntı yapılan: LukeSkywalker - 20 Eylül 2014, 17:20:03
Discovery kiti kullaniyorsaniz c0 pini bir yerlere baglanmis olabilir. Kontrol edin semadan.
Onuda düşündüm. O yüzden B portunuda baktım aynı şey yine oldu. A portunun diğer pinlerine bağladım yine aynı şey oldu.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: LukeSkywalker - 20 Eylül 2014, 17:30:14
Giris olan pinler bosta mi duruyor?
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: muhittin_kaplan - 20 Eylül 2014, 17:31:32
kodların tamamını görelim..
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 17:51:10
Alıntı yapılan: LukeSkywalker - 20 Eylül 2014, 17:30:14
Giris olan pinler bosta mi duruyor?
Evet.


/*    Keil project for USB HID Device
*
*    Before you start, select your target, on the right of the "Load" button
*
*    @author     Tilen Majerle
*    @email        tilen@majerle.eu
*    @website    http://stm32f4-discovery.com
*    @ide        Keil uVision 5
*/
/* Include core modules */
#include "stm32f4xx.h"
/* Include my libraries here */
#include "defines.h"
#include "tm_stm32f4_usb_hid_device.h"
#include "tm_stm32f4_delay.h"
#include "tm_stm32f4_disco.h"

#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"

int main(void) {

GPIO_InitTypeDef GPIO_InitDef;
    uint8_t already = 0;
    TM_USB_HIDDEVICE_Mouse_t Mouse;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);

GPIO_InitDef.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 ;
//Mode output
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
//Output type push-pull
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
//With pull down resistor
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN;
//50MHz pin speed
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;

//Initialize pin on GPIOA port
GPIO_Init(GPIOA, &GPIO_InitDef);
GPIO_InitDef.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 ;
//Mode output
GPIO_InitDef.GPIO_Mode = GPIO_Mode_IN;
//Output type push-pull
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
//With pull down resistor
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_DOWN;
//50MHz pin speed
GPIO_InitDef.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitDef);
GPIO_ResetBits(GPIOC, GPIO_Pin_0);
   
    /* Initialize system */
    SystemInit();
   
    /* Initialize leds */
    TM_DISCO_LedInit();
   
    /* Initialize button */
  //  TM_DISCO_ButtonInit();
   
    /* Initialize delay */
    TM_DELAY_Init();
   
    /* Initialize USB HID Device */
    TM_USB_HIDDEVICE_Init();
   
    /* Set default values for mouse struct */
    TM_USB_HIDDEVICE_MouseStructInit(&Mouse);
    /* Set default values for keyboard struct */

                     while(1){
        /* If we are connected and drivers are OK */
        if (TM_USB_HIDDEVICE_GetStatus() == TM_USB_HIDDEVICE_Status_Connected) {
            /* Turn on green LED */
            TM_DISCO_LedOn(LED_GREEN);
           
/* Simple sketch start */   

         /* If you pressed button right now and was not already pressed */
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { /* Button on press */
   
    /* Rotate wheel on mouse */
    Mouse.YAxis = -10; /* Move 10 units = 10 * 3 lines on text editor in windows */
   
    /* Send mouse report */
    TM_USB_HIDDEVICE_MouseSend(&Mouse);

}
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0)) { /* Button on press */
    GPIO_ResetBits(GPIOC, GPIO_Pin_0);
    /* Rotate wheel on mouse */
    Mouse.YAxis = 10; /* Move 10 units = 10 * 3 lines on text editor in windows */
   
    /* Send mouse report */
    TM_USB_HIDDEVICE_MouseSend(&Mouse);

}
 
}
           
    }
}

Kodların tamamı bu muhittin hocam.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: minicihazlar - 20 Eylül 2014, 17:52:15
GPIO_ReadInputDataBit fonksiyonuna bakınca :


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;

  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));

  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}


Bu kodun tek takılı kalabileceği yer "assert_param" kısımları ama bu da pek mümkün görünmüyor. Dolayısıyla tek yer kalıyor o da bence stack/heap ayarları. Stack alanı yetmiyor olabilir mi? Dolayısıyla fonksiyona dallanacağı zaman takılıp kalıyordur, hatta büyük ihtimalle fault/exception handler'lardan birine giriyordur kod, hiç kodun takıldığında nerde durduğuna baktınız mı? Bunun yerine aynı yerden başka bir fonksiyon çağırdığınızda nasıl davranıyor?
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: LukeSkywalker - 20 Eylül 2014, 17:55:22
Pinleri birde pulldown direnci ile saseye cekip deneme yapar misiniz? Gerci dahili pdown direncleri aktif edilmis ama siz yinede bir deneyin.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 18:10:02
Alıntı yapılan: LukeSkywalker - 20 Eylül 2014, 17:55:22
Pinleri birde pulldown direnci ile saseye cekip deneme yapar misiniz? Gerci dahili pdown direncleri aktif edilmis ama siz yinede bir deneyin.
Onuda denedim olmadı.
Alıntı yapılan: minicihazlar - 20 Eylül 2014, 17:52:15
GPIO_ReadInputDataBit fonksiyonuna bakınca :


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;

  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));

  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}


Bu kodun tek takılı kalabileceği yer "assert_param" kısımları ama bu da pek mümkün görünmüyor. Dolayısıyla tek yer kalıyor o da bence stack/heap ayarları. Stack alanı yetmiyor olabilir mi? Dolayısıyla fonksiyona dallanacağı zaman takılıp kalıyordur, hatta büyük ihtimalle fault/exception handler'lardan birine giriyordur kod, hiç kodun takıldığında nerde durduğuna baktınız mı? Bunun yerine aynı yerden başka bir fonksiyon çağırdığınızda nasıl davranıyor?

Sanmıyorum. Çünkü PortA'da çalışan şey PortC'de neden çalışmıyor. Sorunun fonksiyonlarda olduğunu düşünmüyorum.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: muhittin_kaplan - 20 Eylül 2014, 18:26:07
hocam syeteminit i ilk yazın deneyelim..

mesaj birleştirme:: 20 Eylül 2014, 18:36:21

programı sadece pin okuma üzerine kur.
USB kodları etkiliyor sanırım. PC0 usb üzerinde görülüyor.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: Mucit23 - 20 Eylül 2014, 18:43:35
GPIO init kodlarını diğer init kodlarının altına yapıştırıp denermisin.

System init en ilk çağrılacak.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ArifAhmet - 20 Eylül 2014, 19:03:23
Alıntı yapılan: muhittin_kaplan - 20 Eylül 2014, 18:26:07
hocam syeteminit i ilk yazın deneyelim..

mesaj birleştirme:: 21 Eylül 2014, 08:36:21

programı sadece pin okuma üzerine kur.
USB kodları etkiliyor sanırım. PC0 usb üzerinde görülüyor.
Ondan olduğunuda sanmıyorum çünkü diğer pinleride denedim yine aynı şey.
Alıntı yapılan: Mucit23 - 20 Eylül 2014, 18:43:35
GPIO init kodlarını diğer init kodlarının altına yapıştırıp denermisin.

System init en ilk çağrılacak.
Yaptım hocam değişen bişey olmadı.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: muhittin_kaplan - 20 Eylül 2014, 19:07:35
Hocam problemi Sıkıstırmanız gerek.

HID le alakalı Kodları Kullanmayın. sadece PIN okuyun.
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: Mucit23 - 20 Eylül 2014, 19:09:47
O halde muhittin abinin söylediğini yap. Template bir program hazırla buton okumaktan başka hiçbirşey yapma ekstra kütüphane felan ekleme. Bunu dene sonra sonucu yaz tekrar bakalım.

Edit: Muhittin abi önce yazmış dediğini yap :)
Başlık: Ynt: STM32F4 pin okuma problemi
Gönderen: ÖmerYıldırım - 07 Temmuz 2017, 01:35:22
 Aynı problemi bende yaşıyorum malesef  ama çözümü başka bir bilgisayar kullanmakla çözdüm ve aynı zamanda keil problemli diyebilirim en  basit örnek verim hal kütüphanesi kullandım olmadı gittim. std kullandım oda olmadı bir türlü adc den aldım veriyi usarta basamadım sonunda gidip bir led yakım dedim bari o çalışıyormu :) oda olmayınca oturdum tek tek registerlara bakarak yazdım keilda sanırsam büyük bir problem var dedim buradanda başarısızlık elde edince sonuç olarak. Gidip bilgisayari değiştirdim sorun problem ortadan kaldı.
:)