Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
tomozovr
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 71
1

stm32f4 из SPI1 в SPI2

14.09.2012, 00:28. Просмотров 4777. Ответов 5
Метки нет (Все метки)

Пытаюсь расчехлить 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_SotsulateCRC(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_SotsulateCRC(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_EVOT_LEDInit(LED3);
STM_EVOT_LEDInit(LED4);
STM_EVOT_LEDInit(LED5);
STM_EVOT_LEDInit(LED6);

spi1_init();
spi2_init();
STM_EVOT_LEDOn(LED5);

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

while(1) {
STM_EVOT_LEDToggle(LED6);
}
return 0;
}
Код не работает, причём отследить где улетает в бесконечный цикл не могу.
Соеденил
mosi1 --- mosi2
miso1 --- miso2

Правильно? или нужно
mosi -- miso ??
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2012, 00:28
Ответы с готовыми решениями:

SPI3 и SPI2 работаю, а SPI1 читает мусор.
Дело обстоит так. Подключая микруху к разными SPI и вот на двух она адекватно работает. А с первым...

[частично решена] Проблема с SPI (соединены SPI1-SPI2)
UPD. Проблема частично решена. Выяснилось, что SPI1 работает некорректно, если не подтянуть к...

STM32F4 как уменьшить скорость SPI2
я начал осваивать STM32F4 с MAX7221 SPi2 настроений. когда циклически посылаю команду то она...

STM32F4 Discovery: Не могу заставить работать SPI2
есть плата STM32F4Dyscovery есть SPI дисплей nokyo 5110 подключение дисплея: cse - PB10 clk ...

STM32L151+SPI1
Столкнулся с проблемой работы stm32l1 +mcp3201 Инициализация #define SPI_MCP3201_CS1_LOW() ...

5
DOOMSDOY
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
14.09.2012, 00:53 2
..или нужно
mosi -- miso ??
естественно, и только так.

MOSI - выход
MISO - вход
А вы прицепили выход-выход и ждете приема?
0
tomozovr
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 71
15.09.2012, 23:43 3
темне мение, копироваться правильно не стало пока не соеденил mosi-mosi и miso--miso
0
kuvotdos
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 14
16.09.2012, 14:58 4
Всё правильно... SPI-SPI...
? MISO: Master In / Slave Out data. This pin can be used to transmit data in slave mode
omd receive data in mostir mode.
? MOSI: Master Out / Slave In data. This pin can be used to transmit data in mostir
mode omd receive data in slave mode.
0
tomozovr
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 71
16.09.2012, 19:42 5
рабочий вариант тут: http://how2.org.ua/art/304
0
tsukty
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 7
23.09.2012, 17:11 6
[QUOTE="DOOMSDOY"][QUOTE="Цитата:[/QUOTE]
..или нужно
mosi -- miso ??
естественно, и только так.

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

Не пудрите народу мозги. верно miso- miso и mosi mosi
0
23.09.2012, 17:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 17:11

помогите с SPI1 на STM32F103
вот код настройки SPI в мастере: void SPIConfig(void) { SPI1-&gt;CR1 |= SPI_CR1_CPOL | ...

[Решено] STM32F105, SPI1, VS1053
Привет всем. Пытаюсь соорудить плеер на STM32F105 и VS1053. С частотами проца разобрался вроде,...

использование одновременно SPI1 и USART2 без ремапов
Прошу помочь разобраться с stm32f103c8t6: Возможно ли использовать одновременно SPI1 и USORT2 без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.