artem2236

Программа Виснет При Вызове Функции Gui_Init() Stm32F429 Discovery

20 сообщений в этой теме

artem2236    0

Здравствуйте,

Я недавно начал использовать отладочную плату stm32f429-discovery. И есть проблема, над которой уже бьюсь больше месяца.

Пытаюсь написать простейшую прогу с выводом на встроенный индикатор каких нить кнопок и линий, используя готовые библиотеки Stemwin, скаченные с сайта stm. Однако при вызове функции инициализации GUI_Init(), программа виснет. Я вроде все подключил, все компилируется без ошибок, все делал по инструкции. Прога выглядит следующим образом.

int main(void)
{

SDRAM_Init();
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);  
/* REQUIRED for STemWin */


/* SDRAM initialization */

GUI_Init();
/* LTDC initialization */
LCD_Init();
LCD_LayerInit();
LTDC_Cmd(ENABLE);
LCD_SetLayer(LCD_FOREGROUND_LAYER);
LCD_Clear(LCD_COLOR_WHITE);

LCD_SetFont(&Font12x12);
LCD_DisplayStringLine(LINE(10), (uint8_t*)"What doesn't kill me");
LCD_DisplayStringLine(LINE(12), (uint8_t*)" makes me stronger");

while(1)
{
}
}

Т.е. прога заходит в функцию GUI_init() и не выходит((

Прошелся по шагам - виснет в цикле while в функции _DMA_Fill (выделено красным внизу) (где точнее - выяснить не получается, потому что по шагам очень очень долго идти).

static void _DMA_Fill(int LayerIndex, void * pDst, int xSize, int ySize, int OffLine, U32 ColorIndex) {
 U32 PixelFormat;

 PixelFormat = _GetPixelformat(LayerIndex);
 DMA2D->CR	  = 0x00030000UL | (1 << 9);		 // Register to memory and TCIE
 DMA2D->OCOLR   = ColorIndex;					  // Color to be used
 DMA2D->OMAR	= (U32)pDst;					   // Destination address
 DMA2D->OOR	 = OffLine;						 // Destination line offset
 DMA2D->OPFCCR  = PixelFormat;					 // Defines the number of pixels to be transfered
 DMA2D->NLR	 = (U32)(xSize << 16) | (U16)ySize; // Size configuration of area to be transfered
 DMA2D->CR	 |= 1;							   // Start operation
 //
 // Wait until transfer is done
 //
 while (DMA2D->CR & DMA2D_CR_START) {
//__WFI();										// Sleep until next interrupt
 }
}

ставлю брэйкпоинты в функциях-обработчиках прерываний - ни в одну из них даже не заходит.

может кто сталкивался с такой проблемой? help

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

/** \brief  Wait For Interrupt

   Wait For Interrupt is a hint instruction that suspends execution
   until one of a number of events occurs.
*/
#define __WFI                             __wfi

Ожидается прерывание. Которое скорей всего и не разрешено и не сконфигурировано.

Вопрос - где взят исходник с которого копируете ?

Там и ищите какие прерывания DMA2D используются...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artem2236    0

/** \brief Wait For Interrupt

Wait For Interrupt is a hint instruction that suspends execution
until one of a number of events occurs.
*/
#define __WFI __wfi

Ожидается прерывание. Которое скорей всего и не разрешено и не сконфигурировано.

Вопрос - где взят исходник с которого копируете ?

Там и ищите какие прерывания DMA2D используются...

исходник скачен с сайта stm. файл называется GUIDRV_stm32f429i_discovery

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Я так понимаю что перепиливаете STM32F429I-Discovery_Demo из поставки F429 дискавери , путем выпиливания.

Или что-то свое ляпаем ?

Если второе - оставьте эту затею , это не для новичков .

Там прикручена ось и простыми телодвижениями свое не сляпать.

Да и первое не так просто - надо понимать что выпиливаем.

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

artem2236    0

Я так понимаю что перепиливаете STM32F429I-Discovery_Demo из поставки F429 дискавери , путем выпиливания.

Или что-то свое ляпаем ?

Если второе - оставьте эту затею , это не для новичков .

Там прикручена ось и простыми телодвижениями свое не сляпать.

Да и первое не так просто - надо понимать что выпиливаем.

Не совсем. Вообще я создал свой проект, вытаскивая не достающие файлы из STM32F429I-Discovery_Demo. Но без RTOS. Мне RTOS пока не нужен. У меня уже получилось сделать какие то элементарные вещи при помощи скаченных библиотек с того же сайта (LCD_init). Причем библиотека LCD инициализировалась без проблем и я спокойно на экран вывожу слова и фигуры, а при инициализации GUI вот такая вот хрень выскакивает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

GUI без RTOS работать не будет . Это осознаем?

Поясняю - GUI это графический интерфейс пользователя оси ...

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artem2236    0

GUI без RTOS работать не будет . Это осознаем?

Поясняю - GUI это графический интерфейс пользователя оси ...

Вот я тоже об этом думал. но когда я задал такой вопрос на форуме непосредственно на официальном сайте stm - мне ответили, что gui может работать без rtos. Поэтому теперь я совсем запутался уже. Т.е. все таки gui без RTOS не работает??

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Упс, да верно. Есть возможность конфигурации с однозадачной системой .

Читайте http://www.st.com/st.../DM00089670.pdf

В хэдере GUIConf.h


/*********************************************************************
*
*       Multi tasking support
*/
#ifdef OS_SUPPORT
#define GUI_OS                    (1)  // Compile with multitasking support
#else
#define GUI_OS                    (0)
#endif

Так же в том документе что ссылка выше :

3.1.3 GUI_X.c or GUI_X_OS.c • GUI_X.c for single task execution: “Single task” means that the project uses STemWin only from within one single task. The main purpose is to supply STemWin with a timing base. OS_TimeMS needs to be incremented each ms. • GUI_X_OS.c for multitask execution: If STemWin is used in a multitasking system, this file contains additional routines required for synchronizing tasks (for this purpose, the file GUI_X_FreeRTOS.c can be used as a template).

То есть заменяем в менагере проекта GUI_X_FreeRTOS.c на GUI_X.c , оба в папке OS EMWIn

Это пока все что нарыл .

Надеюсь понятно что теперь необходимо вручную вызывать средства гуя для прорисовки ?

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artem2236    0

Упс, да верно. Есть возможность конфигурации с однозадачной системой .

Читайте http://www.st.com/st.../DM00089670.pdf

В хэдере GUIConf.h


/*********************************************************************
*
* Multi tasking support
*/
#ifdef OS_SUPPORT
#define GUI_OS (1) // Compile with multitasking support
#else
#define GUI_OS (0)
#endif

Так же в том документе что ссылка выше :

3.1.3 GUI_X.c or GUI_X_OS.c • GUI_X.c for single task execution: “Single task” means that the project uses STemWin only from within one single task. The main purpose is to supply STemWin with a timing base. OS_TimeMS needs to be incremented each ms. • GUI_X_OS.c for multitask execution: If STemWin is used in a multitasking system, this file contains additional routines required for synchronizing tasks (for this purpose, the file GUI_X_FreeRTOS.c can be used as a template).

То есть заменяем в менагере проекта GUI_X_FreeRTOS.c на GUI_X.c , оба в папке OS EMWIn

Это пока все что нарыл .

Надеюсь понятно что теперь необходимо вручную вызывать средства гуя для прорисовки ?

я все эти материалы с сайта уже по несколько раз прочитал. все делал по инструкциям.... тока проблема от этого все равно не решилась((( заходит в gui_init и не выходит от туда((

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Тогда жди когда лень не будет . И кидай свой проект в архиве.

Только крайне желательно в Keil . Кокос ставить никакого желания нет, в IAR своих глюков достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artem2236    0

Тогда жди когда лень не будет . И кидай свой проект в архиве.

Только крайне желательно в Keil . Кокос ставить никакого желания нет, в IAR своих глюков достаточно.

ок. заранее огромное спасибо. я как раз в keil и работаю. Загружаю по частым - слишком большой файл

Тогда жди когда лень не будет . И кидай свой проект в архиве.

Только крайне желательно в Keil . Кокос ставить никакого желания нет, в IAR своих глюков достаточно.

ок. заранее огромное спасибо. я как раз в keil и работаю. Загружаю по частым - слишком большой файл

Example_2_LCD.part01.rar

Example_2_LCD.part02.rar

Example_2_LCD.part03.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

У меня ваш проект при отладке улетает в default handler.

То есть попадаем на непрописанный вектор ...

Что то явно напутано в структуре проекта и версиях файлов.

Попробуйте создать проект без визарда Keil ...

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Вообщем так . Я все правильно говорил что ЭТОТ GUI работать без RTOS не будет .

Не сама stemWin, а именно то что с SPL и идет с stm32f429i discoveri.

Дело в том что драйвер GUIDRV_stm32f429i_discovery и сама либа заточены под ось .

Осталось дело за малым - переписать дрова и либу. :crazy:

Мне этим заниматься совершенно не радужно.

Теперь понятно почему примеров с гуем без оси нету в сети. :crazy:

Советую оставить это пустое занятие.

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Но не все так печально.

Качай примеры с куба на stm32f429i_discovery . STM32Cube_FW_F4_V1.4.0

Там есть без оси . Все компилируется и прошивается .

На первых порах не надо создавать проект в визарде .

Зависимости там дикие , нарушать структуру папок чревато.

Просто скопируй целиком папку STemWin_HelloWorld что в \STM32Cube_FW_F4_V1.4.0\Projects\STM32F429I-Discovery\Applications\STemWin\

В ту же директорию.

Переименуй ее.

Переименуй файлы *.uvopt и *.uvproj под свои .

А дальше читай мануал на stemwin . Он рядышком в STM32Cube_FW_F4_V1.4.0\Middlewares\ST\STemWin\Documentation\

Удачи...

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artem2236    0

Но не все так печально.

Качай примеры с куба на stm32f429i_discovery . STM32Cube_FW_F4_V1.4.0

Там есть без оси . Все компилируется и прошивается .

На первых порах не надо создавать проект в визарде .

Зависимости там дикие , нарушать структуру папок чревато.

Просто скопируй целиком папку STemWin_HelloWorld что в \STM32F429\STM32Cube_FW_F4_V1.4.0\Projects\STM32F429I-Discovery\Applications\STemWin\

В ту же директорию.

Переименуй ее.

Переименуй файлы *.uvopt и *.uvproj под свои .

А дальше читай мануал на stemwin . Он рядышком в STM32Cube_FW_F4_V1.4.0\Middlewares\ST\STemWin\Documentation\

Удачи...

буду пробовать) огромное спасибо))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Если сделаешь все как я выше описывал . Можешь прямо копипастить примеры из дока в BASIC_HelloWorld.c .

Вставляя их в MainTask ()

Не забывая подключать хэдеры если стандартные функции С используются....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artem2236    0

Если сделаешь все как я выше описывал . Можешь прямо копипастить примеры из дока в BASIC_HelloWorld.c .

Вставляя их в MainTask ()

Не забывая подключать хэдеры если стандартные функции С используются....

все заработало. большое спасибо))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
dosikus    12

Увы не все .

Landscape ориентация не доступна.

Фокус почему-то фиксируется на первом тыкнутом виджете.

7636ab0952e7.jpg

Изменено пользователем dosikus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость adrvyho   
Гость adrvyho

Здравствуйте, знатоки STM32.

Очень прошу помочь разобраться, как правильно заполнить область, используя DMA2D Register to memory и внутреннюю память микроконтроллера. Контроллер, кстати, STM32F429IIT, экран 800х480 подключен по RGB24.

Не предусмотрел в своей схеме SDRAM, поэтому и мучаюсь.

Вот кусок кода

static void _DMA_Fill(void * pDst, int xSize, int ySize, int OffLine, uint32_t ColorIndex) {
DMA2D->CR	 = 0x00030000UL | (1 << 9);		 // Register to memory and TCIE
DMA2D->OCOLR = ColorIndex;					 // Color to be used
DMA2D->OMAR = (uint32_t)pDst;					 // Destination address
DMA2D->OOR	 = OffLine;						 // Destination line offset
DMA2D->OPFCCR = 4;					 // Defines the number of pixels to be transfered
DMA2D->NLR	 = ((uint32_t)xSize << 16) | ySize; // Size configuration of area to be transfered
DMA2D->CR	 |= 1;							 // Start operation
//
// Wait until transfer is done
//
while (DMA2D->CR & DMA2D_CR_START) {}
}
uint32_t aBufferResult[5000];
int main (void)

{
	 SystemInit();
 HAL_Init();
	 SystemClock_Config();
 DMA2D_Config();
 Screen_Init();
	 _DMA_Fill(aBufferResult+10, 50, 1, 0, 0x1F0A);
	 _DMA_Fill(aBufferResult+150, 30, 2, 0, 0x1C01);
 _DMA_Fill(aBufferResult+300, 5, 20, 0, 0xF0F0);
	 while(1) {}
}

Спасибо всем, кто откликнется

post-0-0-57080900-1471877274_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: lamer19
      Здравствуйте, хочу изучить семейство Cortex. Начал изучение программирования микроконтроллеров с AVR Attiny2313, Atmega8. Программки писал по самоучителю Белова. Писал простенькие программки чтобы светодиодом при помощи кнопки моргать, бегущие огни, прерывания по таймеру и т.п. Но в моем городе востребованы микроконтроллеры Cortex. В результате нашел вакансию:
      Требования:
      • Профильное образование;
      • Уверенное знание C, опыт разработки от 1-ого года;
      • Опыт разработки ПО для микроконтроллеров STM32 (ARM CORTEX M) в среде KEIL на языках С и ассемблера.
      • Опыт работы с интерфейсами передачи данных: Ethernet, UART, I2C, SPI, USB.
      • Умение читать принципиальные схемы;
      • Умение пользоваться для отладки осциллографом, JTAG-интерфейсом;
      • Опыт работы с SVN, Git 
      Отсюда - подскажите литературу где описывается теория, т.е. строение МК, память, регистры и т.д. Также практические примеры использования JTAG, Ethernet, UART, I2C, SPI, USB. Ну и какие железки использовать. В алиэкспресс нашёл: отладочная плата (https://ru.aliexpress.com/item/Free-shipping-100-Original-STM32-Discovery-Board-Stm32f4discovery-Stm32f4-kit-Cortex-m4-STM32-Development-Board-St/32655207218.html?ws_ab_test=searchweb0_0,searchweb201602_2_10152_5722813_10151_10065_10344_10068_10342_5722613_10343_5722913_10340_10341_10543_10698_5711413_10696_10084_10083_5722713_10618_10307_10301_5711213_10059_308_100031_10103_5711513_10624_10623_10622_10621_10620_5722513_5711313_10125,searchweb201603_25,ppcSwitch_5&algo_expid=6bb60057-1829-4c3a-bfcf-64b27a13a331-29&algo_pvid=6bb60057-1829-4c3a-bfcf-64b27a13a331&priceBeautifyAB=0), программатор (https://ru.aliexpress.com/item/1pcs-New-ST-LINK-V2-ST-LINK-V2-CN-ST-LINK-STLINK-Emulator-Download-Manager-STM8/32725864986.html?spm=a2g0v.10010108.1000014.3.2e3e252eARrNY5&traffic_analysisId=recommend_3035_null_null_null&scm=1007.13338.98644.000000000000000&pvid=be1ab406-7b1c-4874-82ab-5ccf70631523&tpp=1). В общем помогите кто чем может.
       
    • Автор: aske12345
      Здравствуйте! Прошу помощи ! Столкнулся со следующей проблемой пытаюсь подключить к контроллеру по spi память FRAM FM25CL64 ,компилятор keil , пытаюсь записать одно число и его же считать, а осциллографом вижу, что считывается не то, что записывал. Пытался в разные ячейки памяти разные числа - считываются разные числа, но не те. Пишу 0x2F считывается 0x1С,  пишу 0xFF считывается 0xFE, пишу 0x99 считывается 0x20 - ерунда какая то. 
      Куски кода привел ниже:

      int main(void) {          SystemCoreClockUpdate();     SysTick_Config(SystemCoreClock/1000);//1ms     LEDs_ini();     Button_ini();     SPI3_FRAM_ini();         delay_ms(50);     //проверим FRAM начало запись 1 байта        CS_FRAM_ON();//        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};        SPI_I2S_SendData(SPI3, 0x06);//Set Write Enable Latch 6        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};        while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется        CS_FRAM_OFF();        delay_us(3);    //на самом деле задержка выходит около 500нс                CS_FRAM_ON();         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};     SPI_I2S_SendData(SPI3, 0x02);// Write              while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется     SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется         SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется     SPI_I2S_SendData(SPI3, 0x2F);// данные          while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется              CS_FRAM_OFF();         delay_us(3);//на самом деле задержка выходит около 500нс         //проверим FRAM конец запись  1 байта         //проверим FRAM начало чтение 1 байта         CS_FRAM_ON();//         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};     SPI_I2S_SendData(SPI3, 0x03);// Read              while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется     SPI_I2S_SendData(SPI3, 0x10);// 13 битный адрес         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется         SPI_I2S_SendData(SPI3, 0x00);// 13 битный адрес         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется     SPI_I2S_SendData(SPI3, 0x00);// пишем 0 для считывания         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE)== RESET){};         while(SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_BSY)== SET){};//ждем пока запишется         CS_FRAM_OFF(); //проверим FRAM конец чтение 1 байта              //LED1_OFF;          while(1)     {
      настройки spi:

      SPI_Init_user3.SPI_Direction = SPI_Direction_2Lines_FullDuplex;     SPI_Init_user3.SPI_Mode = SPI_Mode_Master;     SPI_Init_user3.SPI_DataSize = SPI_DataSize_8b;     SPI_Init_user3.SPI_CPOL = SPI_CPOL_High;//SPI_CPOL_Low     SPI_Init_user3.SPI_CPHA = SPI_CPHA_2Edge;     SPI_Init_user3.SPI_NSS = SPI_NSS_Soft;     SPI_Init_user3.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;//4     SPI_Init_user3.SPI_FirstBit = SPI_FirstBit_MSB;         SPI_Init_user3.SPI_CRCPolynomial = 7;          SPI_Init(SPI3, &SPI_Init_user3);
      контакты вроде все пересмотрел, думал провода может длинноваты,  клок spi настраивал на разную частоту уменьшал до 1МГц - не влияет,  пробовал делать паузу между командой WREN и командой записи 15мс, а записью и считыванием 20мс, всё то же самое не помогло..
      приложил осциллограммы:
      Осциллограмма всех посылок  WREN, WITE, READ  (тактовый сигнал ch1 и miso FRAM ch2) (синий луч отношения к делу не имеет)
      Осциллограмма  команды WREN (тактовый сигнал ch1 и miso FRAM ch2)(синий луч отношения к делу не имеет)
      Осциллограмма  команды WITE (тактовый сигнал ch1 и miso FRAM ch2)
      Осциллограмма  считанного значения записывал 0x2F, считал 0x1C (тактовый сигнал ch1 и mosi FRAM ch2)
       




    • Автор: Anton Klapatun
      День добрый!
       
      Имеется sim-карта со статическим IP и модем SIM800C, который через UART соединен с STM32F0.
      Прочитав статью на хабре, которая и являлась отправной точкой, было решено повторить подвиг, но в версии lwip 2.0.3, которой я пользуюсь, ppp изменился до неузнаваемости, что сначала внесло некоторый сумбур. Но в документации к lwip был найден текстовый файл с настройкой ppp-соединения (ppp.txt, прикреплю его ниже), в котором было все, что нужно для счастья, но когда модем начал общаться с контроллером, дальше фазы LCP дело не зашло. Как я понял из документа (ppp_connect.docx), который оказался у меня уже-и-не-помню-откуда, после конфигурирования параметров соединения в фазе LCP контроллер должен посылать в модем пакет с заголовком PAP (C0 23), но он почему-то этого не делает... Он вообще больше ничего не делает. Я пытался проследить в отладчике весь путь запроса, что приходит от модема, но это только больше меня запутало.
      Собственно, прием данных у меня организован через прерывание. После ввода AT-команды "ATD*99***1#" и получения ответа "CONNECT", устанавливается флаг "ppp_enable" и при приходе байта он кладется в очередь `xQueue_PPP_Package`.
      void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t u8; if(huart == &huart1) { if (ppp_enable == true) { portBASE_TYPE xHigherPriorityTaskWoken_PPP_Rx; u8 = Sim800.UsartRxTemp; xHigherPriorityTaskWoken_PPP_Rx = pdFALSE; xQueueSendFromISR(xQueue_PPP_Package, &u8, &xHigherPriorityTaskWoken_PPP_Rx); } else { /*Reception of AT commands*/ } HAL_UART_Receive_IT(&huart1,&Sim800.UsartRxTemp,1); } } В задаче `StartLwIPTask` в бесконечном цикле проверяется эта очередь и при появлении элементов, записывает их в массив `PPPx.Data` и при фиксации второго HDLC-заголовка (0x7E), отправляет данные в lwip функцией `pppos_input`.
      P.S. Переменная `PPPx.Last_Index` это размер пришедшего ppp-пакета.
      void StartLwIPTask(void const * argument) { /* USER CODE BEGIN StartLwIPTask */ /*Создаем очередь*/ xQueue_Sim800_Package = xQueueCreate(128, sizeof(uint8_t)); xQueue_PPP_Package = xQueueCreate(128, sizeof(uint8_t)); uint8_t u8=0; volatile int setup = 0; tcpip_init( NULL, NULL ); /*Инициализация стека tcp/ip*/ /*Create a new PPPoS interface*/ ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0); // /* Auth configuration, this is pretty self-explanatory */ ppp_set_auth(ppp, PPPAUTHTYPE_PAP, "beeline", "beeline"); /* Require peer to authenticate */ ppp_set_auth_required(ppp, 1); /*Only for PPPoS, the PPP session should be up and waiting for input.*/ ppp_set_silent(ppp, 1); /* * Initiate PPP listener (i.e. wait for an incoming connection), can only * be called if PPP session is in the dead state (i.e. disconnected). */ ppp_listen(ppp); /* Infinite loop */ for(;;) { if (sim800_init() == S_RESET) /*Настройка модуля Sim800*/ continue; for (;;) { if (pdPASS == xQueueReceive(xQueue_PPP_Package, &u8, 100/portTICK_RATE_MS)) { if (u8 == 0x7E) t++; PPPx.Data[PPPx.Last_Index++] = u8; if (t==2) { PPPx.Last_Index--; pppos_input(ppp, PPPx.Data, PPPx.Last_Index); t=0; memset(&PPPx, 0, sizeof(PPPx)); } } } } /* USER CODE END StartLwIPTask */ } Как я писал выше, все идет хорошо, пока идет фаза LCP, но после подтверждения контроллера запроса опций, наступает тишина.
      В интернете мне удалось найти довольно мало исчерпывающей информации и примеров по связке stm32+lwip+ppp, если кто-нибудь занимался подобным или сталкивался с похожей проблемой, буду очень признателен за помощь и за пинки в нужном направлении. Заранее спасибо.
       
       
      ppp.txt
      ppp_connect.docx
    • Автор: agbp
      Приветствую! 

      Мы - молодой стартап из Санкт-Петербурга с хорошей финансовой поддержкой. Создаём дроны.
      Нам не хватает серьезного программиста на полный загруженный график (можно удаленно). 

      Из основных задач, которые нужно будет решать: 
      1. Программа отслеживания объекта в видеопотоке (процессор STM32F4xx). 
      2. Программа стабилизации БПЛА по данным с гироскопа и наведение на цель. 
      3. Создание программы управления бесколлекторным двигателем по закрытому контуру с возможностью бесшовной интеграции с программой просчёта траектории ЧПУ станка. 
      4. Программирование бортового комплекса управления БПЛА (автопилот) 
      5. Полный пакет работ по созданию бортового и наземного комплексов управления роем БПЛА. 
      Оформление в штат. 
      ЗП обсуждаема, от 60 000 в месяц.
      P.S. дроны, беспилотники, авиамодели... это только начало!
    • Автор: Djanger
      Приобрёл "NUCLEO-F030R8, Отладочная плата на базе MCU STM32F030R8T6 (ARM Cortex-M0), ST-LINK/V2-1, Arduino-интерфейс"  хочу приобрести два модуля к ней но не знаю о совместимости , кого спрашиваю сомневаются и не отвечают уверенно, 1 модуль это 3,2 TFT ЖК дисплей сенсорный , а второй 8 бит LED 8 бит цифровой Tube 8-разрядный ключ. Кто что может подсказать или посоветовать прошу помочь