0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 71
|
|
1 | |
stm32f4 из SPI1 в SPI214.09.2012, 00:28. Показов 5263. Ответов 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
|
14.09.2012, 00:28 | |
Ответы с готовыми решениями:
5
SPI3 и SPI2 работаю, а SPI1 читает мусор. [частично решена] Проблема с SPI (соединены SPI1-SPI2) STM32F4 как уменьшить скорость SPI2 STM32F4 Discovery: Не могу заставить работать SPI2 |
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
|
|
14.09.2012, 00:53 | 2 |
MOSI - выход MISO - вход А вы прицепили выход-выход и ждете приема?
0
|
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 71
|
|
15.09.2012, 23:43 | 3 |
темне мение, копироваться правильно не стало пока не соеденил mosi-mosi и miso--miso
0
|
kuvotdos
|
|
16.09.2012, 14:58 | 4 |
Всё правильно... SPI-SPI...
|
0 / 0 / 0
Регистрация: 27.04.2012
Сообщений: 71
|
|
16.09.2012, 19:42 | 5 |
рабочий вариант тут: http://how2.org.ua/art/304
0
|
tsukty
|
|
23.09.2012, 17:11 | 6 |
[QUOTE="DOOMSDOY"][QUOTE="Цитата:[/QUOTE]
MOSI - выход MISO - вход А вы прицепили выход-выход и ждете приема? Не пудрите народу мозги. верно miso- miso и mosi mosi |
23.09.2012, 17:11 | |
23.09.2012, 17:11 | |
Помогаю со студенческими работами здесь
6
SPI2 в stm32f103RC STM32L151+SPI1 Настройка SPI2 на STM32F407VG помогите с SPI1 на STM32F103 Не работает SPI2 на F091 SPI2 stm32f103 (pinboard ii) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |