GNSS Modül SPI haberleşme

Başlatan orhun erol, 14 Nisan 2017, 16:43:36

orhun erol

Arkadaşlar merhaba;

Elimde STM32F4 disco kartı ve bir gnss modül (TELİT SE868 V2) var. GNSS modülü discovery kartımla spi üzerinden haberleştirmem gerekiyor. İşlemciyi HAL kütüphanesini kullanarak programlıyorum. Modülün datasheetinde spi konfigürasyonunda belirttildiği gibi ayarları yaptım ancak verileri alamıyorum. Aranızda daha önce gps ya da gnss modül kullanıp spi ile haberleştireniniz oldu mu ? Nerede eksik yapıyor olabilirim ? Yardımcı olursanız çok sevinirim. Hepinize iyi çalışmalar kolay gelsin. Yaptığım spi konfigürasyonunun resmini paylaşıyorum. Modülün spi ayarları da ;

--> Maximum speed is 6.8 MHz.

-->Frame size is 8 bits, with MSB sent first.

-->Modül SPI Slave olarak çalışıyor. Bende işlemciyi SPI full-dublex master olarak çalıştırıyorum.

-->Modül SPI Mode 1 ve Mode 3 destekliyor. Default ayarı SPI Mode 1.




skara1214

elinizde osiloskop,logic analyzer varsa mosi pinini ve clocku inceleyin data çıkıyormu diye.eğer çıkmıyorsa spi yi enable etmemişsiniz demektir.
datashettinten spi cr1 registerinden enable edip öyle deneyin.
örnek olarak(stm32f103 te böyle f4 te registere bakıp hangi biti enable etmeniz gerektiğine bakabilirsiniz) SPI1 i enable etmek için;
SPI1->CR1|=0x0040;//SPI1 ENABLE
Herkes ölür ama herkes gerçekten yaşamaz

orhun erol

Öncelikle cevap verdiğiniz ve ilgilendiğiniz için teşekkür ederim. Elimde logic analayzer ve osiloskop ikiside var ve dediğiniz tavsiyeleri uyguladım. Clock ve mosi pinlerini inceledim. Sorun spi clock pininde gibi duruyor. Ayrıca keilde debug yaptığımda spi registerlarında SPI' ın enable edildiğini gösteriyor. Ben yinede dediğiniz gibi CR1 registerında SPI' ı enable ettim. Clock hattında ki sorunu nasıl çözebilirim. Logic analyzerın ekran çıktısını ve debug ekran görüntüsünü paylaşıyorum. Belki de benim tespitlerim yanlıştır.






skara1214

yani mosi çalışıp clk çalışmıyorsa; o pini yanlışlıkla giriş falan tanımlamışsınızdır.
Herkes ölür ama herkes gerçekten yaşamaz

kimlenbu

MOSI, MISO, CLK, CS uçlarını modüle doğru bağladın mı ? Neden UART kullanmıyorsun ? Hız çok önemli mi ?

Ayrıca ne kod ne devre şeman var, yorum yapmak çok zor.

orhun erol

#5
@skara1214  HAL Library ile çalışıyorum. Peripheral konfigürasyonunu da STM32CubeMx programından yapıyorum. Bu yüzden spi pinlerinde hata yapma olasılığım yok.

@kimlenbu Pinleri doğru bağladığımdan eminim ki kaç kere kontrol ettim. Kullanacağım asıl işlemci STM32F103 bu işlemcinin de uartları başka modüller için kullanılıyor. Bu yüzden spi kullanmak zorundayım. Software uart denedim ancak başaramadım.  Hız da çok önemli çünkü modülün datasheetinde clock hızını max 6.8 MHz olarak belirtmişler. Kod da aşağıda yazdığım gibi.


uint8_t data[100];

int main(void){

HAL_Init();

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

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();

  /* USER CODE BEGIN 2 */
   
     HAL_Delay(200);

/* USER CODE END 2 */

WHİLE(1){

if( __HAL_SPI_GET_FLAG(&hspi1,SPI_FLAG_RXNE) == SET ){
         
      HAL_Delay(100);
      
      HAL_GPIO_WritePin(gnss_cs_GPIO_Port,gnss_cs_Pin,GPIO_PIN_RESET);
      HAL_SPI_Receive(&hspi1,(uint8_t*)data,10,10);
      HAL_GPIO_WritePin(gnss_cs_GPIO_Port,gnss_cs_Pin,GPIO_PIN_SET);
      }
      
      HAL_Delay(100);
      
      HAL_GPIO_WritePin(gnss_cs_GPIO_Port,gnss_cs_Pin,GPIO_PIN_RESET);
      HAL_SPI_Transmit(&hspi1,(uint8_t*)0xA7,1,10);
      HAL_GPIO_WritePin(gnss_cs_GPIO_Port,gnss_cs_Pin,GPIO_PIN_SET);
      
      HAL_Delay(100);
      
      HAL_GPIO_WritePin(gnss_cs_GPIO_Port,gnss_cs_Pin,GPIO_PIN_RESET);
      HAL_SPI_Transmit(&hspi1,(uint8_t*)0xB4,1,10);
      HAL_GPIO_WritePin(gnss_cs_GPIO_Port,gnss_cs_Pin,GPIO_PIN_SET);
    }
}

bu kodu çalıştırdığımda logic analyzer da aldığım çıktı.



skara1214

yazma ve okuma yapıyorsun görüldüğü üzere. eğer istediğin şeyleri okuyamıyorsan senin spi modunla(clockun high-low da durması ve örnekleme yeri) okuyacağın modülinki uymuyordur.
Herkes ölür ama herkes gerçekten yaşamaz