Перейти к содержанию

cosmopolitan

Новичок
  • Публикаций

    4
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Не работает SPI на STM32F4Discivery

    Доброго времени суток. Не первый день пытаюсь поднять SPI на STM32F4Discivery. Использую SPI1 (master) и SPI3 (slave) на одной плате и соединяю ноги MISO, MOSI и CLK, а после шлю байт из SPI1 в SPI3. Но прерывание по приёму данных SPI3 не срабатывает. Если кто-то знает, скажите, пожалуйста, что я делаю не так? Код использую такой CODEvoid SPI3_IRQHandler() { SPI_I2S_ClearITPendingBit(SPI3, SPI_I2S_IT_RXNE); //отправка отладочных данных в UART } static void SPI3_Slave_Config(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_DeInit(GPIOC); GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_Init(GPIOC, &GPIO_InitStructure); SPI_I2S_DeInit(SPI3); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; SPI_Init(SPI3, &SPI_InitStructure); NVIC_EnableIRQ(SPI3_IRQn); SPI_I2S_ITConfig(SPI3, SPI_I2S_IT_RXNE, ENABLE); SPI_Cmd(SPI3, ENABLE); } static void SPI1_Master_Config(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_DeInit(GPIOB); GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); SPI_I2S_DeInit(SPI1); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(SPI1, &SPI_InitStructure); SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE); SPI_Cmd(SPI1, ENABLE); } uint8_t dataSPI = 'A'; int main(void) { __enable_irq(); SPI1_Master_Config(); SPI3_Slave_Config(); while(1) { SPI_I2S_SendData(SPI1, dataSPI); } }
  2. STM32F4Discovery + CubeMX + UDP

    Последняя проблема решилась подключением lwip/udp.h. Теперь компилятор ругается на тип struct ip_addr, мол, он не задан. Подключение lwip/ip_addr.h ничего не изменило. Не могу найти, где определяется этот тип (во всех примерах фигурирует именно он)
  3. STM32F4Discovery + CubeMX + UDP

    Цитата(x893 @ Jan 6 2018, 12:22) Начинать надо как обычно с google.com https://electronix.ru/forum/index.php?showtopic=133072 или посмотреть примеры LwIP_UDP_Echo_Client LwIP_UDP_Echo_Server можно еще прочитать http://www.st.com/content/ccc/resource/tec....DM00036052.pdf В общем - вариантов масса. Указанную Вами тему видел, там проблема также решилась обращением к примерам, но конкретики я там не увидел. Указанный пример также смотрел. Возможно, я не очень хорошо ориентируюсь в больших С-проектах, но вот, например, такой фрагмент из примера Кодstruct udp_pcb *upcb; ... upcb = udp_new(); Keil даже не пропускает -- выдаёт ошибку "a value of type "int" cannot be assigned to an entity of type "struct udp_pcb *"
  4. STM32F4Discovery + CubeMX + UDP

    Добрый день, господа форумчане. Возникла следующая проблема. Имеется STM32F4Discovery и Ethernet-физика DP83848. Девайсы соединены по RMII. Я открываю CubeMX, выбираю МК STM32F407VG, Ethernet по RMII и поддержку LwIP (задаю статический IP). Далее встаёт вопрос: какую последовательность действий нужно выполнить, чтобы слать на другое устройство со статическим IP UDP-пакеты? Я и гуглил, и смотрел примеры, но всё равно не понимаю, как вообще обмениваться данными с LwIP. Расскажите, пожалуйста, если кто знает, как это делать, или хотя бы в какую сторону копать? А то я в полном вакууме. Спасибо.