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

alexmiron31

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный
  1. STM32F107RB + LAN8742A

    Огромное спасибо, господа! Этого более чем достаточно для начала. Весьма признателен за помощь.
  2. STM32F107RB + LAN8742A

    У Вас есть возможность продемонстрировать части кода, отвечающие за инициализацию Ethernet и описание дескрипторов DMA в самом камне? Насколько я смог понять из найденных источников, это - самая проблемная часть. Или, если нет, то, может быть, сможете сказать, где найти какую-нибудь документацию под это дело? На сайте ST есть демонстрация работы lwIP с разными линейками, но она тоже обходит момент инициализации периферии, а больше аппноутов по этой теме я у них не нашел.
  3. STM32F107RB + LAN8742A

    Приветствую всех форумчан. Столкнулся с необходимостью интеграции в проект возможности подключения по Ethernet. Микросхема PHY - LAN8742A. Сложность заключается в том, что раньше я работал только с WiFi-модулем, вся суть общения с которым в самом худшем случае - это соединение по UART, поскольку TCP/IP-стек в нем уже интегрирован. А в сложившейся ситуации нужно писать драйвер для соединение микросхемы с контроллером, а потом, насколько я понимаю, еще и драйвер подключения к TCP/IP-стеку. Использовать SPL или HAL я не хочу, поскольку до этого прекрасно обходился регистрами, но пока что все найденные мною в общем доступе примеры по работе STM-ки с этой микросхемой сделаны именно на одной из этих двух библиотек, а обсуждения на форуме по похожим темам касаются уже следующих этапов, то есть непосредственно передачи данных, до чего я пока не дошел. Суть вопроса: как написать драйвер для этой микросхемы, с чего начинать и куда смотреть? Буду благодарен за любой пинок в нужном направлении.
  4. Нет, отладчик, само собой, есть, и я даже немножко в него умею:) А вот осциллографа сейчас под рукой нет. Вроде в кейле есть такая штука, как логический анализатор, только я когда-то так и не вкурил работу с ним. Видимо, если остальное не поможет, то придется и с ним разбираться до кучи.
  5. JTAG, к сожалению, отсутствует, осцил будет на следующей неделе :( Исходя из того, что я вчера накопал, есть подозрение, что я намешал обращение к регистрам, пока попробую копнуть в эту сторону. Может, я не совсем правильно написал. В общем, вот такая платка у меня - http://www.st.com/content/st_com/en/produc...leo-f746zg.html
  6. Вот тут кроется очередная засада - чтение из любого регистра возвращает 0xD325. Я сначала грешил на криво написанную функцию, поэтому воспользовался готовой функцией из библиотеки HAL. Однако она вернула мне то же самое. И в окне памяти кейловского отладчика с определенного момента до адреса 0x60000000 - знаки вопроса, а вот начиная с этого самого адреса там именно 0xD325. Я, откровенно говоря, не самый большой спец по микроконтроллерам, поэтому вполне допускаю, что мог и дурака где-то свалять, но вот этого момента я откровенно не понимаю.
  7. Всем привет. Возникла проблема с подключением указанного модуля к плате Nucleo-STM32F743ZG. Пытаюсь подключить по FSMC, используя видеоуроки от Sappise. Однако дисплей не инициализируется, что бы я ни делал, только жизнерадостно горит подсветонька. Подключаю в режиме 16 бит, пример инициализации для контроллера дисплея (S6D1121) нашел здесь, на форуме, а также в программке одного поляка. Исходя из того, что они совпадают, пришел к выводу, что ошибка не в инициализации. Инициализация F7 и модуля FSMC происходит с помощью HALCubeMX, тактовая частота на MCO совпадает с требуемой, а отладчик говорит, что весь код инициализации успешно выполняется, и программа переходит в главный цикл, то есть проблема не в зависании. Инициализация FSMC (в F7 он обозначен как FMC): /* FMC initialization function */ static void MX_FMC_Init(void) { FMC_NORSRAM_TimingTypeDef Timing; /** Perform the SRAM1 memory initialization sequence */ hsram1.Instance = FMC_NORSRAM_DEVICE; hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE; /* hsram1.Init */ hsram1.Init.NSBank = FMC_NORSRAM_BANK1; hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16; hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE; hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE; hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY; hsram1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE; hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE; /* Timing */ Timing.AddressSetupTime = 15; Timing.AddressHoldTime = 15; Timing.DataSetupTime = 255; Timing.BusTurnAroundDuration = 15; Timing.CLKDivision = 16; Timing.DataLatency = 17; Timing.AccessMode = FMC_ACCESS_MODE_A; /* ExtTiming */ if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } } Заголовочный файл с адресами для записи и чтения: #ifndef LCD_H #define LCD_H #include "stm32f7xx_hal.h" #define CMD_ADR ((*(uint32_t*)0x60000000)) #define DAT_ADR ((*(uint32_t*)0x60020000)) #define S6D1121_GRAM 0x22 void lcdInit(void); #endif И файл с функциями: #include "lcd.h" void lcdWriteReg(uint16_t reg, uint16_t dat) { CMD_ADR = reg; DAT_ADR = dat; } void lcdWriteDat(uint16_t dat) { DAT_ADR = dat; } uint16_t lcdReadReg(uint8_t LCD_Reg) { uint16_t val = 0; CMD_ADR = LCD_Reg; val = DAT_ADR; // Read 16-bit Reg return val; } void lcdGRAMReady(void) { CMD_ADR = S6D1121_GRAM; } void lcdClear(uint32_t color) { lcdGRAMReady(); for (uint32_t i = 0; i < 320 * 240; i++) { DAT_ADR = color; } } void lcdInit(void) { HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_SET); HAL_Delay(1000); // lcdReadReg(0x00); lcdWriteReg(0x11,0x2004); lcdWriteReg(0x13,0xCC00); lcdWriteReg(0x15,0x2600); lcdWriteReg(0x14,0x252A); lcdWriteReg(0x12,0x0033); lcdWriteReg(0x13,0xCC04); HAL_Delay(5); lcdWriteReg(0x13,0xCC06); HAL_Delay(5); lcdWriteReg(0x13,0xCC4F); HAL_Delay(5); lcdWriteReg(0x13,0x674F); lcdWriteReg(0x11,0x2003); HAL_Delay(5); lcdWriteReg(0x30,0x2609); lcdWriteReg(0x31,0x242C); lcdWriteReg(0x32,0x1F23); lcdWriteReg(0x33,0x2425); lcdWriteReg(0x34,0x2226); lcdWriteReg(0x35,0x2523); lcdWriteReg(0x36,0x1C1A); lcdWriteReg(0x37,0x131D); lcdWriteReg(0x38,0x0B11); lcdWriteReg(0x39,0x1210); lcdWriteReg(0x3A,0x1315); lcdWriteReg(0x3B,0x3619); lcdWriteReg(0x3C,0x0D00); lcdWriteReg(0x3D,0x000D); lcdWriteReg(0x16,0x0007); lcdWriteReg(0x02,0x0013); lcdWriteReg(0x03,0x8003); lcdWriteReg(0x01,0x0127); HAL_Delay(5); lcdWriteReg(0x08,0x0303); lcdWriteReg(0x0A,0x000B); lcdWriteReg(0x0B,0x0003); lcdWriteReg(0x0C,0x0000); lcdWriteReg(0x41,0x0000); lcdWriteReg(0x50,0x0000); lcdWriteReg(0x60,0x0005); lcdWriteReg(0x70,0x000B); lcdWriteReg(0x71,0x0000); lcdWriteReg(0x78,0x0000); lcdWriteReg(0x7A,0x0000); lcdWriteReg(0x79,0x0007); lcdWriteReg(0x07,0x0051); HAL_Delay(5); lcdWriteReg(0x07,0x0053); lcdWriteReg(0x79,0x0000); HAL_Delay(50); lcdClear(0x0000); HAL_Delay(50); } По идее, после инициализации дисплейчик должен окрашивать в жизнеутверждающий черный цвет, вот только этого ни разу не происходит. Флешка на этом же модуле работает как часы. Потратил уже несколько дней, но никакого решения проблемы так и не нашел, поэтому буду благодарен за любую помощь.
×
×
  • Создать...