{"id":37916,"date":"2019-10-31T22:20:31","date_gmt":"2019-10-31T19:20:31","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sip-telefon-na-stm32f7-discovery\/"},"modified":"2019-10-31T22:20:31","modified_gmt":"2019-10-31T19:20:31","slug":"sip-telefon-na-stm32f7-discovery","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"Telefono SIP su STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao a tutti.<\/p>\n<p>Tempo fa, abbiamo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">scrivevano<\/a><\/noindex> discusso su come siamo riusciti a far funzionare un telefono SIP su STM32F4-Discovery con 1 MB di ROM e 192 KB di RAM basato su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. \u00c8 importante notare che quella versione era minimale e collegava direttamente due telefoni senza server, con la trasmissione della voce solo in una direzione. Pertanto, abbiamo deciso di implementare un telefono pi\u00f9 completo con chiamate attraverso il server e trasmissione della voce in entrambe le direzioni, cercando di rimanere entro i limiti di memoria il pi\u00f9 possibile.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"W6wuEIZJf8o\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/W6wuEIZJf8o\/hqdefault.jpg\" alt=\"Guarda il video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPer il telefono, abbiamo deciso di utilizzare l'applicazione <i>simple_pjsua<\/i> inclusa nella libreria PJSIP. Si tratta di un'applicazione minimale che pu\u00f2 registrarsi su un server, ricevere e effettuare chiamate. Di seguito fornir\u00f2 subito una descrizione di come avviarlo su STM32F7-Discovery.<\/p>\n<h3>Come avviare<\/h3>\n<p><\/p>\n<ol>\n<li> Configuriamo Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>Nel file conf\/mods.config impostiamo l'account SIP necessario.\n<pre><code class=\"bash\">\ninclude platform.pjsip.cmd.simple_pjsua_imported(\n    sip_domain=\"server\", \n    sip_user=\"username\",\n    sip_passwd=\"password\")\n<\/code><\/pre>\n<p>\ndove <i>server<\/i> \u00e8 il server SIP (ad esempio, sip.linphone.org), <i>username<\/i> e <i>password<\/i> \u00e8 il nome utente e la password dell'account.\n<\/li>\n<li>Compiliamo Embox con il comando <i>make<\/i>. Abbiamo informazioni sulla programmazione della scheda su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">wiki<\/a><\/noindex> e in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer.<\/a><\/noindex>.\n<\/li>\n<li>Eseguiamo nel terminale Embox il comando \u201csimple_pjsua_imported\u201d\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....Lo stato outbound SIP per acc 0 non \u00e8 attivo\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: registrazione riuscita, stato=200 (Registrazione riuscita\n00:00:12.911    pjsua_acc.c  ....Timer keep-alive avviato per acc 0, destinazione:91.121.209.194:5060, intervallo:15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Infine, resta da inserire gli altoparlanti o le cuffie nell'uscita audio e parlare in due piccoli microfoni MEMS accanto al display. Chiamiamo da Linux tramite l'applicazione simple_pjsua, pjsua. Oppure si pu\u00f2 utilizzare qualsiasi altra applicazione come linphone.\n<\/li>\n<\/ol>\n<p>\nTutto questo \u00e8 descritto nel nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">wiki<\/a><\/noindex>.<\/p>\n<h3>Come ci siamo arrivati<\/h3>\n<p>\nQuindi, inizialmente ci siamo posti la questione della scelta della piattaforma hardware. Poich\u00e9 era chiaro che STM32F4-Discovery non fosse adeguata per la memoria, abbiamo scelto STM32F7-Discovery. Questa ha 1 MB di flash e 256 KB di RAM (+ 64 MB di memoria veloce speciale, che utilizzeremo anche). Anch'essa non \u00e8 molto per le chiamate attraverso un server, ma abbiamo deciso di provare a starci dentro.<\/p>\n<p>Abbiamo fondamentalmente diviso il compito in diverse fasi:<\/p>\n<ul>\n<li>Avvio di PJSIP su QEMU. Questo era comodo per il debug, inoltre avevamo gi\u00e0 supporto per il codec AC97. <\/li>\n<li>Registrazione e riproduzione della voce su QEMU e su STM32. <\/li>\n<li> Porting dell'applicazione <i>simple_pjsua<\/i> della libreria PJSIP. Questa permette di registrarsi su un server SIP e fare chiamate. <\/li>\n<li>Implementare il proprio server basato su Asterisk e testarlo, dopo di che provare esterni, come sip.linphone.org. <\/li>\n<\/ul>\n<p>\nIl suono in Embox funziona tramite Portaudio, che viene utilizzato anche in PISIP. Su QEMU sono emersi i primi problemi: i file WAV a 44100 Hz venivano riprodotti correttamente, ma a 8000 Hz qualcosa non andava. Si \u00e8 scoperto che il problema era nella configurazione della frequenza: di default era impostata a 44100 sull'hardware e non poteva essere modificata programmando. <\/p>\n<p>Qui, probabilmente, \u00e8 utile spiegare brevemente come avviene effettivamente la riproduzione del suono. \u00c8 possibile impostare un puntatore su una porzione di memoria nella scheda audio da cui \u00e8 necessario riprodurre o registrare a una frequenza preimpostata. Dopo che il buffer si esaurisce, viene generata un'interruzione, e l'esecuzione continua con il buffer successivo. Il problema \u00e8 che \u00e8 necessario riempire questi buffer in anticipo, mentre il precedente viene riprodotto. Affronteremo ancora questa problematica su STM32F7. <\/p>\n<p>Successivamente, abbiamo affittato un server e abbiamo installato Asterisk. Poich\u00e9 era necessario effettuare molte debug e parlare al microfono non era piacevole, abbiamo dovuto implementare la riproduzione e registrazione automatica. A questo scopo abbiamo patchato simple_pjsua in modo da poter inserire file al posto dei dispositivi audio. In PJSIP \u00e8 piuttosto semplice, poich\u00e9 hanno un concetto di porta che pu\u00f2 essere sia un dispositivo che un file. Queste porte possono essere collegate in modo flessibile ad altre porte. Puoi vedere il codice nel nostro pjsip. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">repository<\/a><\/noindex>. Di conseguenza, lo schema era il seguente. Sul server Asterisk ho creato due account: uno per Linux e uno per Embox. Successivamente, su Embox viene eseguito il comando <i>simple_pjsua_imported<\/i>, Embox si registra sul server, dopo di che chiamiamo da Linux a Embox. Nel momento della connessione, verifichiamo sul server Asterisk che tutte le connessioni siano stabilite e dopo un certo tempo dovremmo sentire su Embox il suono proveniente da Linux, mentre in Linux salviamo il file che viene riprodotto da Embox.<\/p>\n<p>Dopo che questo ha funzionato su QEMU, siamo passati al porting su STM32F7-Discovery. Il primo problema \u00e8 stato che non riuscivamo a stare dentro 1 MB di ROM senza attivare l'ottimizzazione del compilatore \"-Os\" per dimensioni dell'immagine. Quindi abbiamo attivato \"-Os\". Inoltre, abbiamo disabilitato il supporto C++ tramite un patch, poich\u00e9 \u00e8 necessario solo per pjsua, mentre noi utilizziamo simple_pjsua. <\/p>\n<p>Dopo averlo sistemato <i>simple_pjsua<\/i>, abbiamo deciso che ora c'erano buone possibilit\u00e0 di avviarlo. Ma prima dovevamo capire come registrare e riprodurre la voce. La domanda \u00e8: dove registrare? Abbiamo scelto la memoria esterna \u2014 SDRAM (128 MB). Puoi provare tu stesso:<\/p>\n<p>Creer\u00e0 un WAV stereo a 16000 Hz e una durata di 10 secondi:<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nRiproduzione:<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nQui si sono presentati due problemi. Il primo riguarda il codec: si usa WM8994, e in esso esiste un concetto chiamato slot, e ci sono 4 slot. Quindi, per impostazione predefinita, se non si configura, durante la riproduzione audio, il suono si verifica in tutti e quattro gli slot. Di conseguenza, a 16000 Hz ottenevamo 8000 Hz, mentre per 8000 Hz la riproduzione semplicemente non funzionava. Quando abbiamo selezionato solo gli slot 0 e 2, ha funzionato correttamente. Un altro problema era l'interfaccia audio in STM32Cube, in cui l'uscita audio funziona tramite SAI (Serial Audio Interface) sincronizzata con l'ingresso audio (non ho approfondito i dettagli, ma sembra che condividano un clock comune e, durante l'inizializzazione dell'uscita audio, in qualche modo si associa all'ingresso audio). Quindi non era possibile farli funzionare separatamente, cos\u00ec abbiamo fatto quanto segue: l'ingresso e l'uscita audio lavorano sempre (inclusi gli interrupt generati). Ma quando non viene riprodotto nulla nel sistema, semplicemente forniamo un buffer vuoto all'uscita audio, e quando inizia la riproduzione, lo riempiamo correttamente.<\/p>\n<p>Successivamente, ci siamo trovati di fronte al problema che il suono durante la registrazione della voce era molto debole. Questo accade perch\u00e9 i microfoni MEMS su STM32F7-Discovery non funzionano bene a frequenze inferiori a 16000 Hz. Pertanto impostiamo 16000 Hz, anche se arriva a 8000 Hz. Tuttavia, per questo \u00e8 stato necessario aggiungere una conversione software da una frequenza all'altra.<\/p>\n<p>Successivamente, \u00e8 stato necessario aumentare la dimensione dello heap, che si trova nella RAM. Secondo i nostri calcoli, pjsip richiedeva circa 190 kB, mentre noi avevamo solo circa 100 kB disponibili. Qui \u00e8 stato necessario utilizzare un po' di memoria esterna \u2014 SDRAM (circa 128 kB).<\/p>\n<p>Dopo tutte queste modifiche, ho visto i primi pacchetti tra Linux ed Embox e ho sentito il suono! Ma il suono era orribile, non era affatto come su QEMU, nulla poteva essere compreso. Allora abbiamo inizato a chiedere quale potesse essere il problema. Il debug ha mostrato che Embox non riesce a riempire\/svuotare i buffer audio in tempo. Mentre pjsip elabora un frame, avvenivano due interruzioni a completi di elaborazione dei buffer, il che \u00e8 troppo. La prima idea per accelerare era l'ottimizzazione del compilatore, ma era gi\u00e0 abilitata in PJSIP. La seconda era il punto in virgola mobile hardware, di cui abbiamo gi\u00e0 parlato. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer.<\/a><\/noindex>. Ma come ha dimostrato la pratica, l'FPU non ha portato a un incremento significativo della velocit\u00e0. Il passo successivo \u00e8 stato impostare le priorit\u00e0 dei flussi. In Embox ci sono diverse strategie di pianificazione, e ho attivato quella che supporta le priorit\u00e0, dando il massimo delle priorit\u00e0 ai flussi audio. Anche questo non ha avuto effetto.<\/p>\n<p>La prossima idea era che lavorassimo con la memoria esterna e sarebbe stato utile spostare l\u00ec le strutture a cui accediamo molto frequentemente. Ho effettuato un'analisi preliminare su quando e per cosa <i>simple_pjsua<\/i> viene allocata memoria. Si \u00e8 scoperto che su 190 Kb, i primi 90 Kb sono allocati per le esigenze interne di PJSIP e a esse si accede non molto spesso. Inoltre, durante una chiamata in arrivo, viene chiamata la funzione pjsua_call_answer, in cui vengono allocati i buffer per gestire i frame in entrata e in uscita. Ci\u00f2 ha comportato ulteriori circa 100 Kb. E qui ci siamo comportati nel seguente modo. Fino al momento della chiamata, i dati sono posizionati nella memoria esterna. Non appena arriva la chiamata, sostituiamo immediatamente l'heap con un altro in RAM. In questo modo, tutti i dati \u201ccaldi\u201d sono stati trasferiti in una memoria pi\u00f9 veloce e prevedibile.<\/p>\n<p>In definitiva, tutto questo ha permesso di avviare <i>simple_pjsua<\/i> e effettuare chiamate attraverso il proprio server. E successivamente anche attraverso altri server come sip.linphone.org.<\/p>\n<h3>Conclusioni<\/h3>\n<p>\nDi conseguenza, siamo riusciti a far partire <i>simple_pjsua<\/i> con trasmissione vocale in entrambe le direzioni tramite il server. Il problema con i 128 Kb di SDRAM spesi in pi\u00f9 pu\u00f2 essere risolto utilizzando un Cortex-M7 leggermente pi\u00f9 potente (ad esempio, STM32F769NI con 512 Kb di RAM), ma nel contempo non abbiamo ancora perso la speranza di rimanere all'interno dei 256 Kb \ud83d\ude42 Saremmo felici se qualcuno si mostrasse interessato, e ancor meglio \u2014 provasse. Tutti i sorgenti, come al solito, sono nel nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">repository<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/431134\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431 ROM \u0438 192 \u041a\u0431 RAM) \u043d\u0430 \u0431\u0430\u0437\u0435 Embox. \u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u044b\u043b\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u043b\u0430 \u0434\u0432\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0431\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0433\u043e\u043b\u043e\u0441\u0430 \u043b\u0438\u0448\u044c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37916","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F7-Discovery | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:31+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:31+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Telefono SIP su STM32F7-Discovery | ProHoster","description":"Ciao a tutti. Tempo fa abbiamo scritto di come siamo riusciti a far funzionare un telefono SIP su STM32F4-Discovery con 1 Mb.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F7-Discovery | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:31+00:00","article:modified_time":"2019-10-31T19:20:31+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37916","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:45:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:18:22","updated":"2026-01-23 19:45:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}