{"id":255942,"date":"2015-04-24T13:29:09","date_gmt":"2015-04-24T09:29:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=255942"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=255942","title":{"rendered":"CAN-USB \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0438\u0437 stm32vldiscovery"},"content":{"rendered":"<p> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b5b\/3c0\/722\/b5b3c07223dc47a59835f709714c639f.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 CAN-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0442\u0438. \u0414\u043b\u044f RS232\/485 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0445 USB \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u0438 \u043a\u0443\u0447\u0430 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430, \u0430 \u0432\u043e\u0442 \u0434\u043b\u044f CAN \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u043e\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <\/p>\n<p>  \u0412 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u0430\u0432\u0442\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a CAN \u0448\u0438\u043d\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f. \u041e\u0434\u043d\u0438\u043c\u0438 \u0438\u0437 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 USB&lt;&gt;CAN Bus Interface (CAN Hacker), \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 Atmega+SJA1000 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 STM32-CAN-Busadapter, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 STM32F105. \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u043d\u0438 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 CAN Hacker, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0411\u0435\u0433\u043b\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e USB \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f COM \u043f\u043e\u0440\u0442\u043e\u043c, \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u0437 ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>  \u0412 \u0437\u0430\u043a\u0440\u043e\u043c\u0430\u0445 \u0431\u044b\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 STM32VLDiscovery, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0441\u0442\u0430\u043b\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439. \u041d\u0430 \u043d\u0435\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u00abSTM32-CAN-Busadapter\u00bb. <br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32F100, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 STM32VLDiscovery. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 CAN \u0438 USB \u0432 \u0441\u0435\u0440\u0438\u0438 F1 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 STM32F105\/107. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0443 STM \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0430 pin-to-pin \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0438\u0439, \u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u043c \u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435. <\/p>\n<p>  \u0412 \u043c\u0435\u0441\u0442\u043d\u043e\u043c \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u044b:<br \/>  1. STM32F105RBT6 297 \u0440\u0443\u0431.<br \/>  2. PCA82C250T 115 \u0440\u0443\u0431.<br \/>  3. TJA1055T 138 \u0440\u0443\u0431.<br \/>  4. PBS-40, 2\u0448\u0442. 114 \u0440\u0443\u0431. <br \/>  \u041c\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u00ab\u0441 \u0434\u044b\u0440\u043e\u0447\u043a\u0430\u043c\u0438 2,54\u00bb \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0436\u0434\u0430\u043b\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0447\u0430\u0441\u0430.<\/p>\n<h4>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443<\/h4>\n<p>  \u0421\u0442\u0438\u0440\u0430\u0435\u043c \u043f\u044b\u043b\u044c \u0441 STM32VLDiscovery, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0435\u0449\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0432 Demo-\u043f\u0440\u043e\u0435\u043a\u0442. \u041f\u0435\u0440\u0435\u043f\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0430\u0434\u043a\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0432 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<p>  \u0421 \u0441\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 STM32-CAN-Busadapter \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c <i>(\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f)<\/i> \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u00abSTM32 ST-LINK Utility\u00bb \u0437\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0432 \u043d\u0430\u0448 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440. <\/p>\n<p>  \u0423\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u2014 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 STM32-CAN-Busadapter.<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/2c3\/56d\/de6\/2c356dde6be64e898e4d492e463ec9ca.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438\u043f\u0430\u0438\u0432\u0430\u0435\u043c USB D+,D-,Vbus \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u0436\u0430\u043c\u043f\u0435\u0440\/\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0430 PA2, \u0443 \u0430\u0432\u0442\u043e\u0440\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u044b\u0439 \u00abBootloader\u00bb. <\/p>\n<p>  \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438 &#8230;.,<i><b> \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/b><\/i>, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e USB \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u0441\u043e\u0432\u0441\u0435\u043c. \u041f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u00abBootloader\u00bb.<\/p>\n<p>  \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e USB \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043b\u0438\u043d\u0438\u044e D+ \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u044c \u043d\u0430 5\u0412 \u0447\u0435\u0440\u0435\u0437 1,5\u041a\u041e\u043c \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0448\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u00ab\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u00bb \u0441 vid\/pid 0000.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 USB \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u041f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 USB<\/h4>\n<p>  \u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c STM32CubeMX, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u0440\u044f\u043f\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u041f\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f\u043c ST \u0438 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CubeMX \u2014 \u044d\u0442\u043e \u00ab\u043c\u043e\u0434\u043d\u043e, \u0441\u0442\u0438\u043b\u044c\u043d\u043e, \u043c\u043e\u043b\u043e\u0434\u0451\u0436\u043d\u043e\u00bb, \u043d\u0430\u0434\u043e \u0436\u0435 \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c Cub-\u043e\u043c.<\/p>\n<p>  \u0421 \u0441\u0430\u0439\u0442\u0430 STMicroelectronic \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c STM32CubeMX. \u0412\u0435\u0440\u0441\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0443 \u043c\u0435\u043d\u044f v4.7.0.<\/p>\n<p>  \u0412 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c Cube \u0432\u0445\u043e\u0434\u0438\u043c \u0432 \u00abHelp\u00bb-&gt;\u00abInstall New Libraries\u00bb \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u00abFirmware Package for Family STM32F1\u00bb (\u0443 \u043c\u0435\u043d\u044f V1.0.0).<\/p>\n<p>  \u0412 \u00abHelp\u00bb-&gt;\u00abUpdater Settings\u00bb \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u00abRepository Folder\u00bb \u2014 \u043c\u0435\u0441\u0442\u043e, \u043a\u0443\u0434\u0430 \u0441\u043a\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u043d\u0430\u0448\u0430 \u00abFirmware Package\u00bb, \u0442\u0430\u043c \u043b\u0435\u0436\u0430\u0442 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442.<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Cube<\/h4>\n<p>  MCU \u2014 STM32F105RBTx.<br \/>  \u0412 \u00abConfiguration\u00bb-&gt;\u00abPeripheals\u00bb-&gt;\u00abRCC\u00bb \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u0432\u0430\u0440\u0446\u0435\u0432\u043e\u0433\u043e \u0440\u0435\u0437\u043e\u043d\u0430\u0442\u043e\u0440\u0430, HSE \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432 \u00abCrystal\/Ceramic Resonator\u00bb. <br \/>  \u0412 \u00abConfiguration\u00bb-&gt;\u00abPeripheals\u00bb-&gt;\u00abUSB_OTG_FS\u00bb \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0440\u0435\u0436\u0438\u043c \u00abDevice_Only\u00bb, \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u00abActivate_VBUS\u00bb \u2014 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a USB. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0436\u043a\u0438 PA9, PA11 \u0438 PA12 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 USB.<br \/>  \u0412 \u00abConfiguration\u00bb-&gt;\u00abMiddleWares\u00bb-&gt;\u00abUSB_DEVICE\u00bb-&gt;\u00abClass For FS IP\u00bb \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u00abCommunication Device Class (Virtual Port Com)\u00bb.<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/53e\/546\/09f\/53e54609f5794fcf93493cef6744e524.jpg\"\/><\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 \u00abClock Configuration\u00bb \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432 PLL \u0438 Prescaler-\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 SystemClock_Config. \u0423 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0430\u044f \u00ab\u043a\u0430\u0440\u0442\u0438\u043d\u0430\u00bb:<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/45a\/ed0\/120\/45aed0120a8244dea72191cdb553f642.jpg\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 IDE \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442. \u042f \u0432\u044b\u0431\u0440\u0430\u043b Keil 4, \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b Keil5, Keil4, IAR, TrueStudio, SW4STM32. \u041f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u00abOpen Project\u00bb \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0430 \u0441\u0440\u0435\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c. <br \/>  \u0418\u2026, <b>\u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/b>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043d\u0430\u0448\u043b\u0438\u0441\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"http:\/\/www.st.com\/web\/en\/catalog\/tools\/PF257938#\">ST<\/a>. \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u00ab\u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u00bb \u0432\u0438\u0434\u0438\u043c \u00abSTMicroelectronics Virtual COM Port (COM4)\u00bb.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435\u043b\u0435\u0437\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u0447\u0443\u0436\u0430\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043d\u0435\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e, \u0447\u0442\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. <\/p>\n<p>  \u041f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0434\u0443\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0438 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435, \u0430 \u0432 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c. <\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/74d\/10b\/4ce\/74d10b4ced3949a2b0952a97e13eb938.jpg\"\/><\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0433\u0443\u0433\u043b\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 4 \u0431\u0430\u0439\u0442\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u2014 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0435\u043a\u0430, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 4 \u0431\u0430\u0439\u0442\u0430 \u2014 \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u041d\u0430\u043f\u0438\u0441\u0430\u043b \u0430\u0432\u0442\u043e\u0440\u0443 STM32-CAN-Busadapter. \u041e\u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u00ab\u0431\u0438\u0442\u0430\u044f\u00bb, \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043d\u0435 \u0442\u0430\u043a\u0438\u0435, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c. Andreas \u043c\u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u043b. \u041d\u0430\u043f\u0438\u0441\u0430\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430-\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0430\u044f, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0435\u0433\u043e \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430. \u041a \u043f\u0438\u0441\u044c\u043c\u0443 \u0431\u044b\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d .hex \u0444\u0430\u0439\u043b \u00abpersonally version only for you\u00bb.<\/p>\n<h4>\u041e\u041a, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h4>\n<p>  \u0414\u043e\u043f\u0430\u0438\u0432\u0430\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440\u043e\u0432 CAN, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u00ab\u043a\u0440\u0430\u0441\u043e\u0442\u0443\u00bb. \u041f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u043a D+ \u043b\u0438\u043d\u0438\u0438 USB \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0440\u0430\u0442\u044c, \u043e\u043d \u0435\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/fbd\/fd1\/441\/fbdfd1441b8a46fb96c211e00e95ee99.jpg\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/e7a\/cf5\/76b\/e7acf576be3347a0877f9d3c7e06f96e.jpg\"\/><\/p>\n<p>  \u041f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c CAN Hacker, \u0438\u0437\u0443\u0447\u0430\u0435\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c CAN \u0441\u0435\u0442\u0438. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u043f\u043b\u0430\u0442\u0430 openmcu \u0441 STM32F107 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0434\u0430\u0432\u0430\u043b\u0430 CAN \u043f\u043e\u0441\u044b\u043b\u043a\u0438. \u041f\u043e\u0438\u0433\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u00abCAN Hacker\u00bb, \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0448\u0442\u0443\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u044f, \u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c\u044b monitor \u0438 tracer \u2014 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0438\u043b\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043b\u0438 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0438\u0434\u0435\u043e, \u043d\u0435 \u043c\u043e\u0451.<\/p>\n<p>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/jUuncLav0v8?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0434\u043b\u044f \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>  <b>\u041f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443&#8230;<\/b><br \/>  \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u0439 IDE \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Cube \u0438 \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u043a\u0443\u0441\u043a\u0438 \u043a\u043e\u0434\u0430.<br \/>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u2014 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 <br \/>   \/* USER CODE BEGIN\u2026 *\/<br \/>  \u0438<br \/>  \/* USER CODE END\u2026 *\/<br \/>  \u0418\u043d\u0430\u0447\u0435 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u043d\u0435 \u0442\u0430\u043a\u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0449\u0430\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e Cub-\u043e\u043c \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <b>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0445\u043e<\/b>: \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0432 \u043d\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 COM \u043f\u043e\u0440\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<br \/>  \u041f\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e USB \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 <b>CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)<\/b> \u0432 \u0444\u0430\u0439\u043b\u0435 &quot;<i>usbd_cdc_if.c<\/i>&quot;.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u042d\u0445\u043e<\/b><\/p>\n<div class=\"spoiler_text\">static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)<br \/>  {<br \/>   \/* USER CODE BEGIN 6 *\/<\/p>\n<p>   CDC_Transmit_FS(Buf, *Len); \/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438<\/p>\n<p>   USBD_CDC_SetRxBuffer(hUsbDevice_0,&#038;UserRxBufferFS[0]);<br \/>   USBD_CDC_ReceivePacket(hUsbDevice_0); \/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430<\/p>\n<p>   return (USBD_OK);<br \/>   \/* USER CODE END 6 *\/ <br \/>  }<\/p><\/div>\n<\/div>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043d\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 COM-\u043f\u043e\u0440\u0442. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0440\u0442\u0430 (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0447\u0451\u0442\u043d\u043e\u0441\u0442\u044c) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c\u0438. \u0423\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h4>\u041f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0434 CAN Hacker<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0447\u043d\u0451\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u00abCAN Hacker\u00bb. \u0421\u0430\u043c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 USB&lt;&gt;CAN Bus Interface (CAN Hacker), \u0432 \u0444\u0430\u0439\u043b\u0435 \u00ab\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u00bb, \u0438\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u00abLawicel Protokol\u00bb.<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 USBTrace \u0431\u044b\u043b \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430.<\/p>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u00ab\u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\u00bb, \u043d\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u043c \u00ab\u041e\u041a\u00bb (0x0D).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 CDC_Receive_FS<\/b><\/p>\n<div class=\"spoiler_text\">static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)<br \/>  {<br \/>   \/* USER CODE BEGIN 6 *\/<\/p>\n<p>   uint32_t num_bytes;<br \/>   uint8_t res;<br \/>   uint8_t tmp_byte;<\/p>\n<p>   HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_9);<\/p>\n<p>   switch(Buf[0])<br \/>   {<br \/>   case &#8216;V&#8217;:<br \/>   num_bytes = sprintf((char*)UserTxBufferFS,\u00abV0101\\r\u00bb);<br \/>   break;<\/p>\n<p>   case &#8216;v&#8217;:<br \/>   num_bytes = sprintf((char*)UserTxBufferFS,\u00abvSTM32\\r\u00bb);<br \/>   break;<\/p>\n<p>  default:<br \/>   num_bytes = sprintf((char*)UserTxBufferFS,&quot;\\r&quot;);<br \/>   break;<br \/>   }<\/p>\n<p>   USBD_CDC_SetTxBuffer(hUsbDevice_0, (uint8_t*)&#038;UserTxBufferFS[0], num_bytes);<br \/>   USBD_CDC_TransmitPacket(hUsbDevice_0);<\/p>\n<p>  \/\/ CDC_Transmit_FS(Buf, *Len);<\/p>\n<p>   USBD_CDC_SetRxBuffer(hUsbDevice_0,&#038;UserRxBufferFS[0]);<br \/>   USBD_CDC_ReceivePacket(hUsbDevice_0); <\/p>\n<p>  return (USBD_OK);<br \/>   \/* USER CODE END 6 *\/ <br \/>  }  <\/div>\n<\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u00abCAN Hacker\u00bb \u0441\u043c\u043e\u0436\u0435\u0442 \u00ab\u0443\u0432\u0438\u0434\u0435\u0442\u044c\u00bb \u043d\u0430\u0448 \u0430\u0434\u0430\u043f\u0442\u0435\u0440.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 CAN \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443<\/h4>\n<p>  \u0412 Cube \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u00abConfiguration\u00bb-&gt;\u00abPeripheals\u00bb-&gt;\u00abCAN1\u00bb \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u00abMaster mode\u00bb. \u041d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 \u00abConfiguration\u00bb \u00abCAN1\u00bb \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u0438\u0451\u043c\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/f68\/454\/361\/f684543610ba4de0a6e27d04318e8bbe.jpg\"\/><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u043c\u0435\u043d\u0430 \u043f\u043e CAN \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 500 \u041a\u0431\u0438\u0442\/\u0441.<\/b><\/p>\n<div class=\"spoiler_text\">\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f CAN \u043e\u0442 \u0448\u0438\u043d\u044b APB1 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 36 \u041c\u0413\u0446, \u0434\u0435\u043b\u0438\u043c \u0435\u0451 \u043d\u0430 6, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0432\u0430\u043d\u0442\u0430.<br \/>  \u041e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f 1+6+5 \u043a\u0432\u0430\u043d\u0442\u043e\u0432, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 36\/6\/(1+6+5)=0,5 \u041c\u0413\u0446, \u0438\u043b\u0438 500 \u041a\u0431\u0438\u0442\/\u0441.<br \/>  \u0418\u0437\u043c\u0435\u043d\u044f\u044f \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u00abPrescaler (for Time Quantum)\u00bb \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 125,250,500,1000 \u041a\u0431\u0438\u0442.<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/614\/314\/8f5\/6143148f584845aca774ca489afd8362.jpg\"\/>  <\/div>\n<\/div>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Cube, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 IDE.<\/p>\n<p>  \u0412 \u00abmain.c\u00bb \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f CAN, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 <b>HAL_CAN_RxCpltCallback<\/b>. \u042d\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043f\u0440\u0438\u0451\u043c\u0443 CAN. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u043c, \u0442.\u043a. \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u00ab\u043d\u0435\u0434\u0440\u0430\u0445\u00bb \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e Cub-\u043e\u043c. \u0412\u0441\u0451 \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u043f\u043e CAN \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0432 USB, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e CAN \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 0x123 \u043f\u0440\u0438\u043d\u044f\u043b\u0438 8 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88, \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0434\u043b\u044f USB \u00abt12381122334455667788\u00bb \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0438\u043c\u0432\u043e\u043b 0x0D \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0421\u041e\u041c \u043f\u043e\u0440\u0442 \u043d\u0430 \u041f\u041a.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u0438\u0451\u043c CAN \u043f\u043e\u0441\u044b\u043b\u043e\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\u0431\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<br \/>  \/* USER CODE BEGIN PV *\/<br \/>  static CanTxMsgTypeDef can1TxMessage;<br \/>  static CanRxMsgTypeDef can1RxMessage;<br \/>  \/* USER CODE END PV *\/<\/p>\n<p>  \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0435 \u043f\u043e\u0441\u044b\u043b\u043a\u0438<br \/>  \/* USER CODE BEGIN 0 *\/<br \/>  void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* CanHandle)<br \/>  {<br \/>   uint32_t num_bytes;<br \/>   uint8_t buf[200];<\/p>\n<p>  num_bytes = sprintf((char*)buf,\u00abt%3.3X%1.1X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%4.4X\\r\u00bb, \\<br \/>   CanHandle-&gt;pRxMsg-&gt;StdId,\\<br \/>   CanHandle-&gt;pRxMsg-&gt;DLC,\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[0],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[1],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[2],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[3],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[4],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[5],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[6],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[7]\\<br \/>   );<br \/>   CDC_Transmit_FS(buf,num_bytes); \/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 USB \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043e CAN<\/p>\n<p>  HAL_CAN_Receive_IT(&#038;hcan1, CAN_FIFO0); \/\/\u0436\u0434\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0441\u044b\u043b\u043a\u0443<br \/>  }<br \/>  \/* USER CODE END 0 *\/<\/p>\n<p>  \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 CDC_Transmit_FS \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c .h \u0444\u0430\u0439\u043b<br \/>  \/* USER CODE BEGIN Includes *\/<br \/>  #include \u00abusbd_cdc_if.h\u00bb<br \/>  \/* USER CODE END Includes *\/<\/p>\n<p>  \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 main \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u0440\u0438\u0451\u043c\u043d\u044b\u0439 \u0444\u0438\u043b\u044c\u0442\u0440<br \/>   \/* USER CODE BEGIN 2 *\/<br \/>   hcan1.pTxMsg = &#038;can1TxMessage;<br \/>   hcan1.pRxMsg = &#038;can1RxMessage;<br \/>   \/* USER CODE END 2 *\/<\/p>\n<p>  \/\/ \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u2014 \u043f\u0440\u0438\u0451\u043c \u0432\u0441\u0435\u0445 \u043f\u043e\u0441\u044b\u043b\u043e\u043a<br \/>   CAN_FilterConfTypeDef canFilterConfig;<br \/>   canFilterConfig.FilterNumber = 0;<br \/>   canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;<br \/>   canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;<br \/>   canFilterConfig.FilterIdHigh = 0x0000;<br \/>   canFilterConfig.FilterIdLow = 0x0000;<br \/>   canFilterConfig.FilterMaskIdHigh = 0x0000 &lt;&lt; 5;<br \/>   canFilterConfig.FilterMaskIdLow = 0x0000;<br \/>   canFilterConfig.FilterFIFOAssignment = 0;<br \/>   canFilterConfig.FilterActivation = ENABLE;<br \/>   canFilterConfig.BankNumber = 1;<br \/>   HAL_CAN_ConfigFilter(&#038;hcan1, &#038;canFilterConfig);<\/p>\n<p>  HAL_CAN_Receive_IT(&#038;hcan1, CAN_FIFO0); \/\/\u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c \u043f\u043e\u0441\u044b\u043b\u043e\u043a<br \/>   \/* USER CODE END 2 *\/<\/p>\n<p>  \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0431\u0443\u0444\u0435\u0440\u043e\u0432 USB<br \/>  #define APP_RX_DATA_SIZE 1000 \/\/ \u0431\u044b\u043b\u043e 4<br \/>  #define APP_TX_DATA_SIZE 1000 \/\/ \u0431\u044b\u043b\u043e 4  <\/div>\n<\/div>\n<p>  \u0415\u0449\u0451 \u0432\u0430\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c, \u0447\u0442\u043e CAN \u0442\u0440\u0430\u043d\u0441\u0438\u0432\u0435\u0440 \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442 \u0432\u0445\u043e\u0434 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u0436\u0438\u043c Standby.<\/p>\n<p>  \u0412 Cube \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c PB7 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d 0.<\/p>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412 CAN Hacker \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0438\u0437 CAN, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0441\u044b\u043b\u043a\u0430\u043c\u0438 CAN \u043c\u0435\u043d\u044c\u0448\u0435 1 \u043c\u0441, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f, \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u043e. <\/p>\n<p>  \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u041a\u0430\u0436\u0434\u0443\u044e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u0432\u0435 \u043f\u043e\u0441\u044b\u043b\u043a\u0438, \u0432 CAN Hacker \u0432\u0438\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443.<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/f10\/4f4\/ec2\/f104f4ec2f3f46839b479bbc6c069bc9.jpg\"\/><\/p>\n<p>  \u043a\u0430\u043d\u0430\u043b 1 \u2014 CAN RX, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<br \/>  \u043a\u0430\u043d\u0430\u043b 2 \u2014 CAN TX, \u0432\u0438\u0434\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<br \/>  \u043a\u0430\u043d\u0430\u043b 3,4 -USB D+, D-<\/p>\n<p>  \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0435\u0441\u043b\u0438 \u0432 CAN \u0448\u0438\u043d\u0435 \u0438\u0434\u0451\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u043c\u0435\u043d, \u0442\u043e \u043d\u0430\u0448 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e USB, \u00ab\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u00bb \u043f\u0438\u0448\u0435\u0442.<\/p>\n<p>  \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c USB, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c CAN Hacker, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c CAN.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u0451\u043c\u0430 CAN \u043f\u043e\u0441\u044b\u043b\u043e\u043a<\/h4>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0438\u0437 CAN \u0432 USB, \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u043a\u043e\u0447\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u043f\u043e\u0441\u044b\u043b\u043a\u0430 \u0432 CAN, \u0438 \u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0435 CAN \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u0432\u0441\u0451 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440, \u0430 \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0432\u044b\u0433\u0440\u0435\u0431\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 USB.<\/p>\n<p>  \u041f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0431\u0430\u0439\u0442\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0435\u0433\u043a\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u00ab\u0437\u0430\u043a\u043e\u043b\u044c\u0446\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435\u043c\u00bb \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043e\u0442 \u043a\u043e\u043d\u0446\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a \u043d\u0430\u0447\u0430\u043b\u0443.<\/p>\n<p>  \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438 USBD_CDC_SetTxBuffer \u0438 USBD_CDC_TransmitPacket, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043e\u043f\u0440\u0430\u0432\u043a\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u00ab\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043b\u044c\u0446\u043e\u00bb, \u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u0442\u043e\u043a.<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/f9f\/8fc\/388\/f9f8fc3886d4404e8b646c495c787742.jpg\"\/>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 USB \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d<br \/>  uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];<\/p>\n<p>  \u0432 \u00abusb_cdc_if.c\u00bb \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440<br \/>  uint32_t ptrWriteUserTxBufferFS = 0; \/\/\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u043f\u0440\u0438 \u043f\u0440\u0438\u0451\u043c\u0435 \u0438\u0437 CAN<br \/>  uint32_t ptrReadUserTxBufferFS = 0; \/\/\u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432 USB<br \/>   \/* USER CODE END 1 *\/ <\/p>\n<p>  \u043e\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u0443\u0444\u0435\u0440 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430<br \/>  \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u00abusb_cdc_if.c\u00bb \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0445\u0430\u0442\u044c \u0432 \u0441\u0435\u043a\u0446\u0438\u044e \u00abUSBD_CDC_Private_Macros\u00bb<br \/>   \/* USER CODE BEGIN 2 *\/ <br \/>  extern uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];<br \/>  extern uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];<br \/>  extern uint8_t interface_state; <br \/>  extern USBD_HandleTypeDef *hUsbDevice_0; <\/p>\n<p>  \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>  uint8_t CDC_add_buf_to_transmit(uint8_t* Buf, uint16_t Len) \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<br \/>  {<br \/>   uint16_t _cnt = Len;<\/p>\n<p>   while(_cnt)<br \/>   {<br \/>   UserTxBufferFS[ptrWriteUserTxBufferFS] = *Buf; <br \/>   ptrWriteUserTxBufferFS++;<br \/>   Buf++; <br \/>   ptrWriteUserTxBufferFS %= APP_TX_DATA_SIZE; \/\/\u0437\u0430\u043a\u043e\u043b\u044c\u0446\u043e\u0432\u044b\u0432\u0430\u0435\u043c<br \/>   _cnt&#8212;;<br \/>   } <br \/>   return(0);<br \/>  }<\/p>\n<p>  \/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>  uint8_t CDC_periodic_callback(void) \/\/ \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<br \/>  {<br \/>   uint32_t buffptr;<br \/>   uint32_t buffsize;<\/p>\n<p>   if(ptrReadUserTxBufferFS != ptrWriteUserTxBufferFS) <br \/>   {<br \/>   __disable_irq();\/\/\u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0435 \u043f\u043e CAN \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u00ab\u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb<br \/>   if(ptrReadUserTxBufferFS &gt; ptrWriteUserTxBufferFS) \/\/ \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043b\u044c\u0446\u043e?<br \/>   {<br \/>   buffsize = APP_TX_DATA_SIZE \u2014 ptrReadUserTxBufferFS; \/\/\u044d\u0442\u0430\u043f 1, \u0431\u0430\u0439\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<br \/>   }<br \/>   else <br \/>   {<br \/>   buffsize = ptrWriteUserTxBufferFS \u2014 ptrReadUserTxBufferFS; \/\/\u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0440\u0430\u0437\u0443<br \/>   }<br \/>   __enable_irq();<\/p>\n<p>   buffptr = ptrReadUserTxBufferFS;<\/p>\n<p>   if(interface_state != 1) return(1); \/\/\u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c<\/p>\n<p>   USBD_CDC_SetTxBuffer(hUsbDevice_0, (uint8_t*)&#038;UserTxBufferFS[buffptr], buffsize);<\/p>\n<p>   if(USBD_CDC_TransmitPacket(hUsbDevice_0) == USBD_OK)<br \/>   {<br \/>   ptrReadUserTxBufferFS += buffsize;<br \/>   if (ptrReadUserTxBufferFS == APP_TX_DATA_SIZE)<br \/>   {<br \/>   ptrReadUserTxBufferFS = 0; \/\/\u0437\u0430\u043a\u043e\u043b\u044c\u0446\u043e\u0432\u044b\u0432\u0430\u0435\u043c<br \/>   }<br \/>   }<br \/>   }<br \/>   return(0); <br \/>  }<br \/>   \/* USER CODE END 2 *\/<\/p>\n<p>  \u0432 \u00abmain.c\u00bb \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e<br \/>  uint8_t interface_state = 0; <br \/>  \u043f\u043e\u043a\u0430 \u043e\u0442 CAN Hacker \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00abO\u00bb \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u0433\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u0430\u0442\u044c \u0432 USB, \u0442.\u043a. \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d<\/p>\n<p>  \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 CAN \u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 USB \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438<br \/>  CDC_Transmit_FS \u043d\u0430 CDC_add_buf_to_transmit<\/p>\n<p>  \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0440\u043e\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438<br \/>   while (1)<br \/>   {<br \/>   \/* USER CODE END WHILE *\/<\/p>\n<p>  \/* USER CODE BEGIN 3 *\/<br \/>   CDC_periodic_callback();<br \/>   }<br \/>   \/* USER CODE END 3 *\/<\/p><\/div>\n<\/div>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432 CAN Hacker \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0431\u0435\u0437 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u0432.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u0438\u043c Timestamp<\/h4>\n<p>  \u0412 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 CAN H\u0430cker \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u00ab\u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u00bb \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 0..60000 \u043c\u0441. <br \/>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e TIM1.<br \/>  \u0412 Cub-\u0435, \u0432 \u00abConfiguration\u00bb-&gt;\u00abPeripheals\u00bb-&gt;\u00abTIM1\u00bb \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u00abClock source\u00bb=\u00abInternal Clock\u00bb.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 1000 \u0413\u0446 (1\u043c\u0441). \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f APB2.<br \/>  \u0423\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043e\u0442 APB2 \u043d\u0435 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u043f\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e.<br \/>  \u0418\u0437 \u00abreference manual\u00bb \u043d\u0430 \u00abSTM32F1\u00bb:<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/c22\/ecb\/8d2\/c22ecb8d2918456e9cd5892e7fa185f5.jpg\"\/><br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/c05\/2b1\/8c5\/c052b18c513b406e9b95868fa35b559b.jpg\"\/><\/p>\n<p>  \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0442 APB2 \u0442\u0430\u043a\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u04401, \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u0410\u0426\u041f, SPI, USART, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u043b\u043e \u043f\u043e\u043d\u0438\u0436\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 APB2.<\/p>\n<p>  \u0412 Cub-\u0435, \u043d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 \u00abClock Configuration\u00bb \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u00abAPB2 Prescaler\u00bb \u0440\u0430\u0432\u043d\u044b\u043c 8, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u0430 18 \u041c\u0413\u0446.<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/1a6\/1aa\/593\/1a61aa5937e744feb39d8cc75a8ffcaa.jpg\"\/><\/p>\n<p>  \u041d\u0430 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 \u00abConfiguration\u00bb-&gt;\u00abTIM1\u00bb \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c <br \/>  Prescaler(PSC \u2014 16 bit value) = 18000<br \/>  Counter period (AutoReload Register) = 60000<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/fdd\/584\/e4d\/fdd584e4d62243f7a4de793366c74021.jpg\"\/><\/p>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 IDE.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 main \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0430\u0439\u043c\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\"> \/* USER CODE BEGIN 2 *\/<br \/>   HAL_TIM_Base_Start(&#038;htim1);  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 CAN \u0432 USB<\/b><\/p>\n<div class=\"spoiler_text\">void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* CanHandle)<br \/>  {<br \/>   uint32_t num_bytes;<br \/>   uint8_t buf[200];<br \/>   static uint32_t time;<\/p>\n<p>   time = __HAL_TIM_GetCounter(&#038;htim1); <\/p>\n<p>   num_bytes = sprintf((char*)buf,\u00abt%3.3X%1.1X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%4.4X\\r\u00bb, \\<br \/>   CanHandle-&gt;pRxMsg-&gt;StdId,\\<br \/>   CanHandle-&gt;pRxMsg-&gt;DLC,\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[0],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[1],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[2],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[3],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[4],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[5],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[6],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[7],\\<br \/>   time<br \/>   );<br \/>   if(interface_state == 1) CDC_add_buf_to_transmit(buf,num_bytes);<\/p>\n<p>   HAL_CAN_Receive_IT(&#038;hcan1, CAN_FIFO0);<br \/>  }  <\/div>\n<\/div>\n<p>  \u041e\u043f\u044f\u0442\u044c, \u0432\u0440\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u043c \u043e\u0431\u043c\u0435\u043d\u0435 \u0432 CAN \u043e\u0431\u043c\u0435\u043d \u043f\u043e USB \u00ab\u0437\u0430\u0442\u044b\u043a\u0430\u0435\u0442\u0441\u044f\u00bb.<br \/>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0432\u0438\u043d\u043e\u0432\u0430\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 sprintf, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 CAN.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0438\u0437 CAN \u0432 USB \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f sprintf.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0431\u0438\u0442 \u0432 HEX ASCII \u0441\u0438\u043c\u0432\u043e\u043b \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442<\/b><\/p>\n<div class=\"spoiler_text\">uint8_t halfbyte_to_hexascii(uint8_t _halfbyte)<br \/>  {<br \/>   _halfbyte &#038;= 0x0F;<br \/>   if(_halfbyte &gt;= 10) return(&#8216;A&#8217; + _halfbyte \u2014 10); <br \/>   else return(&#8216;0&#8217; + _halfbyte); <br \/>  }<\/p>\n<p>  uint8_t hexascii_to_halfbyte(uint8_t _ascii)<br \/>  {<br \/>   if((_ascii &gt;= &#8216;0&#8217;) &#038;&#038; (_ascii &lt;= &#8216;9&#8217;)) return(_ascii \u2014 &#8216;0&#8217;); <br \/>   if((_ascii &gt;= &#8216;a&#8217;) &#038;&#038; (_ascii &lt;= &#8216;f&#8217;)) return(_ascii \u2014 &#8216;a&#8217;); <br \/>   if((_ascii &gt;= &#8216;A&#8217;) &#038;&#038; (_ascii &lt;= &#8216;F&#8217;)) return(_ascii \u2014 &#8216;A&#8217;); <br \/>   return(0xFF);<br \/>  }  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 HAL_CAN_RxCpltCallback<\/b><\/p>\n<div class=\"spoiler_text\">void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* CanHandle)<br \/>  {<br \/>   uint32_t num_bytes;<br \/>   uint8_t buf[200];<br \/>   static uint32_t time;<\/p>\n<p>   time = __HAL_TIM_GetCounter(&#038;htim1); <br \/>  \/* <br \/>   num_bytes = sprintf((char*)buf,\u00abt%3.3X%1.1X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%4.4X\\r\u00bb, \\<br \/>   CanHandle-&gt;pRxMsg-&gt;StdId,\\<br \/>   CanHandle-&gt;pRxMsg-&gt;DLC,\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[0],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[1],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[2],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[3],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[4],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[5],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[6],\\<br \/>   CanHandle-&gt;pRxMsg-&gt;Data[7],\\<br \/>   time<br \/>   );<br \/>  *\/<br \/>   num_bytes = 0;<br \/>   buf[num_bytes++] = &#8216;t&#8217;;<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;StdId)&gt;&gt;8);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;StdId)&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;StdId));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;DLC));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[0])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[0]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[1])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[1]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[2])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[2]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[3])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[3]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[4])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[4]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[5])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[5]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[6])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[6]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[7])&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((CanHandle-&gt;pRxMsg-&gt;Data[7]));<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((time)&gt;&gt;12);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((time)&gt;&gt;8);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((time)&gt;&gt;4);<br \/>   buf[num_bytes++] = halfbyte_to_hexascii((time)&gt;&gt;0);<br \/>   buf[num_bytes++] = &#8216;\\r&#8217;;<\/p>\n<p>   if(interface_state == 1) CDC_add_buf_to_transmit(buf,num_bytes);<\/p>\n<p>   HAL_CAN_Receive_IT(&#038;hcan1, CAN_FIFO0);<br \/>  }  <\/div>\n<\/div>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043d\u0430 \u043f\u0440\u0438\u0451\u043c: \u0432 CAN \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c 1000000 \u043f\u043e\u0441\u044b\u043b\u043e\u043a \u0441 \u0430\u0434\u0440\u0435\u0441\u0430 0x321 \u0438 \u0432 CAN Hacker \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043c.<\/p>\n<p>  \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c 500 \u041a\u0431\u0438\u0442\/\u0441\u0435\u043a, \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u043e\u0432, \u043f\u043e\u0442\u0435\u0440\u0438 0,2%:<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/87d\/276\/e63\/87d276e633f84f848f4d0f34505fa843.jpg\"\/><\/p>\n<p>  \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c 1 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a, \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u043e\u0432, \u043f\u043e\u0442\u0435\u0440\u0438 50%:<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/e86\/9f5\/7fb\/e869f57fbee74da3a69a94037b9a3769.jpg\"\/><\/p>\n<p>  \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c 1 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a, \u043f\u043e \u0434\u0432\u0435 \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u043a\u0430\u0436\u0434\u044b\u0435 1 \u043c\u0441, \u043f\u043e\u0442\u0435\u0440\u0438 0%:<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/c56\/966\/10a\/c5696610ae454a6cbcbc1659c6ab1fee.jpg\"\/><\/p>\n<p>  \u041f\u043e-\u043c\u043e\u0435\u043c\u0443 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 CAN<\/h4>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 \u00abusbd_cdc_if.c\u00bb, \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 USB CDC_Receive_FS \u0434\u043e\u0431\u0430\u0432\u0438\u043c:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432 CAN<\/b><\/p>\n<div class=\"spoiler_text\"> case &#8216;t&#8217;:<br \/>   i = 1; <\/p>\n<p>   hcan1.pTxMsg-&gt;StdId = hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;StdId = (hcan1.pTxMsg-&gt;StdId &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;StdId = (hcan1.pTxMsg-&gt;StdId &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;DLC = hexascii_to_halfbyte(Buf[i++]);<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[0] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[1] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[2] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[3] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[4] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[5] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[6] = tmp_byte;<br \/>   tmp_byte = hexascii_to_halfbyte(Buf[i++]); tmp_byte = (tmp_byte &lt;&lt; 4) + hexascii_to_halfbyte(Buf[i++]);<br \/>   hcan1.pTxMsg-&gt;Data[7] = tmp_byte;<br \/>   HAL_CAN_Transmit(&#038;hcan1, 10);<\/p>\n<p>   num_bytes = sprintf((char*)UserTxBufferFS,&quot;\\r&quot;);<br \/>   break;  <\/div>\n<\/div>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f. \u0420\u0443\u0431\u0440\u0438\u043a\u0430 \u0432\u0435\u0434\u044c \u00ab\u0421\u0434\u0435\u043b\u0430\u0439 \u0441\u0430\u043c\u00bb \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442, \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 CAN, \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 29 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, remote frames.<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0447\u0435\u0440\u0435\u0437 ASCII \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c USB-SPI, USB-I2C \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 COM \u043f\u043e\u0440\u0442 \u043d\u0430 115200 \u0431\u043e\u0434 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 CAN, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430 57600 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 I2C, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430 9600 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 SPI. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 SPI \u0438\u043b\u0438 I2C \u00abCAN Hacker\u00bb \u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u0413\u043e\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043a \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/drive.google.com\/file\/d\/0BwcHtbof8_8wV01EUlZLT0tOQ1E\/view?usp=sharing\">\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/h4>\n<p>  1. <a href=\"http:\/\/www.carhelp.info\/forums\/showthread.php?t=97740\">USB&lt;&gt;CAN Bus Interface (CAN Hacker)<\/a><br \/>  2. <a href=\"http:\/\/www.elektronik-keller.de\/index.php\/projekte\/stm32\/stm32-can\"> STM32-CAN-Busadapter <\/a><br \/>  3. <a href=\"http:\/\/www.st.com\/st-web-ui\/static\/active\/en\/resource\/technical\/document\/user_manual\/CD00267113.pdf\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0441\u0445\u0435\u043c\u0430 STM32VLDISCOVERY<\/a><br \/>  4. <a href=\"http:\/\/www.st.com\/st-web-ui\/static\/active\/en\/resource\/technical\/document\/reference_manual\/CD00171190.pdf\">STM32F105 Reference Manual<\/a> \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/256493\/\"> http:\/\/habrahabr.ru\/post\/256493\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b5b\/3c0\/722\/b5b3c07223dc47a59835f709714c639f.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0441 CAN-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u0442\u0438. \u0414\u043b\u044f RS232\/485 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0445 USB \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u0438 \u043a\u0443\u0447\u0430 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430, \u0430 \u0432\u043e\u0442 \u0434\u043b\u044f CAN \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u043e\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <\/p>\n<p>  \u0412 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u0430\u0432\u0442\u043e\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a CAN \u0448\u0438\u043d\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f. \u041e\u0434\u043d\u0438\u043c\u0438 \u0438\u0437 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u044b\u043b\u0438 USB&lt;&gt;CAN Bus Interface (CAN Hacker), \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 Atmega+SJA1000 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 STM32-CAN-Busadapter, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 STM32F105. \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u043d\u0438 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 CAN Hacker, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0411\u0435\u0433\u043b\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e USB \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f COM \u043f\u043e\u0440\u0442\u043e\u043c, \u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438\u0437 ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<p>  \u0412 \u0437\u0430\u043a\u0440\u043e\u043c\u0430\u0445 \u0431\u044b\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043f\u043b\u0430\u0442\u0430 STM32VLDiscovery, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0441\u0442\u0430\u043b\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0439. \u041d\u0430 \u043d\u0435\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u00abSTM32-CAN-Busadapter\u00bb.   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-255942","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/255942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=255942"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/255942\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=255942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=255942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=255942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}