Вот, еще один..
Да вычищаю я DR! Код смотрите. Первый байт принятый я читаю и отбрасываю, а второй передаю в основную функцию.И тебе уже сказано - проверять RXNE с последующей вычиткой DR - после каждого байта
Да вычищаю я DR! Код смотрите. Первый байт принятый я читаю и отбрасываю, а второй передаю в основную функцию.И тебе уже сказано - проверять RXNE с последующей вычиткой DR - после каждого байта
Код: Выделить всё
SPI1->CR1 = 0;Код: Выделить всё
SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);Код: Выделить всё
void Write_SPI (char addres, char znachenie)
{
GPIOE->BSRRH = (1<<3);
addres &= 0x3F;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = addres;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = znachenie;
while (!(SPI1->SR & SPI_SR_TXE));
while(SPI1->SR & SPI_SR_BSY);
GPIOE->BSRRL = (1<<3);
}
char Read_SPI (char addres)
{
GPIOE->BSRRH = (1<<3);
addres |= 0x80;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = addres;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = 0x00;
while (!(SPI1->SR & SPI_SR_TXE));
while(SPI1->SR & SPI_SR_BSY);
GPIOE->BSRRL = (1<<3);
return SPI1->DR;
}Вы смотрите первый пост. Дальше приводится повторно код после исправлений - там есть чтение второго байтаПробуй , только из даташита следует что читаются 2 байта , а у тебя 1
CS акселерометра на STMF4Discovery сидит на PE3, т.е. он программный. Значит надо отключить SS от вывода PA4. Я может быть не до конца все сразу сообразил, но в reference manual сказано что за это отвечают биты 8 и 9 регистре CR1. Команда
Код:
SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
примерно это и делает. А у Pink-Pank там нули.
Код: Выделить всё
SPI1->CR1 |= SSI | SSM; Код: Выделить всё
char Read_SPI (char addres)
{
GPIOE->BSRRH = (1<<3); \\ 3-d bit
__DSB();
addres |= 0x80;
while (!(SPI1->SR & (1<<1))); \\ bit TXE
SPI1->DR = addres;
while (!(SPI1->SR & (1<<1))); \\ bit TXE
while (!(SPI1->SR & (1<<0))); \\ bit RXNE
(void) SPI1->DR;
SPI1->DR = 0x00;
while (!(SPI1->SR & (1<<1))); \\ bit TXE
while (!(SPI1->SR & (1<<0))); \\ bit RXNE
GPIOE->BSRRL = (1<<3); \\ 3-d bit
__DSB();
return SPI1->DR;
}где здесь два байта ?
Код: Выделить всё
(void) SPI1->DR;Код: Выделить всё
return SPI1->DR;Да здесь вопрос по сути не по АРМ... а по SPI... по его работе... АРМ здесь сбоку...Pink-Pank писал(а):Все равно не работает.. Что догадки-то лепить? И это мой первый вопрос здесь по АРМ.
Проигнорировали... там всего четыре варианта (а по настоящему - два) перебрать-то надо было.Да, к стати - какой SPI MODE требует акселерометр?