collapse

* Posts Recentes

cabo utp cravar por Alfredo Garcia
[Ontem às 22:24]


Misumi por senso
[Ontem às 21:26]


Alimentar Fita Leds por almamater
[22 de Setembro de 2018, 16:50]


Como transformar um mosquito killer de tomada em um portátil? por jm_araujo
[20 de Setembro de 2018, 13:35]


Carregador para 18650 por brunus
[19 de Setembro de 2018, 23:16]


Keysight UXR 110GHz BW, 256GS/s, 10-bit Real-Time Oscilloscope por SerraCabo
[19 de Setembro de 2018, 20:26]


leitura de voltagens com o analogRead(A0) por jm_araujo
[16 de Setembro de 2018, 18:36]


BostonDynamics - Vai uma mãozinha? por josecarlos
[16 de Setembro de 2018, 11:26]


Comunidades Online de Drones por MAntunes
[09 de Setembro de 2018, 18:00]


Sorte do catano por Njay
[09 de Setembro de 2018, 16:51]

Autor Tópico: STM32F4 DISCO(MB997) e LIS3DSH com HAL  (Lida 947 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline domitek

  • Mini Robot
  • *
  • Mensagens: 34
STM32F4 DISCO(MB997) e LIS3DSH com HAL
« em: 10 de Janeiro de 2016, 18:08 »
Boa Tarde,

Pessoal estou a usar a STM32F4DISCO e o acelerômetro LIS3DSH. IDE=Keil MDK ARM e a usar as livrarias HAL... (O código aqui presente apenas contem o SPI para o LIS3DSH)
O meu problema está ao configurar o SPI e ler o ID do acelerometro para verificar se está tudo bem! Ou seja ao ler o registo WHO_AM_I (0x0F) deveria retornar o valor 0011 1111 mas está a retornar 254 ou seja 0xFE. Alguém tem uma ideia do que poderá ser?

void MX_SPI1_Init(void)
{


  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;//LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;//1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;//4;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;//7;
  HAL_SPI_Init(&hspi1);
}
main()
{
      ****
      MX_GPIO_Init();
      MX_SPI1_Init();
      HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
   __HAL_SPI_ENABLE(&hspi1);
     write_accelerator_register(0x20, 0x17, &hspi1);
     write_accelerator_register(0x24, 0x00, &hspi1);
     uint8_t id;
     id=read_accelerator_register(0x0F, &hspi1);
      ****
}

void write_accelerator_register(uint8_t piRegister, uint8_t piData, SPI_HandleTypeDef* phSPI)
{
   // Set SS to low to select the accelerator on the SPI interface.
   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);


   // Send register index which we want to write.
   HAL_SPI_Transmit(phSPI, &piRegister, 1, 100);
   HAL_SPI_Transmit(phSPI, &piData,     1, 100);
   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
}
uint8_t read_accelerator_register(uint8_t piRegister, SPI_HandleTypeDef* phSPI)
{
   uint8_t iResult = 0;


   // Set SS to low to select the accelerator on the SPI interface.
   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_RESET);


   // Set MSB to indicate a read operation.
    piRegister |= 0x80;
    HAL_SPI_Transmit(phSPI, &piRegister, 1, 100);
    HAL_SPI_Receive(phSPI, &iResult, 1, 100);
   HAL_GPIO_WritePin(GPIOE, GPIO_PIN_3, GPIO_PIN_SET);
   return iResult;
}
Obrigado a todos desde já!

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Re: STM32F4 DISCO(MB997) e LIS3DSH com HAL
« Responder #1 em: 10 de Janeiro de 2016, 19:44 »
O meu conselho primeiro é para não usares o Cube (que usa o HAL).

Usa a standard peripheral library para F4.


O cube parece mt bonito e a ideia tb mas têm muitas bugs e vejo imensa gente a dizer-me que aquilo não está pronto para uso.


Por acaso estás a usar o que tá na placa?
Penso que haja exemplos nas packages já para isso. Penso que na SPL havia e na Cube tb (penso que nisso a Cube até tá melhor, com mais exemplos)


Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/