Easyelectronics.ru

Электроника для всех
Текущее время: 28 фев 2021, 15:17

Часовой пояс: 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 часов


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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