STM32 DISCOVERY ve LIS3DSH

Başlatan kemahli24, 29 Mayıs 2021, 18:17:18

kemahli24

Merhaba herkese,

Discovery board da bulunan lis3dsh accelometre sensörü ile veri almaya çalışıyorum. Cubemx ile spı ayarlarını yaptım ve hal kütüphaneleri ile değerleri alabildim. Şimdi ise değerleri register lar yardımıyla almaya çalışıyorum. Fakat şuana kadar bunu gerçekleştiremedim. Aşağıdaki write ve read fonksiyonlarını check edebilecek biri var mı? Sizce nerede yanlış yapıyorum?

void write(uint8_t adress, uint8_t data)
{
   uint8_t a = 0;
   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);

   SPI1->DR = adress;
   while (!(SPI1->SR & 1)) {

   }
   a=SPI1->DR;
   SPI1->DR = data;
   while (!(SPI1->SR & 1)) {

      }
      a=SPI1->DR;

   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
}


uint8_t read(uint8_t adress1)
{
   adress1 = adress1 | 0x80;
      uint8_t data1 = 0;
   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);

   SPI1->DR = adress1;
   while (!(SPI1->SR & 1)) {

      }
   data1 = SPI1->DR;
   SPI1->DR = 0;
   while (!(SPI1->SR & 1)) {

         }
   data1 = SPI1->DR;


   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
   return data1;
}

// burdan sonrası int main()
HAL_GPIO_WritePin(GPIOE,  GPIO_PIN_3, GPIO_PIN_SET);
     SPI1->CR1 |= (1<<6);
       write(0x25,0x80);
       write(0x23,1);

       write(0x20,0x67);
       write(0x25,0x64);
       write(0x23,0x48);
       write(0x24,0x48);

       i=read(0x20);


  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
     x = read(x1);



      y = read(y1);

          z = read(z1);

  }

kemahli24

Problem çözüldü arkadaşlar.

Proteus

Bende daha önce haberleşmede sorun yaşamamıştım elimde ki disco boardların b revizyonuna yükledim aynı kodu çalıştı c revizyonunda çalışmamıştı.Şemayı incelediğimde farklı parçalar olduğunu görmüştüm.