реклама на сайте
подробности

 
 
> STM32F407+LSM303C, STM32F407 (дискавери)
Volldemar
сообщение Oct 27 2015, 14:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342



Доброго времени суток, форумчане.

Вот уже пару дней бьюсь над проблемкой, не выходит "каменный цветок".
Собственно проблема в следующем, пытаюсь работать с акселерометром в микросхеме LSM030C, именно с интексом "C"!!!

Пытаюсь для начала вычитать регистр с ID - и не выходит, точнее выхлоп содержит незначащий байт (DUMMY_BYTE).
Вот исходники, может кто-то уже работал с этим "зверем", помогите, направте на путь истинный sm.gif
CODE

#define NSS_TRUE GPIO_SetBits ( SPIx_NSS_GPIO_PORT, SPIx_NSS_PIN )
#define NSS_FALSE GPIO_ResetBits ( SPIx_NSS_GPIO_PORT, SPIx_NSS_PIN )
#define READbit ( ( uint8_t ) 0x80 )
#define DUMMY_BYTE ( ( uint8_t ) 0x5A )

// Настраиваем и включаем SPI
spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi.SPI_Mode = SPI_Mode_Master;
spi.SPI_DataSize = SPI_DataSize_8b;

spi.SPI_CPOL = SPI_CPOL_Low;
spi.SPI_CPHA = SPI_CPHA_1Edge;
spi.SPI_NSS = SPI_NSS_Soft;

spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
spi.SPI_FirstBit = SPI_FirstBit_MSB;
spi.SPI_CRCPolynomial = 7;

SPI_Init ( SPIx_OPEN, &spi );

SPI_CalculateCRC ( SPIx_OPEN, DISABLE );
SPI_NSSInternalSoftwareConfig ( SPIx_OPEN, SPI_NSSInternalSoft_Set );

SPI_Cmd ( SPIx_OPEN, ENABLE );
// инициализация LSM303C
SPI_Mems_Write_Reg ( CTRL1_A, ( XYZ_ENABLE | CTRL1_BDU_ENABLE ) );
SPI_Mems_Write_Reg ( CTRL4_A, ( LSM303C_ACC_SPI_RWMODE | \
LSM303C_ACC_I2C_DISABLE | \
ADRESS_INCREMENT) );

uint8_t SPI_Mems_SendByte ( uint8_t byte )
{
// Loop while DR register in not emplty
while ( SPI_I2S_GetFlagStatus ( SPIx_OPEN, SPI_I2S_FLAG_TXE ) == RESET );

// Send byte through the SPI1 peripheral
SPI_I2S_SendData ( SPIx_OPEN, byte );

// Wait to receive a byte
while ( SPI_I2S_GetFlagStatus ( SPIx_OPEN, SPI_I2S_FLAG_RXNE ) == RESET );

return SPI_I2S_ReceiveData ( SPIx_OPEN );
}

uint8_t SPI_Mems_Read_Reg ( uint8_t reg )
{
uint8_t Temp;

Temp = reg | READbit; //reading procedure has to set the most significant bit

// Select Mems Sensor: Chip Select low
NSS_FALSE;

// Send Register Address
SPI_Mems_SendByte ( Temp );

// Read a byte from the MEMS Sensor
Temp = SPI_Mems_SendByte ( DUMMY_BYTE );

// Deselect Mems Sensor: Chip Select high
NSS_TRUE;

return Temp;
}

void SPI_Mems_Write_Reg ( uint8_t regAddr, uint8_t data )
{
// Select Mems Sensor: Chip Select low
NSS_FALSE;

// Send Register Address
SPI_Mems_SendByte ( regAddr );

// Write a byte into the MEMS Sensor Register
SPI_Mems_SendByte ( data );

// Deselect Mems Sensor: Chip Select high
NSS_TRUE;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Volldemar   STM32F407+LSM303C   Oct 27 2015, 14:53
- - Volldemar   Проблема решена.   Oct 30 2015, 14:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 04:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016