Easyelectronics.ru

Электроника для всех
Текущее время: 24 окт 2020, 20:18

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: stm32f4 из SPI1 в SPI2
СообщениеДобавлено: 15 сен 2012, 00:15 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 01 май 2012, 19:02
Сообщения: 74
Пытаюсь расчехлить spi.
Ткните носом в толковое описание...

Вот что накатано:
Код:
/*
* spi2:
* miso - pb14
* mosi - pb15
* sck - pb13
* nss - pb12
*
* spi1:
* nss - pa4
* sck - pa5
* mosi - pa7
* miso - pa6
*
*/
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
#include <stm32f4xx_spi.h>

#include <stm32f4_discovery.h>

typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
#define BufferSize  32
uint16_t SPI1_Buffer_Tx[BufferSize] = {0x0102, 0x0304, 0x0506, 0x0708, 0x090A, 0x0B0C,
                                  0x0D0E, 0x0F10, 0x1112, 0x1314, 0x1516, 0x1718,
                                  0x191A, 0x1B1C, 0x1D1E, 0x1F20, 0x2122, 0x2324,
                                  0x2526, 0x2728, 0x292A, 0x2B2C, 0x2D2E, 0x2F30,
                                  0x3132, 0x3334, 0x3536, 0x3738, 0x393A, 0x3B3C,
                                  0x3D3E, 0x3F40};
uint16_t SPI2_Buffer_Tx[BufferSize] = {0x5152, 0x5354, 0x5556, 0x5758, 0x595A, 0x5B5C,
                                  0x5D5E, 0x5F60, 0x6162, 0x6364, 0x6566, 0x6768,
                                  0x696A, 0x6B6C, 0x6D6E, 0x6F70, 0x7172, 0x7374,
                                  0x7576, 0x7778, 0x797A, 0x7B7C, 0x7D7E, 0x7F80,
                                  0x8182, 0x8384, 0x8586, 0x8788, 0x898A, 0x8B8C,
                                  0x8D8E, 0x8F90};
uint16_t SPI1_Buffer_Rx[BufferSize], SPI2_Buffer_Rx[BufferSize];
uint32_t TxIdx = 0, RxIdx = 0;
volatile TestStatus TransferStatus1 = FAILED, TransferStatus2 = FAILED;
void spi1_init() {
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
   GPIO_InitTypeDef gpio;
   GPIO_StructInit(&gpio);
   gpio.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
   gpio.GPIO_Mode = GPIO_Mode_AF;
   GPIO_Init(GPIOA,&gpio);

   GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1);
   GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1);
   GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);

   SPI_InitTypeDef spi1;
   SPI_StructInit(&spi1);
   spi1.SPI_Mode = SPI_Mode_Master;
   SPI_Init(SPI1,&spi1);
   SPI_CalculateCRC(SPI1, ENABLE);
   SPI_Cmd(SPI1,ENABLE);
}
void spi2_init() {
   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
   GPIO_InitTypeDef gpio;
   GPIO_StructInit(&gpio);
   gpio.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
   gpio.GPIO_Mode = GPIO_Mode_AF;
   GPIO_Init(GPIOB,&gpio);

   GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);
   GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2);
   GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);

   SPI_InitTypeDef spi2;
   SPI_StructInit(&spi2);
   spi2.SPI_Mode = SPI_Mode_Slave;
   SPI_Init(SPI2,&spi2);
   SPI_CalculateCRC(SPI2, ENABLE);
   SPI_Cmd(SPI2,ENABLE);

}
TestStatus Buffercmp(uint16_t* pBuffer1, uint16_t* pBuffer2, uint16_t BufferLength)
{
  while (BufferLength--)
  {
    if (*pBuffer1 != *pBuffer2)
    {
      return FAILED;
    }

    pBuffer1++;
    pBuffer2++;
  }

  return PASSED;
}
int main() {
   STM_EVAL_LEDInit(LED3);
   STM_EVAL_LEDInit(LED4);
   STM_EVAL_LEDInit(LED5);
   STM_EVAL_LEDInit(LED6);

   spi1_init();
   spi2_init();
   STM_EVAL_LEDOn(LED5);

     while (TxIdx < BufferSize - 1)
     {
       /* Wait for SPI1 Tx buffer empty */
       while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
       /* Send SPI2 data */
       SPI_I2S_SendData(SPI2, SPI2_Buffer_Tx[TxIdx]);
       /* Send SPI1 data */
       SPI_I2S_SendData(SPI1, SPI1_Buffer_Tx[TxIdx++]);
       /* Wait for SPI2 data reception */
       while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
       /* Read SPI2 received data */
       SPI2_Buffer_Rx[RxIdx] = SPI_I2S_ReceiveData(SPI2);
       /* Wait for SPI1 data reception */
       while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
       /* Read SPI1 received data */
       SPI1_Buffer_Rx[RxIdx++] = SPI_I2S_ReceiveData(SPI1);
     }
     TransferStatus1 = Buffercmp(SPI2_Buffer_Rx, SPI1_Buffer_Tx, BufferSize);
     if (TransferStatus1) {
         STM_EVAL_LEDOn(LED3);
     }
     TransferStatus2 = Buffercmp(SPI1_Buffer_Rx, SPI2_Buffer_Tx, BufferSize);
     if (TransferStatus2) {
         STM_EVAL_LEDOn(LED4);
     }

   while(1) {
      STM_EVAL_LEDToggle(LED6);
   }
   return 0;
}


Код не работает, причём отследить где улетает в бесконечный цикл не могу.
Соеденил
mosi1 --- mosi2
miso1 --- miso2

Правильно? или нужно
mosi -- miso ??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f4 из SPI1 в SPI2
СообщениеДобавлено: 15 сен 2012, 00:40 
Старожил
Аватара пользователя

Зарегистрирован: 10 фев 2012, 18:04
Сообщения: 827
Откуда: Україна
Цитата:
..или нужно
mosi -- miso ??

естественно, и только так.

MOSI - выход
MISO - вход
А вы прицепили выход-выход и ждете приема?

_________________
"Если вы такие умные, что ж вы строем не ходите?"

Легче зажечь одну маленькую свечу, чем постоянно жаловаться на тьму...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f4 из SPI1 в SPI2
СообщениеДобавлено: 16 сен 2012, 23:30 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 01 май 2012, 19:02
Сообщения: 74
темне мение, копироваться правильно не стало пока не соеденил mosi-mosi и miso--miso


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f4 из SPI1 в SPI2
СообщениеДобавлено: 17 сен 2012, 14:45 
Только пришел

Зарегистрирован: 13 сен 2012, 10:45
Сообщения: 14
Всё правильно... SPI-SPI...
Цитата:
● MISO: Master In / Slave Out data. This pin can be used to transmit data in slave mode
and receive data in master mode.
● MOSI: Master Out / Slave In data. This pin can be used to transmit data in master
mode and receive data in slave mode.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f4 из SPI1 в SPI2
СообщениеДобавлено: 17 сен 2012, 19:29 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 01 май 2012, 19:02
Сообщения: 74
рабочий вариант тут: http://how2.org.ua/art/304


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f4 из SPI1 в SPI2
СообщениеДобавлено: 24 сен 2012, 16:58 
Только пришел

Зарегистрирован: 28 авг 2011, 11:13
Сообщения: 7
DOOMSDAY писал(а):
Цитата:
..или нужно
mosi -- miso ??

естественно, и только так.

MOSI - выход
MISO - вход
А вы прицепили выход-выход и ждете приема?


Не пудрите народу мозги. верно miso- miso и mosi mosi


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Alexrusneft, truppik


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB