<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://mcu.goodboard.ru/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>Микроконтроллеры</title>
		<link>http://mcu.goodboard.ru/</link>
		<description>Микроконтроллеры</description>
		<language>ru-ru</language>
		<lastBuildDate>Thu, 12 Sep 2024 10:20:23 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>zip-архив форума</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5196#p5196</link>
			<description>&lt;p&gt;&lt;a href=&quot;https://disk.yandex.ru/d/5o5I4SCrfXLZWA&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://disk.yandex.ru/d/5o5I4SCrfXLZWA&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Thu, 12 Sep 2024 10:20:23 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5196#p5196</guid>
		</item>
		<item>
			<title>J-Link совместимый дебаггер на CH551</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5175#p5175</link>
			<description>&lt;p&gt;Спасибо за наводку, upload сделал.&lt;br /&gt; Считыватель firmware через загрузчик &lt;a href=&quot;https://www.mikrocontroller.net/topic/462538?page=2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;написал участник немецкого форума Thomas&lt;/a&gt;. Их там 2 варианта, для загрузчика старой версии 1.1 (freader.zip, с исходниками), и для новой 2.31 (freader2.zip, один ехешник). Оба работают через 5 функций из ch375dll.dll. Чтобы не возиться с путями просто скопировал Флеш-дампер freader.exe в папку установленного WCHISPTool, подключил программатор в режиме DFU, запустил, после отработки он создал 2 файла firmware.hex и firmware.bin. &lt;/p&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;Microsoft Windows [Version 6.1.7601]&lt;br /&gt;(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.&lt;/p&gt;
						&lt;p&gt;C:\WinSoft\WCHISPTool&amp;gt;freader.exe&lt;br /&gt;CH552 Flash Dumper&lt;br /&gt;... Bootloader V2.3 found.&lt;br /&gt;... starting point found at 0x3FE4&lt;br /&gt;... now reading the flash. This may take some time. If bored cancel with ESC&lt;br /&gt;................................................................................&lt;br /&gt;................................................................................&lt;br /&gt;................................................................................&lt;br /&gt;................&lt;br /&gt;C:\WinSoft\WCHISPTool&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt; Снимается полный дамп 16-килобайтной области Flash, считывание начинается с конца. Затем перебором 0..255 по нисходящей идет попытка считывания каждого байта. В программе есть ошибка, последний байт (адрес 0х0000) всегда считывается как 0хFF. Учитывая что это адрес вектора сброса, и там почти всегда стоит команда LJMP, байт 0хFF надо поменять на 0х02.&lt;br /&gt; Т.к. моя цель была получить и сохранить на будущее только прошивку программатора, нужно открыть firmware.bin в HEX-редакторе HxD. Код разделен на 2 части , прошивка (firmware, начало 0x0000) и загрузчик (bootlouder, начало 0x3800), между ними 0xFF. По адресу 0x0000 заменил байт 0хFF на 0х02, выделил весь код до начала блока 0хFF и сохранил как MinPro_I.bin.&lt;br /&gt; Осталось проверить, подключаем программатор в режиме DFU, загружаем WCHISPTool, в качестве User-файла указываем свежесозданный MinPro_I.bin, запускаем верификацию, отчет:&lt;/p&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;Device#0&amp;#160; UID:B9-64-4D-43-00-00-00-00, BTVER:02.31 &lt;br /&gt;** User file name:D:\TEMP\MINPRO_I.BIN &lt;br /&gt;** Download bytes:10432 B &lt;br /&gt;User file HASH: 9B16D6FF3303C0F029074C4E1E5E7E4E18938872 &lt;br /&gt;Via usb download CH552 firmware &lt;br /&gt;Device No.90700408 is started to download &lt;br /&gt;BTVER:02.31 &lt;br /&gt;Verifying... &lt;br /&gt;complete &lt;br /&gt;1#device device download is complete &lt;br /&gt;Total verified:1, 1 succeed, 0 failed &lt;br /&gt;time used:0.405s&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (anakost)</author>
			<pubDate>Wed, 10 Feb 2021 18:02:38 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5175#p5175</guid>
		</item>
		<item>
			<title>Форум вс&amp;#235;?</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5167#p5167</link>
			<description>&lt;p&gt;Кроссплатформенную сборку? Так китайчина, у которого я взял пытхоноскрипт, и написал ее!!! Я просто переписал на С, чтобы кошерно было.&lt;br /&gt;Лично я ничего кроссплатформенного писать не собираюсь. Исключительно под линукс (и, возможно, фряху).&lt;/p&gt;
						&lt;p&gt;Вчера поковырялся с ШИМ и TouchSensor. Мне понравилось. Очень простой МК, дубовый такой! Конечно, периферии раз, два — и обчелся, но зато дешевый и малоногий. Надо будет собрать волю в кулак и с USB разобраться. Там проблема в том, что документация скудная и переводная с китайского, а исходники примеров - офигено нечитабельный спагетти-код. Придется &amp;quot;причесывать&amp;quot; и переделывать/структурировать.&lt;br /&gt;Хочу на USB повторить то же, что и для STM32 у меня есть: эмуляция PL2303 (я подавляющее большинство железяк под этот чип маскирую), классический CDC-ACM и клавомыша HID.&lt;br /&gt;Кстати, на электрониксе как-то спор зашел, так я в качестве доказательства таки сделал &lt;a href=&quot;https://eddy-em.livejournal.com/298028.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;7 CDC-ACM&lt;/a&gt; на одном чипе. Нафиг не нужная железяка, но работает, на удивление!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Eddy_Em)</author>
			<pubDate>Fri, 20 Nov 2020 11:58:20 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5167#p5167</guid>
		</item>
		<item>
			<title>usbept - простой USB endpoint терминал</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5159#p5159</link>
			<description>&lt;p&gt;Возвращаясь к usbept&lt;br /&gt;Так как программа завершает работу по вводу пустой строки, а ввод-вывод это просто gets и printf, то всё это может работать и автоматически в пакетном режиме&lt;br /&gt;&lt;strong&gt;usbept &lt;span style=&quot;font-style: italic&quot;&gt;vid pid ep&lt;/span&gt; &amp;lt; input.txt &amp;gt; output.txt&lt;/strong&gt;&lt;br /&gt;Ввод строк из файла input.txt, вывод в файл output.txt&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Thu, 02 Jul 2020 22:06:37 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5159#p5159</guid>
		</item>
		<item>
			<title>USB enumeration для любого мк</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5156#p5156</link>
			<description>&lt;p&gt;Пример для ch55&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;#define USB_EP0_SIZE 8
__xdata uint8_t usb_buf0[USB_EP0_SIZE];&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void usb_trans ( void ) {
    uint8_t s = USB_INT_ST &amp;amp; 0x3F;
    if( s == 0x30 ) {                   /* r setup */
        if( usb_request( usb_buf0 ) ) {
            UEP0_T_LEN = usb_reply( usb_buf0, USB_EP0_SIZE );
            UEP0_CTRL  = 0xC0;          /* r-data1 t-data1 r-ack t-ack */
        } else {
            UEP0_CTRL = 0xF;            /* r-stall t-stall */
        }
    } else if( s == 0 ) {               /* r out0 */
        UEP0_CTRL = 0xA;                /* r-nak t-nak */
    } else if( s == 0x20 ) {            /* t in0 */
        if( usb_context.address ) {
            USB_DEV_AD = usb_context.address;
            usb_context.address = 0;
        }
        int n = usb_reply( usb_buf0, USB_EP0_SIZE );
        if( n &amp;lt; 0 ) {
            UEP0_CTRL = 2;              /* r-ack t-nak */
        } else {
            UEP0_T_LEN = n;
            UEP0_CTRL ^= 0x40;          /* t-data */
        }
    }
    ...
    UIF_TRANS = 0;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 9em&quot;&gt;&lt;pre&gt;void usb_interrupt ( void ) __interrupt ( 8 ) {
    if( UIF_RESET ) usb_reset();
    if( UIF_TRANS ) usb_trans();
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Thu, 02 Jul 2020 11:45:59 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5156#p5156</guid>
		</item>
		<item>
			<title>Makefile для целей debug/release</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5139#p5139</link>
			<description>&lt;p&gt;Интересно, каким образом они &amp;quot;узнают&amp;quot;, что, скажем, функция somefunct() лежит в библиотеке libshit, а не в библиотеке libass?&lt;br /&gt;Ответ: никаким. Нет такого способа. &lt;br /&gt;Все эти ограниченные язычонки живут лишь за счет того, что имеют крайне ограниченный набор библиотек. И никто к ним динамические библиотеки не присоединяет.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Eddy_Em)</author>
			<pubDate>Sun, 19 Jan 2020 17:11:03 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5139#p5139</guid>
		</item>
		<item>
			<title>ESP8266</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5132#p5132</link>
			<description>&lt;p&gt;Привет хлопчики!&lt;br /&gt;Хочу собрать простенький WEB сервер на STM32, с работой через ESP8266, мож у кого то найдется готовый проектик под F103...&lt;/p&gt;</description>
			<author>mybb@mybb.ru (shads)</author>
			<pubDate>Sun, 12 Jan 2020 01:01:45 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5132#p5132</guid>
		</item>
		<item>
			<title>Проекты и девайсы на STM32</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5117#p5117</link>
			<description>&lt;p&gt;&lt;strong&gt;iulink&lt;/strong&gt; - &lt;a href=&quot;https://github.com/geoffreymbrown/iulink&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/geoffreymbrown/iulink&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;Open source клон ST-Link на STM32F042&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s7.uploads.ru/YvSlc.gif&quot; alt=&quot;http://s7.uploads.ru/YvSlc.gif&quot; /&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Thu, 31 Oct 2019 16:40:18 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5117#p5117</guid>
		</item>
		<item>
			<title>Подключение/отключение USB-устройства</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5098#p5098</link>
			<description>&lt;p&gt;Решил сварганить CDC ACM. Обмен дескрипторами происходит верно: в системе появляется /dev/ttyACM0, dmesg не ругается, lsusb все верно показывает.&lt;br /&gt;А вот обмен данными что-то не идет... Надо будет покопаться - что ж за хрень такая!..&lt;/p&gt;
						&lt;p&gt;UPD: заработало! Я проглючил, и IN/OUT концевые точки перепутал.&lt;br /&gt;Теперь остается найти, как узнать, что USB отключили. Еще было бы неплохо узнать, что клиент отключился, но, в отличие от pl2303, ядро не посылает SEND_BREAK после выхода клиента...&lt;/p&gt;
						&lt;p&gt;UPD2: Таки вымучил &lt;a href=&quot;https://github.com/eddyem/stm32samples/tree/master/F1-nolib/CDC_ACM&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;классический CDC ACM&lt;/a&gt; на STM32F103. Заодно добавил туда детектирование подключения/отключения клиента. Вот только чтобы детектировать физическое подключение, придется мониторить уровень напряжения на USB порту — почему-то аппаратных вариантов (скажем, прерывание сгенерировать как только кабель выдернут) нет! Я надеялся было на SUSP — прерывание по бездействию — но эта зараза присутствует не только при отключенном кабеле, но и при отсутствии подключенного клиента!&lt;br /&gt;Еще один небольшой недостаток: почему-то не работает на андроиде. Возможно, там какой-то тивоизированный модуль ядра, который распознает лишь ACM с определенными VID/PID, а не произвольными!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Eddy_Em)</author>
			<pubDate>Mon, 28 Oct 2019 23:05:19 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5098#p5098</guid>
		</item>
		<item>
			<title>Bluetooth модули JDY</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=5052#p5052</link>
			<description>&lt;p&gt;Да наплевать, я же пользователь, а не кернел-хакер )&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Thu, 10 Oct 2019 08:59:57 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=5052#p5052</guid>
		</item>
		<item>
			<title>usbepx - монитор USB endpoints</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4944#p4944</link>
			<description>&lt;p&gt;Версия 0.7&lt;br /&gt;С терминальным режимом&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://sd.uploads.ru/SNPb6.png&quot; alt=&quot;http://sd.uploads.ru/SNPb6.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Для этого две endpoints [in и out] целиком отдаются для приёма-передачи текста&lt;br /&gt;В конфигурации это обозначается словом string вместо списка форматов&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;in3  {64 string}
out3 {64 string}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Fri, 13 Sep 2019 07:57:18 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4944#p4944</guid>
		</item>
		<item>
			<title>Покупки на Ebay и Aliexpress. Рекомендации и оплёвывания.</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4943#p4943</link>
			<description>&lt;p&gt;Это я уже понял.&lt;br /&gt;Даже али как бы и надежней. Заказывал часы,одни не рабочие пришли и спор и сразу возрат.&lt;br /&gt;Все посылки приходят,некоторые дольше или быстрей,но приходят. Даже бук заказал на распродажи и приличное качество....&lt;/p&gt;</description>
			<author>mybb@mybb.ru (CERGEI)</author>
			<pubDate>Thu, 12 Sep 2019 15:29:21 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4943#p4943</guid>
		</item>
		<item>
			<title>AndroWish - RAD под Android</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4931#p4931</link>
			<description>&lt;p&gt;Программа, передающая данные по wi-fi&lt;br /&gt;В первой части рисуется gui, во второй - коннект к серверу [и реконнект если отвалится] и передача значений R, G, B каждые 200 мс&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 33em&quot;&gt;&lt;pre&gt;foreach c {R G B} {
    button .b$c -text 0 -command &amp;quot;set v($c) 0&amp;quot;
    scale .s$c -label $c -orient horizontal -variable v($c)
    grid .b$c .s$c -sticky news
}
grid columnconfigure . 1 -weight 1
console hide

proc every ms {
    global s v
    if {[catch {puts $s &amp;quot;\nrgb1\n$v(R) $v(G) $v(B)&amp;quot;}]} {
        catch {close $s}
        catch {
            set s [socket 192.168.4.1 333]
            fconfigure $s -blocking no -buffering none
        }
    }
    after $ms &amp;quot;every $ms&amp;quot;
}
after idle every 200&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://sg.uploads.ru/L1fFM.jpg&quot; alt=&quot;http://sg.uploads.ru/L1fFM.jpg&quot; /&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Sun, 08 Sep 2019 16:22:28 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4931#p4931</guid>
		</item>
		<item>
			<title>CH55x (CH551 CH552 CH554)</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4904#p4904</link>
			<description>&lt;p&gt;Минималистичный программатор для новых ch552&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;quot;libusb.h&amp;quot;
libusb_device_handle *devh;
char buf[64];
char chip[]     = &amp;quot;\xA1\x12\x00\x52\x11MCU ISP &amp;amp; WCH.CN&amp;quot;;
char final[]    = {0xA2, 1, 0, 0};
char key[43]    = {0xA3, 40, 0};
char erase[]    = {0xA4, 1, 0, 8};
char write[64]  = {0xA5, 61, 0, 0, 0, 0, 0, 0};
char verify[64] = {0xA6, 61, 0, 0, 0, 0, 0, 0};
char info[]     = {0xA7, 2, 0, 0x1F, 0};
char xxx[]      = {0xA8, 14, 0, 7, 0, 0xFF, 0xFF, 0xFF, 0xFF, 3, 0, 0, 0, 0xFF, 0x52, 0, 0};

int usb ( unsigned char *data, int olen, int ilen ) {
    int inum, iret, onum, oret;
    if (!devh) {
        libusb_init( NULL );
        devh = libusb_open_device_with_vid_pid( NULL, 0x4348, 0x55E0 );
        libusb_claim_interface( devh, 0 );
    }
    if (olen) {
        oret = libusb_bulk_transfer( devh,    2, data, olen, &amp;amp;onum,  100 );
        iret = libusb_bulk_transfer( devh, 0x82, buf,  ilen, &amp;amp;inum, 1000 );
//      for (int i = 0; i &amp;lt; inum; i++) printf( &amp;quot;%02X &amp;quot;, buf[i] &amp;amp; 0xFF );
    }
    if (!olen || oret || iret) {
        libusb_release_interface( devh, 0 );
        libusb_close( devh );
        libusb_exit( NULL );
        exit( oret | iret );
    } else return inum;
}

int main ( int argc, char **argv ) {
    int a = 0, i, n, s;
    FILE *f;
    if ((f = fopen( argv[1], &amp;quot;rb&amp;quot; )) == NULL) exit( -1 );
//  printf( &amp;quot;chip %d\n&amp;quot;,  usb( chip,  sizeof(chip)-1, 6 ));
//  printf( &amp;quot;info %d\n&amp;quot;,  usb( info,  sizeof(info),  30 ));
    printf( &amp;quot;xxx %d\n&amp;quot;,   usb( xxx,   sizeof(xxx),    6 ));
    printf( &amp;quot;info %d\n&amp;quot;,  usb( info,  sizeof(info),  30 ));
    s = buf[22] + buf[23] + buf[24] + buf[25];
    for (i = 3; i &amp;lt; 43; i++) key[i] = s &amp;amp; 0xFF;
    printf( &amp;quot;key %d\n&amp;quot;,   usb( key,   sizeof(key),    6 ));
    printf( &amp;quot;erase %d\n&amp;quot;, usb( erase, sizeof(erase),  6 ));
    do {
        if (!(n = fread( buf, 1, 56, f ))) break;
        for (i = 0; i &amp;lt; n; i++) if (i % 8 == 7) buf[i] ^= 0x52;
        write[1] = (n + 5) &amp;amp; 0xFF;
        write[3] = a &amp;amp; 0xFF;
        write[4] = (a &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;
        memcpy( write + 8, buf, n );
        printf( &amp;quot;write %d %d %d\n&amp;quot;, a, n, usb( write, n + 8, 6 ));
        a += n;
    } while (n == 56);
/*
    a = 0;
    rewind( f );
    do {
        if (!(n = fread( buf, 1, 56, f ))) break;
        for (i = 0; i &amp;lt; n; i++) if (i % 8 == 7) buf[i] ^= 0x52;
        verify[1] = (n + 5) &amp;amp; 0xFF;
        verify[3] = a &amp;amp; 0xFF;
        verify[4] = (a &amp;gt;&amp;gt; 8) &amp;amp; 0xFF;
        memcpy( verify + 8, buf, n );
        printf( &amp;quot;verify %d %d %d\n&amp;quot;, a, n, usb( verify, n + 8, 6 ));
        a += n;
    } while (n == 56);
*/
    printf( &amp;quot;final %d\n&amp;quot;, usb( final, sizeof(final),  6 ));
    usb( buf, 0, 0 );
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Tue, 27 Aug 2019 07:39:27 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4904#p4904</guid>
		</item>
		<item>
			<title>CS1237 CS1238</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4883#p4883</link>
			<description>&lt;p&gt;конвертик вчера получил, спасибо&lt;/p&gt;</description>
			<author>mybb@mybb.ru (selevo)</author>
			<pubDate>Fri, 16 Aug 2019 12:07:33 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4883#p4883</guid>
		</item>
		<item>
			<title>GD32E230 - новая линейка на Cortex M23</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4798#p4798</link>
			<description>&lt;p&gt;Да, подвох оказывается есть. Доставка у сеггера конская по США - до Калифорнии $16 минимум, до Делавера $8. В Делавере есть недорогие посредники, через которых не раз заказывал товары с США. Но чет желание отпало, наверное и правда проще с Али купить китайский &amp;quot;v9&amp;quot;.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (NStorm)</author>
			<pubDate>Sun, 28 Jul 2019 22:06:54 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4798#p4798</guid>
		</item>
		<item>
			<title>STM32F030F4 + SPI1 in half-duplex mode</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4740#p4740</link>
			<description>&lt;div class=&quot;quote-box answer-box&quot;&gt;&lt;cite&gt;MasterElectric написал(а):&lt;/cite&gt;&lt;blockquote&gt;&lt;p&gt;Спасибо за ответ, я так понимаю что ножка NSS в полудуплексе тоже двунаправленная? т.к. при передаче мы управляем слейвом, а во время приема слейв запрашивает клок для данных. А с какими таймингами у вас работает такой вариант? Я бы хотел 1/2 от тактирования модуля, думаю ничего не успеет отключить мастера, буду делать из полного дуплекса полудуплекс, во время приема отключу MOSI, попробую так. Мне то всего 3 бита принять и потом еще 4 байта. Делаю SWD. (ногодрыг работает но это не наш метод)))&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;у меня скорость очень маленькая 8/256 . датчик температуры опрашивается.&lt;/p&gt;
						&lt;p&gt;кстати глянул в RM (l053, думаю в других сериях также)&lt;/p&gt;
						&lt;p&gt;&amp;quot; Receive-only mode (RXONLY=1): &lt;br /&gt;The clock signal is generated continuously as long as the SPI is enabled. The only way to&lt;br /&gt;stop the clock is to clear the RXONLY bit or the SPE bit and wait until the incoming&lt;br /&gt;pattern from the MISO pin is finished and fills the data buffer structure, depending on its&lt;br /&gt;configuration.&amp;quot;&lt;/p&gt;
						&lt;p&gt;Software NSS management я обычно выключаю, но опять же из RM интересная штука &lt;/p&gt;
						&lt;p&gt;NSS output enable (SSM=0,SSOE = 1): this configuration is only used when the&lt;br /&gt;MCU is set as master. The NSS pin is managed by the hardware. &lt;strong&gt;The NSS signal&lt;br /&gt;is driven low as soon as the SPI is enabled in master mode (SPE=1), and is kept&lt;br /&gt;low until the SPI is disabled (SPE =0).&lt;/strong&gt;&lt;/p&gt;
						&lt;p&gt;NSS output disable (SSM=0, SSOE = 0): if the microcontroller is acting as the&lt;br /&gt;master on the bus, this configuration allows multimaster capability.&lt;strong&gt; If the NSS pin&lt;br /&gt;is pulled low in this mode, the SPI enters master mode fault state and the device is&lt;br /&gt;automatically reconfigured in slave mode.&lt;/strong&gt; In slave mode, the NSS pin works as a&lt;br /&gt;standard “chip select” input and the slave is selected while NSS line is at low level.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Atomic-dm)</author>
			<pubDate>Thu, 25 Jul 2019 14:37:27 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4740#p4740</guid>
		</item>
		<item>
			<title>Sin , Cos и другие математические операции.</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4729#p4729</link>
			<description>&lt;div class=&quot;quote-box answer-box&quot;&gt;&lt;cite&gt;Eddy_Em написал(а):&lt;/cite&gt;&lt;blockquote&gt;&lt;p&gt;Лежит на гитхабе в моих сниппетах.&lt;br /&gt;На для МК с аппаратными флоатами и мегабайтов флеша, думаю, можно и math.h использовать. Я-то делал для STM8  и младших STM32.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Спасибо за ответ!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Atomic-dm)</author>
			<pubDate>Mon, 22 Jul 2019 15:46:11 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4729#p4729</guid>
		</item>
		<item>
			<title>N76E003</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4725#p4725</link>
			<description>&lt;p&gt;:cool:&lt;br /&gt;производителей понять не могу, че они лепят все&amp;#160; одно и тоже ,взяли бы да&amp;#160; поставили&amp;#160; ШИМ 16&amp;#160; бит везде, жалко что ли...&lt;/p&gt;</description>
			<author>mybb@mybb.ru (selevo)</author>
			<pubDate>Mon, 22 Jul 2019 09:06:58 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4725#p4725</guid>
		</item>
		<item>
			<title>Программные модули в си</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4723#p4723</link>
			<description>&lt;p&gt;Если всё с нуля, один и для себя, то конечно дело вкуса&lt;br /&gt;Но если или не с нуля, или не один, или не только для себя, то совсем другое дело )&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Wed, 17 Jul 2019 21:11:11 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4723#p4723</guid>
		</item>
		<item>
			<title>USB CDC для STM32F103</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4706#p4706</link>
			<description>&lt;p&gt;Методом &amp;quot;Монте-Карло&amp;quot; починил. Изменения &lt;a href=&quot;https://github.com/eddyem/stm32samples/blob/master/F1-nolib/chronometer/usb_lib.c#L309&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;закоммитил&lt;/a&gt;.&lt;br /&gt;Вот как должен выглядеть обработчик второго прогона SET_LINE_CODING:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 16.5em&quot;&gt;&lt;pre&gt;
        if(ep.rx_cnt){
            if(setup_packet.bRequest == SET_LINE_CODING){
                linecoding_handler((usb_LineCoding*)ep0databuf);
            }
        }
        // wait for new data from host
        epstatus = SET_VALID_RX(epstatus);
        epstatus = SET_VALID_TX(epstatus);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (Eddy_Em)</author>
			<pubDate>Fri, 12 Jul 2019 22:35:48 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4706#p4706</guid>
		</item>
		<item>
			<title>Эмуляция EEPROM во флеш STM32</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4702#p4702</link>
			<description>&lt;div class=&quot;quote-box answer-box&quot;&gt;&lt;cite&gt;vt написал(а):&lt;/cite&gt;&lt;blockquote&gt;&lt;p&gt;Вычислять можно и в самом ld-скрипте&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Согласен, можно и так. Особенно удобен такой вариант, если область эмуляции EEPROM&#039;а не инициализируется в прошивке, а только после первого включения.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Eddy_Em)</author>
			<pubDate>Thu, 11 Jul 2019 10:51:14 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4702#p4702</guid>
		</item>
		<item>
			<title>stdio</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4686#p4686</link>
			<description>&lt;p&gt;В Espressif пошли другим путём - добавли к newlib Virtual filesystem&lt;br /&gt;&lt;a href=&quot;https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/storage/vfs.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://docs.espressif.com/projects/esp &amp;#8230; e/vfs.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (vt)</author>
			<pubDate>Mon, 08 Jul 2019 09:21:27 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4686#p4686</guid>
		</item>
		<item>
			<title>нужна программка</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4637#p4637</link>
			<description>&lt;div class=&quot;quote-box answer-box&quot;&gt;&lt;cite&gt;Eddy_Em написал(а):&lt;/cite&gt;&lt;blockquote&gt;&lt;p&gt;А я себе на жабоскрипте велосипед сделал для создания шрифтов. &lt;br /&gt;Нормально работает.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;хочется отметить. очень хороший велосипед. &amp;quot;Ну и сам шрифт&amp;quot; для ленивых копипастов.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (RA)</author>
			<pubDate>Wed, 19 Jun 2019 16:37:45 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4637#p4637</guid>
		</item>
		<item>
			<title>stm32f030 boot loader, rtc  и прочее...</title>
			<link>http://mcu.goodboard.ru/viewtopic.php?pid=4621#p4621</link>
			<description>&lt;div class=&quot;quote-box answer-box&quot;&gt;&lt;cite&gt;MasterElectric написал(а):&lt;/cite&gt;&lt;blockquote&gt;&lt;p&gt;Можно, я так делаю. Но ставлю еще и джампер для перехода нв заводской бут.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Спасибо. А то по рукой ничего кроме перемычки нет. Ни паяльник ни деталей. А джемпер есть. Предусмотрено. И тырнет такой что доки не скачать.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (RA)</author>
			<pubDate>Sat, 15 Jun 2019 18:27:57 +0300</pubDate>
			<guid>http://mcu.goodboard.ru/viewtopic.php?pid=4621#p4621</guid>
		</item>
	</channel>
</rss>
