{"id":327219,"date":"2022-01-10T08:48:28","date_gmt":"2022-01-10T08:48:28","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=327219"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=327219","title":{"rendered":"<span>STM32, CMSIS, CAN, \u0427\u0430\u0441\u0442\u044c 1 \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CAN (Controller Area Network). \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c CAN \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e HAL \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CMSIS \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431\u0440\u044b\u0432\u043e\u0447\u043d\u0430, \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b CAN-\u0441\u0435\u0442\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442.\u043a. \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0435\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Controller_Area_Network\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u0442\u0435\u0440\u0438\u043b\u0430<\/a> (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <a href=\"https:\/\/istarik.ru\/blog\/stm32\/159.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>) \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443, \u043d\u043e \u043f\u043e \u0445\u043e\u0434\u0443 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u044e\u0430\u043d\u0441\u0430\u0445.<\/p>\n<p><strong>\u0421\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443:<\/strong> \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0434\u0440\u044b \u0432 CAN-\u0441\u0435\u0442\u044c \u0441 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 250 \u043a\u0411\u0438\u0442\/\u0441, \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (11 \u0431\u0438\u0442) \u0441 \u043f\u043e\u043b\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 8 \u0431\u0430\u0439\u0442.<\/p>\n<h3>\u041e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u041f\u041e<\/h3>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32F103C8T6 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0432 \u043d\u0430\u0440\u043e\u0434\u0435 &#171;Blue Pill&#187; (\u0440\u0438\u0441. 1\u0430). \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u0440\u0438\u0435\u043c\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438\u043a\u0430 (\u041f\u041f) (\u043f\u043e \u0430\u043d\u0433\u043b\u0438\u0446\u043a\u0438 &#171;transceiver&#187;) \u0434\u043b\u044f CAN-\u0448\u0438\u043d\u044b. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e 2 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u044b \u0441 SN65HVD230 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 (\u0440\u0438\u0441. 1\u0431). \u041d\u0430 \u0440\u0438\u0441. 1\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u0445\u0435\u043c\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u044b . \u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Keil uVision v5. \u041e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/150\/a31\/79b\/150a3179b0ac148f1166e4e75f691d40.jpg\" alt=\"\u0420\u0438\u0441. 1 \u2013 \u0430) \u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Blue Pill; \u0431) \u041f\u043b\u0430\u0442\u0430 \u041f\u041f; \u0432) \u042d\u043b. \u0441\u0445\u0435\u043c\u0430 \u043f\u043b\u0430\u0442\u044b \u041f\u041f.\" title=\"\u0420\u0438\u0441. 1 \u2013 \u0430) \u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Blue Pill; \u0431) \u041f\u043b\u0430\u0442\u0430 \u041f\u041f; \u0432) \u042d\u043b. \u0441\u0445\u0435\u043c\u0430 \u043f\u043b\u0430\u0442\u044b \u041f\u041f.\" width=\"1914\" height=\"780\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/150\/a31\/79b\/150a3179b0ac148f1166e4e75f691d40.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 1 \u2013 \u0430) \u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Blue Pill; \u0431) \u041f\u043b\u0430\u0442\u0430 \u041f\u041f; \u0432) \u042d\u043b. \u0441\u0445\u0435\u043c\u0430 \u043f\u043b\u0430\u0442\u044b \u041f\u041f.<\/figcaption><\/figure>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c, \u043d\u0435 \u043f\u043e\u0431\u043e\u044e\u0441\u044c \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434. \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u041f\u041f \u0441 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 Blue Pill:<\/p>\n<p>CAN TX -> PA12 <\/p>\n<p>\u0421AN RX -> PA11<\/p>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u041f\u041f CAN_H \u0438 CAN_L \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u0445\u0435\u043c\u0435 \u043d\u0430 \u0440\u0438\u0441. 2. \u0416\u0435\u043b\u0442\u044b\u0439 \u043f\u0440\u043e\u0432\u043e\u0434 \u0438\u0434\u0435\u0442 \u043a \u0432\u0445\u043e\u0434\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d95\/58c\/d19\/d9558cd19829d5ff3ac723fa9a8d9cc5.jpg\" alt=\"\u0420\u0438\u0441. 2 \u2013 \u0421\u0445\u0435\u043c\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0442\u0435\u043d\u0434\u0430\" title=\"\u0420\u0438\u0441. 2 \u2013 \u0421\u0445\u0435\u043c\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0442\u0435\u043d\u0434\u0430\" width=\"4535\" height=\"2914\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d95\/58c\/d19\/d9558cd19829d5ff3ac723fa9a8d9cc5.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 2 \u2013 \u0421\u0445\u0435\u043c\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0442\u0435\u043d\u0434\u0430<\/figcaption><\/figure>\n<h3>\u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u041f\u041e<\/h3>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u041c\u041a. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c Keil (\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0434\u043b\u044f \u0432\u0430\u0441 \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: IAR, Eclipse\/CubeIDE \u0438 \u0434\u0440., \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d CMSIS), \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0448\u0435\u0439 \u00abBlue Pill\u00bb. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u044d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u0432 \u043f\u043e\u043c\u043e\u0449\u044c <a href=\"https:\/\/habr.com\/ru\/post\/481478\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>.<\/p>\n<figure class=\"float\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u0420\u0438\u0441. 3 \u2013 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u0430\u044f \u0441 \u0448\u0438\u043d\u043e\u0439 APB1\" title=\"\u0420\u0438\u0441. 3 \u2013 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u0430\u044f \u0441 \u0448\u0438\u043d\u043e\u0439 APB1\" height=\"236\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7ac\/76d\/38f\/7ac76d38fabd4cb7ac7ad3424c2db740.png\" data-width=\"191\"\/><figcaption>\u0420\u0438\u0441. 3 \u2013 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u0430\u044f \u0441 \u0448\u0438\u043d\u043e\u0439 APB1<\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0442\u0435\u0445. \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e (<a href=\"https:\/\/www.st.com\/resource\/en\/datasheet\/stm32f103c8.pdf\" rel=\"noopener noreferrer nofollow\">datasheet<\/a>) (\u0440\u0438\u0441. 3). \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 (HSI). \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043d\u0435\u0442, \u0434\u0430 \u0438 \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0448\u0438\u043d\u0435 APB1 \u0431\u044b\u043b\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 36 \u041c\u0413\u0446. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u0435 \u00abstm32 cmsis rcc\u00bb, \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0438\u043b\u0438 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c Reference Manual (\u0431\u0440\u0435\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 ?). \u0417\u0434\u0435\u0441\u044c \u044f \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u043e\u043d\u0430 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430, \u043d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cpp\">uint8_t rcc_init(void){     \/* Using the default HSI sorce - 8 MHz *\/     \/* Checking that the HSI is working *\/     for (uint8_t i=0; ; i++){         if(RCC->CR &amp; (1&lt;&lt;RCC_CR_HSIRDY_Pos))           break;         if(i == 255)           return 1;               }         \/* RCC_CFGR Reset value: 0x0000 0000 *\/     \/* PLLSRC: PLLSRC: PLL entry clock source - Reset Value - 0 -> HSI oscillator clock \/ 2 selected as PLL input clock *\/     \/* HSI = 8 MHz *\/     RCC->CFGR |= RCC_CFGR_PLLMULL9;     \/* 0x000C0000 - PLL input clock*9 *\/     RCC->CFGR |= RCC_CFGR_SW_1;         \/* 0x00000002 - PLL selected as system clock *\/     \/* SYSCLK = 36 MHz *\/     \/*Also you can change another parameters:*\/     \/* HPRE: AHB prescaler - Reset Value - 0 -> SYSCLK not divided *\/     \/* HCLK = 36 MHz (72 MHz MAX) *\/     \/* PPRE1: APB low-speed prescaler (APB1) - Reset Value - 0 -> 0xx: HCLK not divided *\/     \/* PPRE2: APB low-speed prescaler (APB2) - Reset Value - 0 -> 0xx: HCLK not divided *\/     \/* APB1 = APB2 = 36 MHz *\/     \/* ADCPRE: ADC prescaler - Reset Value - 0 -> PCLK2 divided by 2 *\/     \/* PLLXTPRE: HSE divider for PLL entry - ResVal - 0 -> HSE clock not divided *\/     \/* USBPRE: USB prescaler - ResVal - 0: PLL clock is divided by 1.5 *\/     RCC->CR |=RCC_CR_PLLON;             \/* 0x01000000 - PLL enable *\/     for (uint8_t i=0; ; i++){         if(RCC->CR &amp; (1U&lt;&lt;RCC_CR_PLLRDY_Pos))             break;         if(i==255){             RCC->CR &amp;= ~(1U&lt;&lt;RCC_CR_PLLON_Pos);             return 2;         }     }           return 0; }<\/code><\/pre>\n<p>\u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e, \u0441\u0430\u043c\u043e \u0442\u0435\u043b\u043e \u043f\u0440\u044f\u0447\u0435\u043c \u0432 \u043f\u043e\u0434\u0432\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u043b\u043e\u0441\u044c. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c rcc_init(). <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 uint8_t can_init(void). \u0414\u0430\u043b\u0435\u0435 \u0442\u0435\u043a\u0441\u0442 \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 CAN:<\/p>\n<pre><code class=\"cpp\">RCC->APB1ENR |= RCC_APB1ENR_CAN1EN;<\/code><\/pre>\n<p>CAN RX \u0438 TX \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0430\u0445 PA11 \u0438 PA12, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e (\u0441\u043c. 31 \u0441\u0442\u0440. \u0442\u0435\u0445. \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438). \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 A:<\/p>\n<pre><code>RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u0438 \u043f\u0440\u0438\u0435\u043c (CAN Rx) , \u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043d \u043d\u0430 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cpp\">\/* PA11 - CAN_RX *\/ GPIOA->CRH&amp;= ~GPIO_CRH_CNF11;   \/* CNF11 = 00 *\/  GPIOA->CRH|= GPIO_CRH_CNF11_1;  \/* CNF11 = 10 -> AF Out | Push-pull (CAN_RX) *\/ GPIOA->CRH |= GPIO_CRH_MODE11;   \/* MODE8 = 11 -> Maximum output speed 50 MHz *\/ \/* PA12 - CAN_TX *\/ GPIOA->CRH&amp;= ~GPIO_CRH_CNF12;  \/* CNF12 = 00 *\/ GPIOA->CRH|= GPIO_CRH_CNF12_1;\/* CNF12 = 10 -> AF Out | Push-pull (CAN_TX) *\/ GPIOA->CRH |= GPIO_CRH_MODE12;   \/* MODE8 = 11 -> Maximum output speed 50 MHz *\/<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d master control register (MCR) \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c CAN \u0432 \u0440\u0435\u0436\u0438\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">CAN1->MCR |= CAN_MCR_INRQ;              \/* Initialization Request *\/<\/code><\/pre>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438. \u0420\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430 \u0442.\u043a. \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0435\u043d\u0434\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u0447\u0435\u043c, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u0435\u043c \u0442\u043e\u0436\u0435 \u043d\u0435\u043a\u043e\u043c\u0443. \u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u043e \u0432 CAN error status register (CAN_ESR) \u0432 \u0431\u0438\u0442\u0430\u0445 4\u20266 LEC[2:0]: (Last error code) \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 Acknowledgment Error. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f 4 \u0438 5 \u0431\u0438\u0442 (0b011).<\/p>\n<pre><code class=\"cpp\">CAN1->MCR |= CAN_MCR_NART;<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0447\u0442\u043e\u0431\u044b CAN \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u0438\u0437 \u0441\u043f\u044f\u0449\u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 (Automatic Wakeup Mode):<\/p>\n<pre><code class=\"cpp\">CAN1->MCR |= CAN_MCR_AWUM;<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043c\u043d\u0438\u043c, \u043c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 250 \u043a\u0411\u0438\u0442\/\u0441, \u0442.\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430: T_bit = 1\/(250*1000) = 4 \u043c\u043a\u0441 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0448\u0438\u043d\u044b APB1 f_APB1 = 36 \u041c\u0413\u0446. \u0414\u0430\u043b\u0435\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0440\u0438\u0441\u0443\u043d\u043e\u043a (\u0440\u0438\u0441. 4, \u0432\u0437\u044f\u043b <a href=\"https:\/\/istarik.ru\/blog\/stm32\/159.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u044f\u0441\u043d\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7a9\/894\/63b\/7a989463b3ecc5447cc6ce0b82a1c71b.jpg\" alt=\"\u0420\u0438\u0441. 4 \u2013 \u041f\u0435\u0440\u0438\u043e\u0434 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0434\u043b\u044f CAN\" title=\"\u0420\u0438\u0441. 4 \u2013 \u041f\u0435\u0440\u0438\u043e\u0434 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0434\u043b\u044f CAN\" width=\"844\" height=\"422\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a9\/894\/63b\/7a989463b3ecc5447cc6ce0b82a1c71b.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 4 \u2013 \u041f\u0435\u0440\u0438\u043e\u0434 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0434\u043b\u044f CAN<\/figcaption><\/figure>\n<p> \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435: System Clock = f_APB1 = 36 \u041c\u0413\u0446. CAN System Clock \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 CAN Bit Period. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0411\u0418\u0422 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 4 \u0447\u0430\u0441\u0442\u0435\u0439. \u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 1 \u043a\u0432\u0430\u043d\u0442. \u0412\u0442\u043e\u0440\u0430\u044f \u0438 \u0442\u0440\u0435\u0442\u044c\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0442\u043e\u0447\u043a\u0430 \u00ab\u0437\u0430\u0445\u0432\u0430\u0442\u0430\u00bb \u0431\u0438\u0442\u0430 (Sample Point) \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0431\u0438\u0442\u0430. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0432\u0430\u043d\u0442\u043e\u0432 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043a\u0430 \u00ab\u0437\u0430\u0445\u0432\u0430\u0442\u0430\u00bb \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 87,5% \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 CANopen \u0438 DeviceNet \u0438 75% \u0434\u043b\u044f ARINC 825. \u041d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 87,5 %. \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0434\u0432\u0430 \u043f\u0443\u0442\u0438: \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c <a href=\"http:\/\/www.bittiming.can-wiki.info\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c<\/a>. \u043b\u0438\u0431\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0438 \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451. \u041f\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043f\u0443\u0442\u0438.<\/p>\n<p>\u0412\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u00abRequest Table\u00bb. \u0410\u0445 \u0434\u0430, \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u0448\u0438\u0440\u0438\u043d\u0430 \u0441\u043a\u0430\u0447\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (SJW &#8212; Synchronization Jump Width) \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u043e\u043d\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442. <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"609\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f17\/d8d\/7aa\/f17d8d7aa12a71ea37e849cdcba98944.png\" data-width=\"1337\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"308\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/079\/2d2\/062\/0792d20624766c99d662e5d20b6735b8.png\" data-width=\"1135\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c 2-\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u00ab\u0437\u0430\u0445\u0432\u0430\u0442\u0430\u00bb \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e 1 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 13 \u043a\u0432\u0430\u043d\u0442\u043e\u0432, \u0430 2-\u043e\u0439 \u2013 2 \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, t_Q = 1\/(16*250000) = 250 \u043d\u0441, \u0430 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0432\u0435\u043d 9. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 CAN_BTR, \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0442\u043e\u0433\u0434\u0430 \u0431\u044b \u043d\u0430\u043c \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u0440\u0430\u0441\u0447\u0451\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0435\u0448\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u043a\u0443 \u043a\u0430\u043a \u0432 \u0448\u043a\u043e\u043b\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"372\" width=\"372\">\n<p>\u0414\u0430\u043d\u043e:<br \/>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, bps = 250 \u043a\u0411\u0438\u0442\/\u0441<br \/>\u0422\u043e\u0447\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043d\u0430 87,5 % \u0434\u043b\u0438\u043d\u044b \u0431\u0438\u0442\u0430, sp = 0,875<br \/>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0448\u0438\u043d\u044b APB1, f_APB1 = 36 \u041c\u0413\u0446<\/p>\n<\/td>\n<td rowspan=\"2\">\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<br \/>\u0417\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0438\u0442\u0430 \u0440\u0430\u0432\u043d\u0430:<br \/>(x+y+1)*t_Q = 1\/bps (1)<br \/>t_Q &#8212; \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<br \/>\u0421\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0432\u0435\u043d 1 (PreSc = 1), \u0442\u043e\u0433\u0434\u0430:<br \/>t_Q = PreSc\/f_APB1 = 27,78 \u043d\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"372\" width=\"372\">\n<p>\u041d\u0430\u0439\u0442\u0438<br \/>\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 1 \u0438 2 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (x \u0438 y, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"formula\" source=\"\\frac{x+1}{x+y+1}=sp, (2)\" alt=\"\\frac{x+1}{x+y+1}=sp, (2)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/016\/466\/3fb\/0164663fb25344f0c83dd23586003786.svg\" width=\"162\" height=\"46\"\/><\/p>\n<p>\u0420\u0435\u0448\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440-\u0438\u0439 (1) \u0438 (2), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:<\/p>\n<p>x = 125, y = 18, \u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 ref. manual, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e x (\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 1-\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430) \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442 1 \u0434\u043e 16. \u0412 \u0446\u0438\u043a\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043d\u0430 1 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0438 \u0440\u0435\u0448\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442: PreSc = 9, x = 13, y = 2<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0439\u0434\u0435\u043c \u0432 CAN bit timing register (CAN_BTR). \u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0431\u0438\u0442\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0430 Baud rate prescaler (BRP[9:0]) \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c: <em>BRP[9:0] = <\/em>PreSc<em> &#8212; 1 = 8<\/em>:<\/p>\n<pre><code class=\"cpp\">CAN1->BTR &amp;= ~CAN_BTR_BRP; CAN1->BTR |= 8U &lt;&lt; CAN_BTR_BRP_Pos;<\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0431\u0438\u0442\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 1 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c: TS1[3:0] = 13 \u2013 1 = 12:<\/p>\n<pre><code class=\"cpp\">CAN1->BTR &amp;= ~(0xFU &lt;&lt; CAN_BTR_TS1_Pos); CAN1->BTR |= 12U &lt;&lt; CAN_BTR_TS1_Pos;<\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0431\u0438\u0442\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 2 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c: TS2[2:0] = 2 \u2013 1 = 1:<\/p>\n<pre><code class=\"cpp\">CAN1->BTR &amp;= ~(7U &lt;&lt; CAN_BTR_TS2_Pos); CAN1->BTR |=   1U &lt;&lt; CAN_BTR_TS2_Pos;<\/code><\/pre>\n<p>\u0411\u0438\u0442\u044b 24\u202625 SJW[1:0] \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442. \u043e. \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0447\u0442\u043e \u0448\u0438\u0440\u0438\u043d\u0430 \u0441\u043a\u0430\u0447\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 t_SJW = 2t_Q = 500 \u043d\u0441.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c CAN \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (Loop back mode, Silent mode), \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448 \u0441\u043b\u0443\u0447\u0430\u0439. <\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a \u043d\u043e\u043c\u0435\u0440 0 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 (transmit mailbox 0). \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0435\u0433\u043e \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0442\u0438\u043f\u0430 CAN_TypeDef \u0435\u0441\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 sTxMailBox \u0442\u0438\u043f\u0430 CAN_TxMailBox_TypeDef. \u00a0\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 (data frame), \u0430 \u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 (remote frame), \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443:<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TIR &amp;= ~CAN_TI0R_RTR;<\/code><\/pre>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u0430\u0434\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TIR &amp;= ~CAN_TI0R_IDE;<\/code><\/pre>\n<p>\u041e\u0442\u0447\u0438\u0441\u0442\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043a\u0430\u043a\u043e\u0439 \u0434\u0443\u0448\u0435 \u0432\u0437\u0434\u0443\u043c\u0430\u0435\u0442\u0441\u044f (\u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0 \u0434\u043e 3777):<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TIR &amp;= ~CAN_TI0R_STID; CAN1->sTxMailBox[0].TIR |= (0x556U &lt;&lt; CAN_TI0R_STID_Pos);<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0434\u0440\u0435. CAN \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043e\u0442 1 \u0434\u043e 8. \u042d\u0445, \u0433\u0443\u043b\u044f\u0442\u044c \u0442\u0430\u043a \u0433\u0443\u043b\u044f\u0442\u044c, \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c 8. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430, \u0442.\u043a. \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f: <\/p>\n<pre><code class=\"cpp\">#define DATA_LENGTH_CODE 8<\/code><\/pre>\n<p>\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440: <\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TDTR &amp;= ~CAN_TDT0R_DLC; CAN1->sTxMailBox[0].TDTR |= (DATA_LENGTH_CODE &lt;&lt; CAN_TDT0R_DLC_Pos);<\/code><\/pre>\n<p>\u0412\u0441\u0435, \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u043f\u0440\u0438\u0435\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f. \u041d\u0430\u0441 \u043f\u043e\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439\u00bb \u0440\u0435\u0436\u0438\u043c (normal mode). \u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<pre><code class=\"cpp\">CAN1->MCR &amp;= ~CAN_MCR_INRQ; return 0; }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043a\u0430\u0434\u0440\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438. \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">uint8_t can1_send(uint8_t * pData, uint8_t dataLength);<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f 2 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 i \u0438 j. \u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0431\u0430\u0439\u0442\u043e\u0432, \u0432\u0442\u043e\u0440\u043e\u0439 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0430\u0439\u0442.<\/p>\n<pre><code class=\"cpp\">uint16_t i = 0; uint8_t j = 0;<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u043b\u044f 0 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430, \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 CAN transmit status register (CAN_TSR) \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 26 \u0431\u0438\u0442\u0435 (TME0). \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0436\u0434\u0435\u043c, \u0438 \u0435\u0441\u043b\u0438 \u0436\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e, \u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u043d\u0435\u0442 1. <\/p>\n<pre><code class=\"cpp\">while (!(CAN1->TSR &amp; CAN_TSR_TME0)){     i++;     if (i>0xEFFF) return 1; }<\/code><\/pre>\n<p>\u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0443\u0441\u043e\u0440:<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[mailboxNum].TDLR = 0; CAN1->sTxMailBox[mailboxNum].TDHR = 0;<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0438\u0448\u0435\u043c \u0446\u0438\u043a\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 TDLR \u0438 TDHR \u0438 \u0434\u0435\u043b\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u0430\u0434\u0440\u044b \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0430\u0439\u0442 \u0447\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0432 DATA_LENGTH_CODE (\u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0430 8 \u0431\u0430\u0439\u0442):<\/p>\n<pre><code class=\"cpp\">while (i&lt;dataLength){     if (i>(DATA_LENGTH_CODE-1)){     CAN1->sTxMailBox[0].TIR |= CAN_TI0R_TXRQ; \/* Transmit Mailbox Request *\/     dataLength -= i;     j++;     while (!(CAN1->TSR &amp; CAN_TSR_TME0)){      \/* Transmit mailbox 0 empty? *\/       i++; if (i>0xEFFF) return 1;     }     if (CAN1->TSR &amp; CAN_TSR_TXOK0){}          \/* Tx OK? *\/     \/\/else return ((CAN1->ESR &amp; CAN_ESR_LEC)>>CAN_ESR_LEC_Pos); \/* return Last error code *\/     i = 0;     CAN1->sTxMailBox[0].TDLR = 0;     CAN1->sTxMailBox[0].TDHR = 0;     } if (i&lt;4){     CAN1->sTxMailBox[0].TDLR |= (pData[i+j*DATA_LENGTH_CODE]*1U &lt;&lt; (i*8)); } else{     CAN1->sTxMailBox[0].TDHR |= (pData[i+j*DATA_LENGTH_CODE]*1U &lt;&lt; (i*8-32)); } i++; }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 (\u043c\u044b \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435):<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[mailboxNum].TIR |= CAN_TI0R_TXRQ; \/* Transmit Mailbox Request *\/ if (CAN1->TSR &amp; CAN_TSR_TXOK0) return 0; else return ((CAN1->ESR &amp; CAN_ESR_LEC)>>CAN_ESR_LEC_Pos);<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 main \u0434\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 can_init(), \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u0430 \u0442\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0434\u0430\u0431\u044b \u043d\u0435 \u0440\u0430\u0437\u0434\u0443\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043c).<\/p>\n<pre><code class=\"cpp\">uint16_t counter = 0; uint8_t * data = \u201cABCDEFGHIJ9\u201d;<\/code><\/pre>\n<p>\u0412 \u0446\u0438\u043a\u043b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443:<\/p>\n<pre><code class=\"cpp\">can1_send(data, sizeof(data)); while(counter&lt;0xFFFF)     counter++; counter = 0;<\/code><\/pre>\n<p>\u0412\u0441\u0435, \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0433\u043e\u0442\u043e\u0432\u0430. <\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#include \"main.h\" #define DATA_LENGTH_CODE 8 uint8_t rcc_init(void); uint8_t can_init(void); uint8_t can_send(uint8_t * pData, uint8_t dataLength); int main(void){ volatile uint16_t counter = 0; uint8_t data[] = \"ABCDEFGHIJ9\"; rcc_init(); can_init(); while(1){ can_send(data, sizeof(data)); while(counter&amp;lt;0xFFFF)         counter++;     counter = 0; }  } uint8_t rcc_init(void){ \/* Using the default HSI sorce - 8 MHz \/ \/ Checking that the HSI is working *\/ for (uint8_t i=0; ; i++){ if(RCC->CR &amp; (1&lt;&lt;RCC_CR_HSIRDY_Pos)) break; if(i == 255) return 1; } \/* RCC_CFGR Reset value: 0x0000 0000 *\/ \/* PLLSRC: PLLSRC: PLL entry clock source - Reset Value - 0 -&amp;gt; HSI oscillator clock \/ 2 selected as PLL input clock *\/ \/* HSI = 8 MHz *\/ RCC-&amp;gt;CFGR |= RCC_CFGR_PLLMULL9;     \/* 0x000C0000 - PLL input clock*9 *\/ RCC-&amp;gt;CFGR |= RCC_CFGR_SW_1;         \/* 0x00000002 - PLL selected as system clock *\/ \/* SYSCLK = 36 MHz *\/ \/*Also you can change another parameters:*\/ \/* HPRE: AHB prescaler - Reset Value - 0 -&amp;gt; SYSCLK not divided *\/ \/* HCLK = 36 MHz (72 MHz MAX) *\/ \/* PPRE1: APB low-speed prescaler (APB1) - Reset Value - 0 -&amp;gt; 0xx: HCLK not divided *\/ \/* PPRE2: APB low-speed prescaler (APB2) - Reset Value - 0 -&amp;gt; 0xx: HCLK not divided *\/ \/* APB1 = APB2 = 36 MHz *\/ \/* ADCPRE: ADC prescaler - Reset Value - 0 -&amp;gt; PCLK2 divided by 2 *\/ \/* PLLXTPRE: HSE divider for PLL entry - ResVal - 0 -&amp;gt; HSE clock not divided *\/ \/* USBPRE: USB prescaler - ResVal - 0: PLL clock is divided by 1.5 *\/ RCC-&amp;gt;CR |=RCC_CR_PLLON;             \/* 0x01000000 - PLL enable *\/ for (uint8_t i=0; ; i++){   if(RCC-&amp;gt;CR &amp;amp; (1U&amp;lt;&amp;lt;RCC_CR_PLLRDY_Pos))     break;   if(i==255){     RCC-&amp;gt;CR &amp;amp;= ~(1U&amp;lt;&amp;lt;RCC_CR_PLLON_Pos);     return 2;   } }       return 0;  } uint8_t can_init(void){ RCC->APB1ENR |= RCC_APB1ENR_CAN1EN; \/* turn on clocking for CAN \/ RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; \/ turn on clocking for GPIOA \/ \/ PA11 - CAN_RX \/ GPIOA->CRH&amp;= ~GPIO_CRH_CNF11;     \/ CNF11 = 00 \/ GPIOA->CRH|= GPIO_CRH_CNF11_1;\/ CNF11 = 10 -> AF Out | Push-pull (CAN_RX) \/ GPIOA->CRH |= GPIO_CRH_MODE11;     \/ MODE11 = 11 -> Maximum output speed 50 MHz \/ \/ PA12 - CAN_TX \/ GPIOA->CRH&amp;= ~GPIO_CRH_CNF12;    \/ CNF12 = 00 \/ GPIOA->CRH|= GPIO_CRH_CNF12_1;\/ CNF12 = 10 -> AF Out | Push-pull (CAN_TX) \/ GPIOA->CRH |= GPIO_CRH_MODE12;     \/ MODE12 = 11 -> Maximum output speed 50 MHz *\/ CAN1-&amp;gt;MCR |= CAN_MCR_INRQ;          \/* Initialization Request *\/ CAN1-&amp;gt;MCR |= CAN_MCR_NART;          \/* Not autoretranslate transmission *\/ CAN1-&amp;gt;MCR |= CAN_MCR_AWUM;          \/* Automatic Wakeup Mode *\/ \/* clean and set Prescaler = 9 *\/ CAN1-&amp;gt;BTR &amp;amp;= ~CAN_BTR_BRP;           CAN1-&amp;gt;BTR |= 8U &amp;lt;&amp;lt; CAN_BTR_BRP_Pos; \/* clean and set T_1s = 13, T_2s = 2 *\/ CAN1-&amp;gt;BTR &amp;amp;= ~CAN_BTR_TS1; CAN1-&amp;gt;BTR |= 12U &amp;lt;&amp;lt; CAN_BTR_TS1_Pos; CAN1-&amp;gt;BTR &amp;amp;= ~CAN_BTR_TS2; CAN1-&amp;gt;BTR |=   1U &amp;lt;&amp;lt; CAN_BTR_TS2_Pos;  CAN1-&amp;gt;sTxMailBox[0].TIR &amp;amp;= ~CAN_TI0R_RTR;                    \/* data frame *\/ CAN1-&amp;gt;sTxMailBox[0].TIR &amp;amp;= ~CAN_TI0R_IDE;                    \/* standart ID *\/  CAN1-&amp;gt;sTxMailBox[0].TIR &amp;amp;= ~CAN_TI0R_STID; CAN1-&amp;gt;sTxMailBox[0].TIR |= (0x556U &amp;lt;&amp;lt; CAN_TI0R_STID_Pos); CAN1-&amp;gt;sTxMailBox[0].TDTR &amp;amp;= ~CAN_TDT0R_DLC;                  \/* length of data in frame *\/ CAN1-&amp;gt;sTxMailBox[0].TDTR |= (DATA_LENGTH_CODE &amp;lt;&amp;lt; CAN_TDT0R_DLC_Pos); CAN1-&amp;gt;MCR &amp;amp;= ~CAN_MCR_INRQ;                                  \/* go to normal mode *\/  return 0;  } uint8_t can_send(uint8_t * pData, uint8_t dataLength){ uint16_t i = 0; uint8_t j = 0; while (!(CAN1->TSR &amp; CAN_TSR_TME0)){ i++; if (i>0xEFFF) return 1; } i = 0; CAN1->sTxMailBox[0].TDLR = 0; CAN1->sTxMailBox[0].TDHR = 0; while (i&lt;dataLength){ if (i>(DATA_LENGTH_CODE-1)){ CAN1->sTxMailBox[0].TIR |= CAN_TI0R_TXRQ;                 \/* Transmit Mailbox Request \/ dataLength -= i; j++; while (!(CAN1->TSR &amp; CAN_TSR_TME0)){                      \/ Transmit mailbox 0 empty? \/ i++; if (i>0xEFFF) return 1; } if (CAN1->TSR &amp; CAN_TSR_TXOK0){}                          \/ Tx OK? \/ \/\/else return ((CAN1->ESR &amp; CAN_ESR_LEC)>>CAN_ESR_LEC_Pos); \/ return Last error code \/ i = 0; CAN1->sTxMailBox[0].TDLR = 0; CAN1->sTxMailBox[0].TDHR = 0; } if (i&lt;4){ CAN1->sTxMailBox[0].TDLR |= (pData[i+jDATA_LENGTH_CODE]1U &lt;&lt; (i8)); } else{ CAN1->sTxMailBox[0].TDHR |= (pData[i+jDATA_LENGTH_CODE]1U &lt;&lt; (i8-32)); } i++; } CAN1->sTxMailBox[0].TIR |= CAN_TI0R_TXRQ; \/ Transmit Mailbox Request \/ if (CAN1->TSR &amp; CAN_TSR_TXOK0) return 0; else return ((CAN1->ESR &amp; CAN_ESR_LEC)>>CAN_ESR_LEC_Pos); \/ return Last error code *\/ }<\/code><\/pre>\n<\/div>\n<\/details>\n<h3>\u0418\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h3>\n<p>C\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444 \u0438\/\u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/5e6\/5b9\/8e6\/5e65b98e6d8bab7a73e79d2bdd47f9af.jpg\" alt=\"\u0420\u0438\u0441. 5 \u2013 \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 CAN_H \u0438 CAN_L\" title=\"\u0420\u0438\u0441. 5 \u2013 \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 CAN_H \u0438 CAN_L\" width=\"640\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5e6\/5b9\/8e6\/5e65b98e6d8bab7a73e79d2bdd47f9af.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 5 \u2013 \u041e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 CAN_H \u0438 CAN_L<\/figcaption><\/figure>\n<p>\u041d\u0430 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f 10 \u0431\u0430\u0439\u0442 \u0442.\u043e. \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 2 \u043a\u0430\u0434\u0440\u0430. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0438 \u0434\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 8 \u0431\u0430\u0439\u0442 \u2013 1 \u043a\u0430\u0434\u0440. \u0418 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u044b \u0434\u043b\u0438\u043d\u0443 \u043a\u0430\u0434\u0440\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0438 \u0434\u043e 4 \u0431\u0430\u0439\u0442, \u0430 \u0434\u043b\u0438\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u043a 10 \u0431\u0430\u0439\u0442\u0430\u043c \u2013 3 \u043a\u0430\u0434\u0440\u0430. \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0442\u0430\u043a\u0443\u044e \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432\u0435\u0441\u044c\u043c\u0430 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 (\u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c LWLA1034 \u0432 \u043f\u0430\u0440\u0435 \u0441 \u041f\u041e \u2013 PulseView) (\u0440\u0438\u0441. 6).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/3a4\/b87\/309\/3a4b873092fd2db70cb6bb1959908a1d.jpg\" alt=\"\u0420\u0438\u0441. 6 \u2013 \u0421\u0438\u0433\u043d\u0430\u043b\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 PulseView.\" title=\"\u0420\u0438\u0441. 6 \u2013 \u0421\u0438\u0433\u043d\u0430\u043b\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 PulseView.\" width=\"1928\" height=\"1247\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a4\/b87\/309\/3a4b873092fd2db70cb6bb1959908a1d.jpg\" data-blurred=\"true\"\/><figcaption>\u0420\u0438\u0441. 6 \u2013 \u0421\u0438\u0433\u043d\u0430\u043b\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 PulseView.<\/figcaption><\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e (\u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435 ASCII A = 0x41, B = 0x42 \u0438 \u0442. \u0434.), \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u043a\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 (0x556), \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 (250 \u043a\u0411\u0438\u0442\/\u0441). \u041d\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b, \u043d\u043e \u0435\u043c\u0443 \u0438 \u0432\u0437\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0442\u043a\u0443\u0434\u0430. \u041a\u0441\u0442\u0430\u0442\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 CAN error status register, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438. \u0417\u0430\u0439\u0434\u0435\u043c \u0432 Keil \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"662\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dc5\/442\/249\/dc5442249b05a326bfefb4f22a07753e.png\" data-width=\"1604\"\/><figcaption><\/figcaption><\/figure>\n<p>LEC = 3 \u2013 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451! \u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430, \u0443\u0440\u0430! \u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 Keil \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/github.com\/MViktorE\/keil\/tree\/main\/2_lesson_can\" rel=\"noopener noreferrer nofollow\">github<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e \u043d\u0430\u043f\u0438\u0448\u0443 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 CAN \u0447\u0435\u0440\u0435\u0437 cmsis \u043d\u0430 \u043f\u0440\u0438\u0435\u043c.<\/p>\n<\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/598505\/\"> https:\/\/habr.com\/ru\/post\/598505\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CAN (Controller Area Network). \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c CAN \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e HAL \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CMSIS \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431\u0440\u044b\u0432\u043e\u0447\u043d\u0430, \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b CAN-\u0441\u0435\u0442\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442.\u043a. \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0435\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Controller_Area_Network\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u0442\u0435\u0440\u0438\u043b\u0430<\/a> (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <a href=\"https:\/\/istarik.ru\/blog\/stm32\/159.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>) \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443, \u043d\u043e \u043f\u043e \u0445\u043e\u0434\u0443 \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u044e\u0430\u043d\u0441\u0430\u0445.<\/p>\n<p><strong>\u0421\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443:<\/strong> \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0434\u0440\u044b \u0432 CAN-\u0441\u0435\u0442\u044c \u0441 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 250 \u043a\u0411\u0438\u0442\/\u0441, \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (11 \u0431\u0438\u0442) \u0441 \u043f\u043e\u043b\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 8 \u0431\u0430\u0439\u0442.<\/p>\n<h3>\u041e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u041f\u041e<\/h3>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 STM32F103C8T6 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0432 \u043d\u0430\u0440\u043e\u0434\u0435 &#171;Blue Pill&#187; (\u0440\u0438\u0441. 1\u0430). \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u0440\u0438\u0435\u043c\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438\u043a\u0430 (\u041f\u041f) (\u043f\u043e \u0430\u043d\u0433\u043b\u0438\u0446\u043a\u0438 &#171;transceiver&#187;) \u0434\u043b\u044f CAN-\u0448\u0438\u043d\u044b. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e 2 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u044b \u0441 SN65HVD230 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 (\u0440\u0438\u0441. 1\u0431). \u041d\u0430 \u0440\u0438\u0441. 1\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0441\u0445\u0435\u043c\u0430 \u044d\u0442\u043e\u0439 \u043f\u043b\u0430\u0442\u044b . \u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Keil uVision v5. \u041e\u0442\u043b\u0430\u0434\u043a\u0443 \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u0430 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 1 \u2013 \u0430) \u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Blue Pill; \u0431) \u041f\u043b\u0430\u0442\u0430 \u041f\u041f; \u0432) \u042d\u043b. \u0441\u0445\u0435\u043c\u0430 \u043f\u043b\u0430\u0442\u044b \u041f\u041f.<\/figcaption><\/figure>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c, \u043d\u0435 \u043f\u043e\u0431\u043e\u044e\u0441\u044c \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u0438\u0441\u043f\u044b\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434. \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u041f\u041f \u0441 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 Blue Pill:<\/p>\n<p>CAN TX -> PA12 <\/p>\n<p>\u0421AN RX -> PA11<\/p>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u041f\u041f CAN_H \u0438 CAN_L \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439. \u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043b\u0438\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u0445\u0435\u043c\u0435 \u043d\u0430 \u0440\u0438\u0441. 2. \u0416\u0435\u043b\u0442\u044b\u0439 \u043f\u0440\u043e\u0432\u043e\u0434 \u0438\u0434\u0435\u0442 \u043a \u0432\u0445\u043e\u0434\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 2 \u2013 \u0421\u0445\u0435\u043c\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u043e\u0432 \u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f \u0441\u0442\u0435\u043d\u0434\u0430<\/figcaption><\/figure>\n<h3>\u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u041f\u041e<\/h3>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u041c\u041a. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c Keil (\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0434\u043b\u044f \u0432\u0430\u0441 \u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: IAR, Eclipse\/CubeIDE \u0438 \u0434\u0440., \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d CMSIS), \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0448\u0435\u0439 \u00abBlue Pill\u00bb. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u044d\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u0432 \u043f\u043e\u043c\u043e\u0449\u044c <a href=\"https:\/\/habr.com\/ru\/post\/481478\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>.<\/p>\n<figure class=\"float\"><figcaption>\u0420\u0438\u0441. 3 \u2013 \u041f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u0430\u044f \u0441 \u0448\u0438\u043d\u043e\u0439 APB1<\/figcaption><\/figure>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0442\u0435\u0445. \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e (<a href=\"https:\/\/www.st.com\/resource\/en\/datasheet\/stm32f103c8.pdf\" rel=\"noopener noreferrer nofollow\">datasheet<\/a>) (\u0440\u0438\u0441. 3). \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 (HSI). \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043d\u0435\u0442, \u0434\u0430 \u0438 \u044d\u0442\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u0448\u0438\u043d\u0435 APB1 \u0431\u044b\u043b\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 36 \u041c\u0413\u0446. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0438\u043a\u0435 \u00abstm32 cmsis rcc\u00bb, \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0438\u043b\u0438 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c Reference Manual (\u0431\u0440\u0435\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 ?). \u0417\u0434\u0435\u0441\u044c \u044f \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0442\u0435\u043a\u0441\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u043e\u043d\u0430 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430, \u043d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cpp\">uint8_t rcc_init(void){     \/* Using the default HSI sorce - 8 MHz *\/     \/* Checking that the HSI is working *\/     for (uint8_t i=0; ; i++){         if(RCC->CR &amp; (1&lt;&lt;RCC_CR_HSIRDY_Pos))           break;         if(i == 255)           return 1;               }         \/* RCC_CFGR Reset value: 0x0000 0000 *\/     \/* PLLSRC: PLLSRC: PLL entry clock source - Reset Value - 0 -> HSI oscillator clock \/ 2 selected as PLL input clock *\/     \/* HSI = 8 MHz *\/     RCC->CFGR |= RCC_CFGR_PLLMULL9;     \/* 0x000C0000 - PLL input clock*9 *\/     RCC->CFGR |= RCC_CFGR_SW_1;         \/* 0x00000002 - PLL selected as system clock *\/     \/* SYSCLK = 36 MHz *\/     \/*Also you can change another parameters:*\/     \/* HPRE: AHB prescaler - Reset Value - 0 -> SYSCLK not divided *\/     \/* HCLK = 36 MHz (72 MHz MAX) *\/     \/* PPRE1: APB low-speed prescaler (APB1) - Reset Value - 0 -> 0xx: HCLK not divided *\/     \/* PPRE2: APB low-speed prescaler (APB2) - Reset Value - 0 -> 0xx: HCLK not divided *\/     \/* APB1 = APB2 = 36 MHz *\/     \/* ADCPRE: ADC prescaler - Reset Value - 0 -> PCLK2 divided by 2 *\/     \/* PLLXTPRE: HSE divider for PLL entry - ResVal - 0 -> HSE clock not divided *\/     \/* USBPRE: USB prescaler - ResVal - 0: PLL clock is divided by 1.5 *\/     RCC->CR |=RCC_CR_PLLON;             \/* 0x01000000 - PLL enable *\/     for (uint8_t i=0; ; i++){         if(RCC->CR &amp; (1U&lt;&lt;RCC_CR_PLLRDY_Pos))             break;         if(i==255){             RCC->CR &amp;= ~(1U&lt;&lt;RCC_CR_PLLON_Pos);             return 2;         }     }           return 0; }<\/code><\/pre>\n<p>\u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e, \u0441\u0430\u043c\u043e \u0442\u0435\u043b\u043e \u043f\u0440\u044f\u0447\u0435\u043c \u0432 \u043f\u043e\u0434\u0432\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u043b\u043e\u0441\u044c. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c rcc_init(). <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 uint8_t can_init(void). \u0414\u0430\u043b\u0435\u0435 \u0442\u0435\u043a\u0441\u0442 \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 CAN:<\/p>\n<pre><code class=\"cpp\">RCC->APB1ENR |= RCC_APB1ENR_CAN1EN;<\/code><\/pre>\n<p>CAN RX \u0438 TX \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0430\u0445 PA11 \u0438 PA12, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e (\u0441\u043c. 31 \u0441\u0442\u0440. \u0442\u0435\u0445. \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438). \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0442\u0430 A:<\/p>\n<pre><code>RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044b \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u0438 \u043f\u0440\u0438\u0435\u043c (CAN Rx) , \u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u043d \u043d\u0430 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cpp\">\/* PA11 - CAN_RX *\/ GPIOA->CRH&amp;= ~GPIO_CRH_CNF11;   \/* CNF11 = 00 *\/  GPIOA->CRH|= GPIO_CRH_CNF11_1;  \/* CNF11 = 10 -> AF Out | Push-pull (CAN_RX) *\/ GPIOA->CRH |= GPIO_CRH_MODE11;   \/* MODE8 = 11 -> Maximum output speed 50 MHz *\/ \/* PA12 - CAN_TX *\/ GPIOA->CRH&amp;= ~GPIO_CRH_CNF12;  \/* CNF12 = 00 *\/ GPIOA->CRH|= GPIO_CRH_CNF12_1;\/* CNF12 = 10 -> AF Out | Push-pull (CAN_TX) *\/ GPIOA->CRH |= GPIO_CRH_MODE12;   \/* MODE8 = 11 -> Maximum output speed 50 MHz *\/<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d master control register (MCR) \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c CAN \u0432 \u0440\u0435\u0436\u0438\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">CAN1->MCR |= CAN_MCR_INRQ;              \/* Initialization Request *\/<\/code><\/pre>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0440\u0435\u0436\u0438\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438. \u0420\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430 \u0442.\u043a. \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0435\u043d\u0434\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u0447\u0435\u043c, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u043f\u0440\u0438\u0435\u043c \u0442\u043e\u0436\u0435 \u043d\u0435\u043a\u043e\u043c\u0443. \u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u043e \u0432 CAN error status register (CAN_ESR) \u0432 \u0431\u0438\u0442\u0430\u0445 4\u20266 LEC[2:0]: (Last error code) \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 Acknowledgment Error. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f 4 \u0438 5 \u0431\u0438\u0442 (0b011).<\/p>\n<pre><code class=\"cpp\">CAN1->MCR |= CAN_MCR_NART;<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0447\u0442\u043e\u0431\u044b CAN \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u0438\u0437 \u0441\u043f\u044f\u0449\u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 (Automatic Wakeup Mode):<\/p>\n<pre><code class=\"cpp\">CAN1->MCR |= CAN_MCR_AWUM;<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u043c\u043d\u0438\u043c, \u043c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 250 \u043a\u0411\u0438\u0442\/\u0441, \u0442.\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430: T_bit = 1\/(250*1000) = 4 \u043c\u043a\u0441 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0448\u0438\u043d\u044b APB1 f_APB1 = 36 \u041c\u0413\u0446. \u0414\u0430\u043b\u0435\u0435 \u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0440\u0438\u0441\u0443\u043d\u043e\u043a (\u0440\u0438\u0441. 4, \u0432\u0437\u044f\u043b <a href=\"https:\/\/istarik.ru\/blog\/stm32\/159.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u044f\u0441\u043d\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435<\/p>\n<figure class=\"full-width\"><figcaption>\u0420\u0438\u0441. 4 \u2013 \u041f\u0435\u0440\u0438\u043e\u0434 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0434\u043b\u044f CAN<\/figcaption><\/figure>\n<p> \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435: System Clock = f_APB1 = 36 \u041c\u0413\u0446. CAN System Clock \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 CAN Bit Period. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0411\u0418\u0422 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 4 \u0447\u0430\u0441\u0442\u0435\u0439. \u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e 1 \u043a\u0432\u0430\u043d\u0442. \u0412\u0442\u043e\u0440\u0430\u044f \u0438 \u0442\u0440\u0435\u0442\u044c\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442. \u0414\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0442\u043e\u0447\u043a\u0430 \u00ab\u0437\u0430\u0445\u0432\u0430\u0442\u0430\u00bb \u0431\u0438\u0442\u0430 (Sample Point) \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0431\u0438\u0442\u0430. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0432\u0430\u043d\u0442\u043e\u0432 \u0432 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u0445 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043a\u0430 \u00ab\u0437\u0430\u0445\u0432\u0430\u0442\u0430\u00bb \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 87,5% \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432 CANopen \u0438 DeviceNet \u0438 75% \u0434\u043b\u044f ARINC 825. \u041d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 87,5 %. \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0434\u0432\u0430 \u043f\u0443\u0442\u0438: \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c <a href=\"http:\/\/www.bittiming.can-wiki.info\" rel=\"noopener noreferrer nofollow\">\u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c<\/a>. \u043b\u0438\u0431\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0438 \u0440\u0435\u0448\u0438\u0442\u044c \u0435\u0451. \u041f\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043f\u0443\u0442\u0438.<\/p>\n<p>\u0412\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u00abRequest Table\u00bb. \u0410\u0445 \u0434\u0430, \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u0448\u0438\u0440\u0438\u043d\u0430 \u0441\u043a\u0430\u0447\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (SJW &#8212; Synchronization Jump Width) \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u043e\u043d\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442. <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c 2-\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u00ab\u0437\u0430\u0445\u0432\u0430\u0442\u0430\u00bb \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e 1 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0434\u043b\u0438\u043d\u043e\u0439 13 \u043a\u0432\u0430\u043d\u0442\u043e\u0432, \u0430 2-\u043e\u0439 \u2013 2 \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, t_Q = 1\/(16*250000) = 250 \u043d\u0441, \u0430 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0432\u0435\u043d 9. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u0434\u0430\u0436\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 CAN_BTR, \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e. \u041a\u0441\u0442\u0430\u0442\u0438, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0442\u043e\u0433\u0434\u0430 \u0431\u044b \u043d\u0430\u043c \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u0440\u0430\u0441\u0447\u0451\u0442\u0430<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0420\u0435\u0448\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u043a\u0443 \u043a\u0430\u043a \u0432 \u0448\u043a\u043e\u043b\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"372\" width=\"372\">\n<p>\u0414\u0430\u043d\u043e:<br \/>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, bps = 250 \u043a\u0411\u0438\u0442\/\u0441<br \/>\u0422\u043e\u0447\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043d\u0430 87,5 % \u0434\u043b\u0438\u043d\u044b \u0431\u0438\u0442\u0430, sp = 0,875<br \/>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0448\u0438\u043d\u044b APB1, f_APB1 = 36 \u041c\u0413\u0446<\/p>\n<\/td>\n<td rowspan=\"2\">\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<br \/>\u0417\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0438\u0442\u0430 \u0440\u0430\u0432\u043d\u0430:<br \/>(x+y+1)*t_Q = 1\/bps (1)<br \/>t_Q &#8212; \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<br \/>\u0421\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0440\u0430\u0432\u0435\u043d 1 (PreSc = 1), \u0442\u043e\u0433\u0434\u0430:<br \/>t_Q = PreSc\/f_APB1 = 27,78 \u043d\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"372\" width=\"372\">\n<p>\u041d\u0430\u0439\u0442\u0438<br \/>\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 1 \u0438 2 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (x \u0438 y, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/th>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0435\u0448\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440-\u0438\u0439 (1) \u0438 (2), \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:<\/p>\n<p>x = 125, y = 18, \u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 ref. manual, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e x (\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 1-\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430) \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442 1 \u0434\u043e 16. \u0412 \u0446\u0438\u043a\u043b\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043d\u0430 1 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0438 \u0440\u0435\u0448\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442: PreSc = 9, x = 13, y = 2<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0439\u0434\u0435\u043c \u0432 CAN bit timing register (CAN_BTR). \u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0431\u0438\u0442\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0430 Baud rate prescaler (BRP[9:0]) \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c: <em>BRP[9:0] = <\/em>PreSc<em> &#8212; 1 = 8<\/em>:<\/p>\n<pre><code class=\"cpp\">CAN1->BTR &amp;= ~CAN_BTR_BRP; CAN1->BTR |= 8U &lt;&lt; CAN_BTR_BRP_Pos;<\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0431\u0438\u0442\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 1 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c: TS1[3:0] = 13 \u2013 1 = 12:<\/p>\n<pre><code class=\"cpp\">CAN1->BTR &amp;= ~(0xFU &lt;&lt; CAN_BTR_TS1_Pos); CAN1->BTR |= 12U &lt;&lt; CAN_BTR_TS1_Pos;<\/code><\/pre>\n<p>\u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0431\u0438\u0442\u044b, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 2 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c: TS2[2:0] = 2 \u2013 1 = 1:<\/p>\n<pre><code class=\"cpp\">CAN1->BTR &amp;= ~(7U &lt;&lt; CAN_BTR_TS2_Pos); CAN1->BTR |=   1U &lt;&lt; CAN_BTR_TS2_Pos;<\/code><\/pre>\n<p>\u0411\u0438\u0442\u044b 24\u202625 SJW[1:0] \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u043c \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442. \u043e. \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0447\u0442\u043e \u0448\u0438\u0440\u0438\u043d\u0430 \u0441\u043a\u0430\u0447\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 t_SJW = 2t_Q = 500 \u043d\u0441.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c CAN \u0432 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (Loop back mode, Silent mode), \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0448 \u0441\u043b\u0443\u0447\u0430\u0439. <\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u044f\u0449\u0438\u043a \u043d\u043e\u043c\u0435\u0440 0 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 (transmit mailbox 0). \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0435\u0433\u043e \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0442\u0438\u043f\u0430 CAN_TypeDef \u0435\u0441\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 sTxMailBox \u0442\u0438\u043f\u0430 CAN_TxMailBox_TypeDef. \u00a0\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044f\u0449\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 (data frame), \u0430 \u043d\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 (remote frame), \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443:<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TIR &amp;= ~CAN_TI0R_RTR;<\/code><\/pre>\n<p>\u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043a\u0430\u0434\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TIR &amp;= ~CAN_TI0R_IDE;<\/code><\/pre>\n<p>\u041e\u0442\u0447\u0438\u0441\u0442\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043a\u0430\u043a\u043e\u0439 \u0434\u0443\u0448\u0435 \u0432\u0437\u0434\u0443\u043c\u0430\u0435\u0442\u0441\u044f (\u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0 \u0434\u043e 3777):<\/p>\n<pre><code class=\"cpp\">CAN1->sTxMailBox[0].TIR &amp;= ~CAN_TI0R_STID; CAN1->sTxMailBox[0].TIR |= (0x556U &lt;&lt; CAN_TI0R_STID_Pos);<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0434\u0440\u0435. CAN<\/p>\n<\/div>\n<\/div>\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-327219","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327219","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=327219"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327219\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=327219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=327219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=327219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}