{"id":319410,"date":"2021-03-11T15:01:24","date_gmt":"2021-03-11T15:01:24","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=319410"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=319410","title":{"rendered":"FDCAN \u043d\u0430 STM32"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c <strong>flexible data rate can<\/strong> \u043d\u0430 STM32H743 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0431\u0435\u0437 HAL \u0438 cubemx.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/781\/58a\/0a3\/78158a0a33ac1e2f125d583a86ba63cf.jpg\" width=\"1637\" height=\"843\"><figcaption><\/figcaption><\/figure>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435.<\/h2>\n<p>\u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 FDCAN \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 BOSCH \u0432 2012 \u0433\u043e\u0434\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 1 \u043c\u0431\u0438\u0442 (\u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445), \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c 12 \u043c\u0431\u0438\u0442. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 64 \u0431\u0430\u0439\u0442. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 can \u0438 fdcan, \u0442\u043e \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0430 \u0441\u0442\u0430\u0440\u044b\u0435 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0438 \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441 \u043d\u043e\u0432\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c. \u0423\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0442.\u043a. \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 fdcan \u043e\u0442 stm.<\/p>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f FDCAN.<\/h2>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 FDCAN \u043e\u0442 BxCAN \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 stm32 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0431\u0443\u0444\u0435\u0440\u043e\u0432. \u0412 \u043c\u043a stm32h743 \u0434\u043b\u044f fdcan \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0440\u043e\u0432\u043d\u043e 10 \u043a\u0431\u0430\u0439\u0442 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0434\u043b\u044f fdcan1 \u0438 fdcan2). \u042d\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0433\u0438\u0431\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u044e\u0431\u044b\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa5\/413\/fc3\/fa5413fc376610a124d3b2a751cfc52a.png\" width=\"704\" height=\"506\"><figcaption><\/figcaption><\/figure>\n<p>\u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0434\u0451\u0442 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430 (\u0441\u043b\u043e\u0432\u043e): \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u0432\u0430 \u0431\u0438\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0430\u0434\u0440\u0435\u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 xxSA (\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430) \u0441\u0434\u0432\u0438\u043d\u0443\u0442 \u043d\u0430 \u0434\u0432\u0430 \u0431\u0438\u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e. \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u043c\u043a <strong>stm32h743 <\/strong>= 0x4000AC00.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<p>1) \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 fdcan:<\/p>\n<ul>\n<li>\n<p>00: hse_ck clock is selected as FDCAN kernel clock (default after reset)<\/p>\n<\/li>\n<li>\n<p>01: pll1_q_ck clock is selected as FDCAN kernel clock<\/p>\n<\/li>\n<li>\n<p>10: pll2_q_ck clock is selected as FDCAN<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">RCC-&gt;D2CCIP1R |= RCC_D2CCIP1R_FDCANSEL_1;<\/code><\/pre>\n<p>2) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0438\u043d\u044b <strong>GPIO <\/strong>\u043d\u0430 \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 CAN, \u0442\u043e \u0438\u0449\u0435\u043c \u043f\u0438\u043d\u044b <strong>FDCANx<em>TX \/ FDCANx<\/em>RX<\/strong>. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c FDCAN, \u0442\u043e \u043f\u0438\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <strong>FDCANx_<em>TXFD_<\/em>MODE \/ FDCANx<em>RXFD<\/em>MODE<\/strong>. \u0412 \u043c\u043e\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 CAN \u043d\u0430 \u043f\u0438\u043d\u0430\u0445 PA11 (RX) \u0438 PA12 (TX), \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f #9. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0432\u043e\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u043d\u0430 github`e.<\/p>\n<pre><code class=\"cpp\">gpio_init (PORT_A, 11, MODE_ALT_F, TYPE_PUSH_PULL, SPEED_MAX, PULL_NO, ALTF_9); \/\/ RX gpio_init (PORT_A, 12, MODE_ALT_F, TYPE_PUSH_PULL, SPEED_MAX, PULL_NO, ALTF_9); \/\/ TX<\/code><\/pre>\n<p>3) \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c FDCAN \u043c\u043e\u0434\u0443\u043b\u0438:<\/p>\n<pre><code>RCC-&gt;APB1HENR |= RCC_APB1HENR_FDCANEN;<\/code><\/pre>\n<p>4) \u0412\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code>FDCAN1-&gt;CCCR |= FDCAN_CCCR_INIT;  while ((FDCAN1-&gt;CCCR &amp; FDCAN_CCCR_INIT) == 0) {};<\/code><\/pre>\n<p>5) \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code>FDCAN1-&gt;CCCR |= FDCAN_CCCR_CCE;<\/code><\/pre>\n<p>6) \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;CCCR &amp;= ~(FDCAN_CCCR_FDOE);           FDCAN1-&gt;CCCR |= FDCAN_CCCR_DAR; \/\/ RETR OFF<\/code><\/pre>\n<p>7) \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c Loopback \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;CCCR |= FDCAN_CCCR_TEST; FDCAN1-&gt;TEST |= FDCAN_TEST_LBCK;<\/code><\/pre>\n<p>8) \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">#define FDCAN_MEM_START_ADDR          0x4000AC00UL #define FDCAN_MEM_END_ADDR            0x4000D3FFUL  unsigned long *i; for (i = (unsigned long*)FDCAN_MEM_START_ADDR; i &lt; (unsigned long*)FDCAN_MEM_END_ADDR; i++) *i = 0;<\/code><\/pre>\n<p>10) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 time quanta \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 time quanta \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 :<\/p>\n<pre><code class=\"cpp\">#define CAN_PRESCALER   6  #define CAN_SYNC_JW     2  #define CAN_SYNC_SEG    1 #define CAN_PHASE_SEG1 11  #define CAN_PHASE_SEG2  4  \/\/ nominal time quanta segments FDCAN1-&gt;NBTP  = (CAN_SYNC_JW    - 1) &lt;&lt; FDCAN_NBTP_NSJW_Pos; FDCAN1-&gt;NBTP |= (CAN_PRESCALER  - 1) &lt;&lt; FDCAN_NBTP_NBRP_Pos; FDCAN1-&gt;NBTP |= (CAN_PHASE_SEG1 - 1) &lt;&lt; FDCAN_NBTP_NTSEG1_Pos; FDCAN1-&gt;NBTP |= (CAN_PHASE_SEG2 - 1) &lt;&lt; FDCAN_NBTP_NTSEG2_Pos;  \/\/ flexible bitrate time quanta segments FDCAN1-&gt;DBTP  = (CAN_SYNC_JW    - 1) &lt;&lt; FDCAN_DBTP_DSJW_Pos; FDCAN1-&gt;DBTP |= (CAN_PRESCALER  - 1) &lt;&lt; FDCAN_DBTP_DBRP_Pos; FDCAN1-&gt;DBTP |= (CAN_PHASE_SEG1 - 1) &lt;&lt; FDCAN_DBTP_DTSEG1_Pos; FDCAN1-&gt;DBTP |= (CAN_PHASE_SEG2 - 1) &lt;&lt; FDCAN_DBTP_DTSEG2_Pos;<\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 fdcan<em> kernel clock \u0440\u0430\u0432\u043d\u043e\u0439 48 \u041c\u0413\u0446, \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 500 \u041a\u0413\u0446.<\/em><\/p>\n<p>\u041e\u0434\u0438\u043d \u0431\u0438\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 can \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (SYNC_SEG) <\/p>\n<\/li>\n<li>\n<p>C\u0435\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f (PROP_SEG)<\/p>\n<\/li>\n<li>\n<p>\u0424\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1 (PHASE_SEG1)<\/p>\n<\/li>\n<li>\n<p>\u0424\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2 (PHASE_SEG2)<\/p>\n<\/li>\n<\/ul>\n<p> \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 stm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (SYNC_SEG):<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f PROP_SEG \u0438 PHASE_SEG1)<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2 (PHASE_SEG2)<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b74\/ad8\/135\/b74ad81350c63280e08ac169c5f63b7d.png\" alt=\"\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 CAN\" title=\"\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 CAN\" width=\"609\" height=\"193\"><figcaption>\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 CAN<\/figcaption><\/figure>\n<p>Time quanta &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 CAN. \u0415\u0451 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043d\u0430 fdcan kernel clock. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c Tq = 2.08333333e-8. \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u0441\u043a\u0430\u043b\u0435\u0440 \u0447\u0430\u0441\u0442\u043e\u0442\u044b. \u041c\u044b \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430\u0448\u0443 Tq \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CAN_PRESCALER \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c Tq = 0,000000125 \u0441\u0435\u043a.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0441\u0443\u043c\u043c\u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (1 + 14 + 4) \u043d\u0430 Tq \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c  0,000002 \u0441\u0435\u043a. <\/p>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0431\u0435\u0440\u0451\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438 \u0434\u0435\u043b\u0438\u043c \u043d\u0430 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430. 1 \/ 0,000002 = 500 000 \u0413\u0446.<\/p>\n<p>11) \u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;GFC |= FDCAN_GFC_ANFS; \/\/ Reject non-matching frames standard FDCAN1-&gt;GFC |= FDCAN_GFC_ANFE; \/\/ Reject non-matching frames extended FDCAN1-&gt;GFC |= FDCAN_GFC_RRFS; \/\/ Reject all remote frames with 11-bit standard ID FDCAN1-&gt;GFC |= FDCAN_GFC_RRFE; \/\/ Reject all remote frames with 29-bit standard ID<\/code><\/pre>\n<p>10) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0438\u0445 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/ 11-bit filters #define FDCAN_11B_FILTER_EL_CNT       0UL #define FDCAN_11B_FILTER_EL_SIZE      4UL #define FDCAN_11B_FILTER_EL_W_SIZE    (FDCAN_11B_FILTER_EL_SIZE \/ 4) #define FCCAN_11B_FILTER_START_ADDR   (FDCAN_MEM_START_ADDR) #define FDCAN_11B_FILTER_OFFSET       0UL  \/\/ 29-bit filters #define FDCAN_29B_FILTER_EL_CNT       4UL #define FDCAN_29B_FILTER_EL_SIZE      8UL  #define FDCAN_29B_FILTER_EL_W_SIZE    (FDCAN_29B_FILTER_EL_SIZE \/ 4)  #define FCCAN_29B_FILTER_START_ADDR   (FCCAN_11B_FILTER_START_ADDR + FDCAN_11B_FILTER_EL_CNT * FDCAN_11B_FILTER_EL_SIZE) #define FDCAN_29B_FILTER_OFFSET       (FDCAN_11B_FILTER_OFFSET     + FDCAN_11B_FILTER_EL_CNT * FDCAN_11B_FILTER_EL_W_SIZE)  FDCAN1-&gt;SIDFC = (FDCAN_11B_FILTER_EL_CNT &lt;&lt; FDCAN_SIDFC_LSS_Pos); \/\/ standart filter count FDCAN1-&gt;XIDFC = (FDCAN_29B_FILTER_EL_CNT &lt;&lt; FDCAN_XIDFC_LSE_Pos); \/\/ extended filter count \t FDCAN1-&gt;SIDFC |= (FDCAN_11B_FILTER_OFFSET &lt;&lt; FDCAN_SIDFC_FLSSA_Pos); \/\/ standard filter start address FDCAN1-&gt;XIDFC |= (FDCAN_29B_FILTER_OFFSET &lt;&lt; FDCAN_XIDFC_FLESA_Pos); \/\/ extended filter start address\t<\/code><\/pre>\n<p>11) \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u043e \u0447\u0451\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u0440\u0430\u0437\u043c\u0435\u0440 = 32 \u0431\u0438\u0442\u0430):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9f2\/ff8\/e1f\/9f2ff8e1fd5427d25be3c4e9583610c1.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" width=\"773\" height=\"73\"><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFT<\/p>\n<\/td>\n<td>\n<p>00: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0442 SFID1 \u0434\u043e SFID2<\/p>\n<p>01: \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 SFID1 + \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 SFID2<\/p>\n<p>10: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440: SFID1 = \u0444\u0438\u043b\u044c\u0442\u0440, SFID2 = \u043c\u0430\u0441\u043a\u0430<\/p>\n<p>11: \u0424\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFEC<\/p>\n<\/td>\n<td>\n<p>000: \u0424\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>001: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 0<\/p>\n<p>010: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 1<\/p>\n<p>011: \u041e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b<\/p>\n<p>100: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442<\/p>\n<p>101: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 0<\/p>\n<p>110: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 1<\/p>\n<p>111: \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Rx \u0431\u0443\u0444\u0435\u0440 \u0438\u043b\u0438 \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f  FDCAN_SFT[1:0] \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFID1<\/p>\n<\/td>\n<td>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFID2<\/p>\n<\/td>\n<td>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 2 \/ \u043c\u0430\u0441\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0443\u0436\u0435 \u0434\u0432\u0430 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u0440\u0430\u0437\u043c\u0435\u0440 = 64 \u0431\u0438\u0442\u0430):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b47\/e62\/9f6\/b47e629f6662d2a720a525cb0a4eccd7.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\" width=\"773\" height=\"106\"><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFEC<\/p>\n<\/td>\n<td>\n<p>000: \u0424\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>001: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 0<\/p>\n<p>010: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 1<\/p>\n<p>011: \u041e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b<\/p>\n<p>100: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442<\/p>\n<p>101: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 0<\/p>\n<p>110: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 1<\/p>\n<p>111: \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Rx \u0431\u0443\u0444\u0435\u0440, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f  FDCAN_SFT[1:0] \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFTI<\/p>\n<\/td>\n<td>\n<p>00: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0442 EFID1 \u0434\u043e EFID2<\/p>\n<p>01: \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 EFID1 + \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 EFID2<\/p>\n<p>10: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440: EFID1 = \u0444\u0438\u043b\u044c\u0442\u0440, EFID2 = \u043c\u0430\u0441\u043a\u0430<\/p>\n<p>11: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0442 EFID1 \u0434\u043e EFID2. FDCAN_XIDAM \u043c\u0430\u0441\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFID1<\/p>\n<\/td>\n<td>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFID2<\/p>\n<\/td>\n<td>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 2<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 XIDAM \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0441\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u041c\u041a \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0x1FFF FFFF, \u0442.\u0435. \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 fdcan \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432 \u043d\u043e\u043b\u044c, \u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u0412 \u0431\u0438\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 EFTI \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043c\u0430\u0441\u043a\u0438.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">#define CAN_TEST_ID_0 0x01 #define CAN_TEST_ID_1 0x02  \/\/ FILTER TYPE #define FILTER_TYPE_RANGE       0UL #define FILTER_TYPE_DUAL        1UL #define FILTER_TYPE_CLASSIC     2UL #define FILTER_TYPE_DISABLE     3UL  \/* FILTER CONFIG *\/ #define FILTER_CFG_DISABLED     0UL #define FILTER_CFG_STORE_FIFO_0 1UL #define FILTER_CFG_STORE_FIFO_1 2UL #define FILTER_CFG_REJECT       3UL  unsigned long *ptr = (unsigned long*)FCCAN_29B_FILTER_START_ADDR;  *ptr++ = (FILTER_CFG_STORE_FIFO_0 &lt;&lt; 29) | (CAN_TEST_ID_0); *ptr++ = (FILTER_TYPE_DUAL        &lt;&lt; 30) | (CAN_TEST_ID_1);  \/\/ \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <strong>\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432<\/strong> \u0432 \u0434\u0432\u043e\u0439\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>12) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 FIFO 0. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">\/\/ Rx FIFO 0 #define FDCAN_RX_FIFO_0_EL_CNT        10 #define FDCAN_RX_FIFO_0_HEAD_SIZE     8UL #define FDCAN_RX_FIFO_0_DATA_SIZE     8UL #define FDCAN_RX_FIFO_0_EL_SIZE       (FDCAN_RX_FIFO_0_HEAD_SIZE   + FDCAN_RX_FIFO_0_DATA_SIZE) #define FDCAN_RX_FIFO_0_EL_W_SIZE     (FDCAN_RX_FIFO_0_EL_SIZE \/ 4) #define FDCAN_RX_FIFO_0_START_ADDR    (FCCAN_29B_FILTER_START_ADDR + FDCAN_29B_FILTER_EL_CNT * FDCAN_29B_FILTER_EL_SIZE) #define FDCAN_RX_FIFO_0_OFFSET        (FDCAN_29B_FILTER_OFFSET     + FDCAN_29B_FILTER_EL_CNT * FDCAN_29B_FILTER_EL_W_SIZE)  FDCAN1-&gt;RXF0C  = FDCAN_RX_FIFO_0_OFFSET &lt;&lt; FDCAN_RXF0C_F0SA_Pos; FDCAN1-&gt;RXF0C |= FDCAN_RX_FIFO_0_EL_CNT &lt;&lt; FDCAN_RXF0C_F0S_Pos;<\/code><\/pre>\n<p>13) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0431\u0443\u0444\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0420\u0435\u0436\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u0430 = FIFO. \u0415\u0441\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u043d, \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c (\u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 &#8212; \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f).<\/p>\n<pre><code class=\"cpp\">\/\/ TX buffers (FIFO) #define FDCAN_TX_FIFO_EL_CNT          10UL #define FDCAN_TX_FIFO_HEAD_SIZE       8UL #define FDCAN_TX_FIFO_DATA_SIZE       8UL #define FDCAN_TX_FIFO_EL_SIZE         (FDCAN_TX_FIFO_HEAD_SIZE + FDCAN_TX_FIFO_DATA_SIZE) #define FDCAN_TX_FIFO_EL_W_SIZE       (FDCAN_TX_FIFO_EL_SIZE \/ 4) #define FDCAN_TX_FIFO_START_ADDR      (FDCAN_TX_EVENT_START_ADDR + FDCAN_TX_EVENT_FIFO_EL_CNT * FDCAN_TX_EVENT_FIFO_EL_SIZE) #define FDCAN_TX_FIFO_OFFSET          (FDCAN_TX_EVENT_OFFSET     + FDCAN_TX_EVENT_FIFO_EL_CNT * FDCAN_TX_EVENT_FIFO_EL_W_SIZE)  FDCAN1-&gt;TXBC &amp;= ~(FDCAN_TXBC_TFQM); \/\/ FIFO operation FDCAN1-&gt;TXBC |= FDCAN_TX_FIFO_EL_CNT &lt;&lt; FDCAN_TXBC_TFQS_Pos; FDCAN1-&gt;TXBC |= FDCAN_TX_FIFO_OFFSET &lt;&lt; FDCAN_TXBC_TBSA_Pos;<\/code><\/pre>\n<p>13) \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f fdcan \u043f\u043e \u043f\u0440\u0438\u0451\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;IE |= FDCAN_IE_RF0NE; FDCAN1-&gt;ILE |= FDCAN_ILE_EINT0;<\/code><\/pre>\n<p>14) \u0412\u044b\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 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 NVIC.<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;CCCR &amp;= ~(FDCAN_CCCR_INIT); while ((FDCAN1-&gt;CCCR &amp; FDCAN_CCCR_INIT) == 1) {};        NVIC_EnableIRQ(FDCAN1_IT0_IRQn); __enable_irq();<\/code><\/pre>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430.<\/p>\n<h2>\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/h2>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0433\u043e can \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. <\/p>\n<pre><code class=\"cpp\">struct can_message { \tunsigned char error; \tunsigned long id; \tunsigned char data[8]; \tunsigned char length; \tunsigned char format; \tunsigned char type; };  struct can_fifo_element { \tunsigned long word0; \tunsigned long word1; \tunsigned long word2; \tunsigned long word3; };<\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 (\u043a\u0430\u0434\u0440\u0430) \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">#define CAN_STANDARD_FORMAT     0UL #define CAN_EXTENDED_FORMAT     1UL  #define DATA_FRAME              0UL #define REMOTE_FRAME            1UL  struct can_message can_rx_message; struct can_message can_tx_message;  void FDCAN1_read_msg (struct can_message* msg, unsigned char idx) { \tstruct can_fifo_element *fifo;    \/\/ \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \tfifo = (struct can_fifo_element*)(FDCAN_RX_FIFO_0_START_ADDR + idx * FDCAN_RX_FIFO_0_EL_SIZE);    \/\/ \u043f\u0430\u0440\u0441\u0438\u043c \u043f\u043e\u043b\u044f \tmsg-&gt;error   = (unsigned char)((fifo-&gt;word0 &gt;&gt; 31) &amp; 0x01); \tmsg-&gt;format  = (unsigned char)((fifo-&gt;word0 &gt;&gt; 30) &amp; 0x01); \tmsg-&gt;type    = (unsigned char)((fifo-&gt;word0 &gt;&gt; 29) &amp; 0x01); \t   \/\/ \u0442\u0438\u043f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \tif (msg-&gt;format == CAN_EXTENDED_FORMAT) \t{ \t\tmsg-&gt;id = fifo-&gt;word0 &amp; 0x1FFFFFFF; \t} \telse \t{ \t\tmsg-&gt;id = (fifo-&gt;word0 &gt;&gt; 18) &amp; 0x7FF; \t} \t   \/\/ \u0434\u043b\u0438\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \tmsg-&gt;length  = (unsigned char)((fifo-&gt;word1 &gt;&gt; 16) &amp; 0x0F); \t   \/\/ \u0434\u0430\u043d\u043d\u044b\u0435 \tmsg-&gt;data[0] = (unsigned char)((fifo-&gt;word2 &gt;&gt;  0) &amp; 0xFF); \tmsg-&gt;data[1] = (unsigned char)((fifo-&gt;word2 &gt;&gt;  8) &amp; 0xFF); \tmsg-&gt;data[2] = (unsigned char)((fifo-&gt;word2 &gt;&gt; 16) &amp; 0xFF); \tmsg-&gt;data[3] = (unsigned char)((fifo-&gt;word2 &gt;&gt; 24) &amp; 0xFF); \t \tmsg-&gt;data[4] = (unsigned char)((fifo-&gt;word3 &gt;&gt;  0) &amp; 0xFF); \tmsg-&gt;data[5] = (unsigned char)((fifo-&gt;word3 &gt;&gt;  8) &amp; 0xFF); \tmsg-&gt;data[6] = (unsigned char)((fifo-&gt;word3 &gt;&gt; 16) &amp; 0xFF); \tmsg-&gt;data[7] = (unsigned char)((fifo-&gt;word3 &gt;&gt; 24) &amp; 0xFF); }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043c\u044b \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e FDCAN1_read_msg \u043d\u0430\u0448 can_rx_message \u0438 \u043d\u043e\u043c\u0435\u0440 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043f\u0440\u0438\u0451\u043c\u0430.<\/p>\n<p>\u0421\u0430\u043c\u0443 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438. \u041f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u0438 \u043b\u0443\u0447\u0448\u0435 \u0432 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u0432\u043e\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0444\u043b\u0430\u0433 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 (\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0435 RTOS)  \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u043f\u0430\u043a\u0435\u0442, \u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044f fdcan:<\/p>\n<pre><code class=\"cpp\">void FDCAN1_IT0_IRQHandler(void) { \tunsigned char rx_fifo_get_index;     \t\/\/ \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \tif((FDCAN1-&gt;IR &amp; FDCAN_IR_RF0N) != 0) \t{     \/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0444\u043b\u0430\u0433 \t\tFDCAN1-&gt;IR = FDCAN_IR_RF0N;           \/\/ \u0431\u0435\u0440\u0451\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \t\trx_fifo_get_index = (unsigned char)((FDCAN1-&gt;RXF0S &gt;&gt; 8) &amp; 0x3F);          \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \t\tFDCAN1_read_msg (&amp;can_rx_message, rx_fifo_get_index);          \/\/ \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \t\tFDCAN1-&gt;RXF0A = rx_fifo_get_index; \t}; \t \t\/\/ \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \tif((FDCAN1-&gt;IR &amp; FDCAN_IR_RF0L) != 0) \t{     \/\/ \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0444\u043b\u0430\u0433 \t\tFDCAN1-&gt;IR = FDCAN_IR_RF0L;  \t}; \t \t\/\/ \u0431\u0443\u0444\u0435\u0440 RX FIFO \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d \tif((FDCAN1-&gt;IR &amp; FDCAN_IR_RF0F) != 0)   {     \/\/ do something   }; }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 (\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c) \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 RXF0A.<\/p>\n<h2>\u0411\u0443\u0444\u0435\u0440 \u043f\u0440\u0438\u0451\u043c\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 RX FIFO<\/h2>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 RX FIFO \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e fdcan \u0440\u0430\u0432\u043d\u0430 18 \u0441\u043b\u043e\u0432 (4 \u0431\u0430\u0439\u0442\u0430 * 18 = 72 \u0431\u0430\u0439\u0442\u0430). \u042d\u0442\u043e 2 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 16 \u0441\u043b\u043e\u0432 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 64 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e CAN (8 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445) \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0432\u043d\u0430 4 \u0441\u043b\u043e\u0432\u0430 (4 \u0431\u0430\u0439\u0442\u0430 * 4 = 16 \u0431\u0430\u0439\u0442).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae2\/219\/457\/ae2219457a888a7b17201ee22446246c.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430\" width=\"780\" height=\"237\"><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430<\/figcaption><\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>ESI (R0 bit 31)<\/p>\n<\/td>\n<td>\n<p>\u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0448\u0438\u0431\u043a\u0438 \u0443\u0437\u043b\u0430 <\/p>\n<p>0: Transmitting node is error active <\/p>\n<p>1: Transmitting node is error passive<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>XTD (R0 bit 30)<\/p>\n<\/td>\n<td>\n<p>0: 11-bit \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<p>1: 29-bit \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>RTR (R0 bit 29)<\/p>\n<\/td>\n<td>\n<p>0: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u043f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>1: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u043f\u0430\u043a\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (remote frame).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>ID (R0 bits 28:0)<\/p>\n<\/td>\n<td>\n<p>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 18-\u0433\u043e \u0431\u0438\u0442\u0430 [28:18].<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>ANMF (R1 bit 31)<\/p>\n<\/td>\n<td>\n<p>0: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e. \u041e\u0434\u0438\u043d \u0438\u0437 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0441\u043e\u0432\u043f\u0430\u043b.<\/p>\n<p>1: \u041f\u043e\u043b\u0443\u0447\u0435\u043d \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>FIDX (R1 bits 30:24)<\/p>\n<\/td>\n<td>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>FDF (R1 bit 21)<\/p>\n<\/td>\n<td>\n<p>0: \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>1: \u041d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (fdcan) \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u043e\u0432\u0430\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 DLC \u0438 CRC.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>BRS (R1 bit 20)<\/p>\n<\/td>\n<td>\n<p>0: \u041f\u0430\u043a\u0435\u0442 \u0431\u0435\u0437 \u0441\u043c\u0435\u043d\u044b \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 \u0444\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>1: \u041f\u0430\u043a\u0435\u0442 \u0441\u043e \u0441\u043c\u0435\u043d\u043e\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 \u0444\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>DLC (R1 bits 19:16)<\/p>\n<\/td>\n<td>\n<p>0-8: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN + CAN FD: \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0442 0 \u0434\u043e 8 \u0431\u0430\u0439\u0442.<\/p>\n<p>9-15: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN: \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 8 \u0431\u0430\u0439\u0442.<\/p>\n<p>9-15: CAN FD: \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 12\/16\/20\/24\/32\/48\/64 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>RXTS (R1 bits 15:0)<\/p>\n<\/td>\n<td>\n<p>\u0421\u0447\u0451\u0442\u0447\u0438\u043a \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"172\" width=\"172\">\n<p>DBx<\/p>\n<\/td>\n<td>\n<p>\u0411\u0430\u0439\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u044f DLC:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/67f\/217\/7dd\/67f2177dd68fe3359ab5fd59b307f65a.png\" alt=\"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f DLC\" title=\"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f DLC\" width=\"1406\" height=\"161\"><figcaption>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f DLC<\/figcaption><\/figure>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0442\u0443\u0442 \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u0431\u0435\u0437 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h2>\u0411\u0443\u0444\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 TX FIFO<\/h2>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 TX FIFO \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e fdcan \u0440\u0430\u0432\u043d\u0430 18 \u0441\u043b\u043e\u0432 (4 \u0431\u0430\u0439\u0442\u0430 * 18 = 72 \u0431\u0430\u0439\u0442\u0430). \u042d\u0442\u043e 2 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 16 \u0441\u043b\u043e\u0432 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 64 \u0431\u0430\u0439\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e CAN (8 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445) \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0432\u043d\u0430 4 \u0441\u043b\u043e\u0432\u0430 (4 \u0431\u0430\u0439\u0442\u0430 * 4 = 16 \u0431\u0430\u0439\u0442).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63b\/e2d\/3fa\/63be2d3fa93fd89b58a0b8cb151ebe8f.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438\" width=\"782\" height=\"236\"><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438<\/figcaption><\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>ESI (T0 bit 31)<\/p>\n<\/td>\n<td>\n<p>\u0424\u043b\u0430\u0433 \u043e\u0448\u0438\u0431\u043a\u0438:<\/p>\n<p>0: ESI \u0431\u0438\u0442 CAN FD \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 (error passive flag)<\/p>\n<p>1: ESI \u0431\u0438\u0442 CAN FD \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0435\u0446\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u043c.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>XTD (T0 bit 30)<\/p>\n<\/td>\n<td>\n<p>0: 11-bit \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<p>1: 29-bit \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>RTR (T0 bit 29)<\/p>\n<\/td>\n<td>\n<p>0: \u041f\u0430\u043a\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>1: \u041f\u0430\u043a\u0435\u0442 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (remote frame).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>ID (T0 bits 28:0)<\/p>\n<\/td>\n<td>\n<p>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 18-\u0433\u043e \u0431\u0438\u0442\u0430 [28:18].<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>MM (T1 bits 31:24)<\/p>\n<\/td>\n<td>\n<p>\u041c\u0430\u0440\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>EFC (T1 bit 23)<\/p>\n<\/td>\n<td>\n<p>0: \u041d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 TX event fifo.<\/p>\n<p>1: \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0432 TX event fifo.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>FDF (T1 bit 21)<\/p>\n<\/td>\n<td>\n<p>0: \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>1: \u041d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 (fdcan) \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u043e\u0432\u0430\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 DLC \u0438 CRC.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>BRS (T1 bit 20)<\/p>\n<\/td>\n<td>\n<p>0: \u041f\u0430\u043a\u0435\u0442 \u0431\u0435\u0437 \u0441\u043c\u0435\u043d\u044b \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 \u0444\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>1: \u041f\u0430\u043a\u0435\u0442 \u0441\u043e \u0441\u043c\u0435\u043d\u043e\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 \u0444\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>DLC (T1 bits 19:16)<\/p>\n<\/td>\n<td>\n<p>0-8: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN + CAN FD: \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0442 0 \u0434\u043e 8 \u0431\u0430\u0439\u0442.<\/p>\n<p>9-15: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN: \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 8 \u0431\u0430\u0439\u0442.<\/p>\n<p>9-15: CAN FD: \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 12\/16\/20\/24\/32\/48\/64 \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"157\" width=\"157\">\n<p>DBx<\/p>\n<\/td>\n<td>\n<p>\u0411\u0430\u0439\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439<\/h2>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e can (\u043d\u0435 fdcan) \u0441 8-\u043c\u044e \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 FDCAN1_send_msg. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 TX FIFO \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u043a\u0435\u0442.<\/p>\n<pre><code class=\"cpp\">#define CAN_STANDARD_FORMAT     0UL #define CAN_EXTENDED_FORMAT     1UL  #define DATA_FRAME              0UL #define REMOTE_FRAME            1UL  \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u0430 can_tx_message.id      = 1; can_tx_message.format  = CAN_EXTENDED_FORMAT; can_tx_message.type    = DATA_FRAME; can_tx_message.length  = 10; can_tx_message.data[0] = 20; can_tx_message.data[1] = 30; can_tx_message.data[2] = 40; can_tx_message.data[3] = 50; can_tx_message.data[4] = 60; can_tx_message.data[5] = 70; can_tx_message.data[6] = 80; can_tx_message.data[7] = 90;  void FDCAN1_send_msg (struct can_message *msg) { \tstruct can_fifo_element *fifo; \tunsigned char tx_index; \t   \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \tif ((FDCAN1-&gt;TXFQS &amp; FDCAN_TXFQS_TFQF) != 0) \t{ \t\t\/\/ \u0431\u0443\u0444\u0435\u0440 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d \t} \t   \/\/ \u0431\u0435\u0440\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \ttx_index = (FDCAN1-&gt;TXFQS &gt;&gt; 16) &amp; 0xF;    \/\/ \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0435\u0439 fifo \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \tfifo = (struct can_fifo_element *)(FDCAN_TX_FIFO_START_ADDR + tx_index * FDCAN_TX_FIFO_EL_SIZE); \t   \/\/\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 STD \u0438\u043b\u0438 EXT \tif (msg-&gt;format == CAN_STANDARD_FORMAT) \t{ \t\tfifo-&gt;word0 = (msg-&gt;id &lt;&lt; 18); \t} \telse \t{ \t\tfifo-&gt;word0 = msg-&gt;id; \t\tfifo-&gt;word0 |= 1UL &lt;&lt; 30; \/\/ extended flag \t} \t   \/\/ \u043a\u0430\u0434\u0440 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \tif (msg-&gt;type == REMOTE_FRAME) fifo-&gt;word0 |= 1UL &lt;&lt; 29; \t   \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \tfifo-&gt;word1 = (8UL &lt;&lt; 16);  \/\/Data size      \/\/ \u0434\u0430\u043d\u043d\u044b\u0435 \tfifo-&gt;word2 = (msg-&gt;data[3] &lt;&lt; 24)|(msg-&gt;data[2] &lt;&lt; 16)|(msg-&gt;data[1] &lt;&lt; 8)|msg-&gt;data[0]; \tfifo-&gt;word3 = (msg-&gt;data[7] &lt;&lt; 24)|(msg-&gt;data[6] &lt;&lt; 16)|(msg-&gt;data[5] &lt;&lt; 8)|msg-&gt;data[4];    \/\/ \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0430\u043a\u0435\u0442\u0430 \tFDCAN1-&gt;TXBAR |= (1UL &lt;&lt; tx_index);    }<\/code><\/pre>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 BxCAN, \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0435\u0442\u0443. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u0431\u0435\u0437 cubemx \u0437\u0430 \u043f\u0430\u0440\u0443 \u0432\u0435\u0447\u0435\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f. \u041f\u0440\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0436\u0438\u043c loopback, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0430\u0448 \u043a\u043e\u0434 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u0439, \u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 &#8212; \u043d\u0430 \u0441\u0430\u043c\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 can. <\/p>\n<p><a href=\"https:\/\/github.com\/Yoda49\/STM32H743IIT6-FDCAN-EXAMPLE\" rel=\"noopener noreferrer nofollow\"><strong>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435<\/strong><\/a><\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/546282\/\"> https:\/\/habr.com\/ru\/post\/546282\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c <strong>flexible data rate can<\/strong> \u043d\u0430 STM32H743 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0431\u0435\u0437 HAL \u0438 cubemx.<\/p>\n<figure class=\"bordered full-width\"><figcaption><\/figcaption><\/figure>\n<h2>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435.<\/h2>\n<p>\u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 FDCAN \u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 BOSCH \u0432 2012 \u0433\u043e\u0434\u0443. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 1 \u043c\u0431\u0438\u0442 (\u0434\u043b\u044f \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445), \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c 12 \u043c\u0431\u0438\u0442. \u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 64 \u0431\u0430\u0439\u0442. \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 can \u0438 fdcan, \u0442\u043e \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u0430 \u0441\u0442\u0430\u0440\u044b\u0435 \u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a\u0438 \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441 \u043d\u043e\u0432\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c. \u0423\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c, \u0442.\u043a. \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 fdcan \u043e\u0442 stm.<\/p>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f FDCAN.<\/h2>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 FDCAN \u043e\u0442 BxCAN \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u0445 stm32 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0431\u0443\u0444\u0435\u0440\u043e\u0432. \u0412 \u043c\u043a stm32h743 \u0434\u043b\u044f fdcan \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0440\u043e\u0432\u043d\u043e 10 \u043a\u0431\u0430\u0439\u0442 \u043e\u0431\u0449\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0434\u043b\u044f fdcan1 \u0438 fdcan2). \u042d\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0433\u0438\u0431\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u044e\u0431\u044b\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0434\u0451\u0442 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430 (\u0441\u043b\u043e\u0432\u043e): \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u0432\u0430 \u0431\u0438\u0442\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0430\u0434\u0440\u0435\u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 xxSA (\u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430) \u0441\u0434\u0432\u0438\u043d\u0443\u0442 \u043d\u0430 \u0434\u0432\u0430 \u0431\u0438\u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e. \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u043c\u043a <strong>stm32h743 <\/strong>= 0x4000AC00.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<p>1) \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 fdcan:<\/p>\n<ul>\n<li>\n<p>00: hse_ck clock is selected as FDCAN kernel clock (default after reset)<\/p>\n<\/li>\n<li>\n<p>01: pll1_q_ck clock is selected as FDCAN kernel clock<\/p>\n<\/li>\n<li>\n<p>10: pll2_q_ck clock is selected as FDCAN<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">RCC-&gt;D2CCIP1R |= RCC_D2CCIP1R_FDCANSEL_1;<\/code><\/pre>\n<p>2) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0438\u043d\u044b <strong>GPIO <\/strong>\u043d\u0430 \u043d\u0443\u0436\u043d\u0443\u044e \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 CAN, \u0442\u043e \u0438\u0449\u0435\u043c \u043f\u0438\u043d\u044b <strong>FDCANx<em>TX \/ FDCANx<\/em>RX<\/strong>. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c FDCAN, \u0442\u043e \u043f\u0438\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <strong>FDCANx_<em>TXFD_<\/em>MODE \/ FDCANx<em>RXFD<\/em>MODE<\/strong>. \u0412 \u043c\u043e\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0431\u044b\u0447\u043d\u044b\u0439 CAN \u043d\u0430 \u043f\u0438\u043d\u0430\u0445 PA11 (RX) \u0438 PA12 (TX), \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f #9. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0432\u043e\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u043d\u0430 github`e.<\/p>\n<pre><code class=\"cpp\">gpio_init (PORT_A, 11, MODE_ALT_F, TYPE_PUSH_PULL, SPEED_MAX, PULL_NO, ALTF_9); \/\/ RX gpio_init (PORT_A, 12, MODE_ALT_F, TYPE_PUSH_PULL, SPEED_MAX, PULL_NO, ALTF_9); \/\/ TX<\/code><\/pre>\n<p>3) \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c FDCAN \u043c\u043e\u0434\u0443\u043b\u0438:<\/p>\n<pre><code>RCC-&gt;APB1HENR |= RCC_APB1HENR_FDCANEN;<\/code><\/pre>\n<p>4) \u0412\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code>FDCAN1-&gt;CCCR |= FDCAN_CCCR_INIT;  while ((FDCAN1-&gt;CCCR &amp; FDCAN_CCCR_INIT) == 0) {};<\/code><\/pre>\n<p>5) \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code>FDCAN1-&gt;CCCR |= FDCAN_CCCR_CCE;<\/code><\/pre>\n<p>6) \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 CAN \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0435\u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;CCCR &amp;= ~(FDCAN_CCCR_FDOE);           FDCAN1-&gt;CCCR |= FDCAN_CCCR_DAR; \/\/ RETR OFF<\/code><\/pre>\n<p>7) \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c Loopback \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;CCCR |= FDCAN_CCCR_TEST; FDCAN1-&gt;TEST |= FDCAN_TEST_LBCK;<\/code><\/pre>\n<p>8) \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">#define FDCAN_MEM_START_ADDR          0x4000AC00UL #define FDCAN_MEM_END_ADDR            0x4000D3FFUL  unsigned long *i; for (i = (unsigned long*)FDCAN_MEM_START_ADDR; i &lt; (unsigned long*)FDCAN_MEM_END_ADDR; i++) *i = 0;<\/code><\/pre>\n<p>10) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 time quanta \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 time quanta \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 :<\/p>\n<pre><code class=\"cpp\">#define CAN_PRESCALER   6  #define CAN_SYNC_JW     2  #define CAN_SYNC_SEG    1 #define CAN_PHASE_SEG1 11  #define CAN_PHASE_SEG2  4  \/\/ nominal time quanta segments FDCAN1-&gt;NBTP  = (CAN_SYNC_JW    - 1) &lt;&lt; FDCAN_NBTP_NSJW_Pos; FDCAN1-&gt;NBTP |= (CAN_PRESCALER  - 1) &lt;&lt; FDCAN_NBTP_NBRP_Pos; FDCAN1-&gt;NBTP |= (CAN_PHASE_SEG1 - 1) &lt;&lt; FDCAN_NBTP_NTSEG1_Pos; FDCAN1-&gt;NBTP |= (CAN_PHASE_SEG2 - 1) &lt;&lt; FDCAN_NBTP_NTSEG2_Pos;  \/\/ flexible bitrate time quanta segments FDCAN1-&gt;DBTP  = (CAN_SYNC_JW    - 1) &lt;&lt; FDCAN_DBTP_DSJW_Pos; FDCAN1-&gt;DBTP |= (CAN_PRESCALER  - 1) &lt;&lt; FDCAN_DBTP_DBRP_Pos; FDCAN1-&gt;DBTP |= (CAN_PHASE_SEG1 - 1) &lt;&lt; FDCAN_DBTP_DTSEG1_Pos; FDCAN1-&gt;DBTP |= (CAN_PHASE_SEG2 - 1) &lt;&lt; FDCAN_DBTP_DTSEG2_Pos;<\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 fdcan<em> kernel clock \u0440\u0430\u0432\u043d\u043e\u0439 48 \u041c\u0413\u0446, \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 500 \u041a\u0413\u0446.<\/em><\/p>\n<p>\u041e\u0434\u0438\u043d \u0431\u0438\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 can \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (SYNC_SEG) <\/p>\n<\/li>\n<li>\n<p>C\u0435\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f (PROP_SEG)<\/p>\n<\/li>\n<li>\n<p>\u0424\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1 (PHASE_SEG1)<\/p>\n<\/li>\n<li>\n<p>\u0424\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2 (PHASE_SEG2)<\/p>\n<\/li>\n<\/ul>\n<p> \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 stm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u0421\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (SYNC_SEG):<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f PROP_SEG \u0438 PHASE_SEG1)<\/p>\n<\/li>\n<li>\n<p>\u0411\u0438\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2 (PHASE_SEG2)<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><figcaption>\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 CAN<\/figcaption><\/figure>\n<p>Time quanta &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 CAN. \u0415\u0451 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043d\u0430 fdcan kernel clock. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c Tq = 2.08333333e-8. \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u0441\u043a\u0430\u043b\u0435\u0440 \u0447\u0430\u0441\u0442\u043e\u0442\u044b. \u041c\u044b \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430\u0448\u0443 Tq \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 CAN_PRESCALER \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c Tq = 0,000000125 \u0441\u0435\u043a.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0441\u0443\u043c\u043c\u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 (1 + 14 + 4) \u043d\u0430 Tq \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c  0,000002 \u0441\u0435\u043a. <\/p>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0431\u0435\u0440\u0451\u043c \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438 \u0434\u0435\u043b\u0438\u043c \u043d\u0430 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0438\u0442\u0430. 1 \/ 0,000002 = 500 000 \u0413\u0446.<\/p>\n<p>11) \u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">FDCAN1-&gt;GFC |= FDCAN_GFC_ANFS; \/\/ Reject non-matching frames standard FDCAN1-&gt;GFC |= FDCAN_GFC_ANFE; \/\/ Reject non-matching frames extended FDCAN1-&gt;GFC |= FDCAN_GFC_RRFS; \/\/ Reject all remote frames with 11-bit standard ID FDCAN1-&gt;GFC |= FDCAN_GFC_RRFE; \/\/ Reject all remote frames with 29-bit standard ID<\/code><\/pre>\n<p>10) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0438\u0445 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/ 11-bit filters #define FDCAN_11B_FILTER_EL_CNT       0UL #define FDCAN_11B_FILTER_EL_SIZE      4UL #define FDCAN_11B_FILTER_EL_W_SIZE    (FDCAN_11B_FILTER_EL_SIZE \/ 4) #define FCCAN_11B_FILTER_START_ADDR   (FDCAN_MEM_START_ADDR) #define FDCAN_11B_FILTER_OFFSET       0UL  \/\/ 29-bit filters #define FDCAN_29B_FILTER_EL_CNT       4UL #define FDCAN_29B_FILTER_EL_SIZE      8UL  #define FDCAN_29B_FILTER_EL_W_SIZE    (FDCAN_29B_FILTER_EL_SIZE \/ 4)  #define FCCAN_29B_FILTER_START_ADDR   (FCCAN_11B_FILTER_START_ADDR + FDCAN_11B_FILTER_EL_CNT * FDCAN_11B_FILTER_EL_SIZE) #define FDCAN_29B_FILTER_OFFSET       (FDCAN_11B_FILTER_OFFSET     + FDCAN_11B_FILTER_EL_CNT * FDCAN_11B_FILTER_EL_W_SIZE)  FDCAN1-&gt;SIDFC = (FDCAN_11B_FILTER_EL_CNT &lt;&lt; FDCAN_SIDFC_LSS_Pos); \/\/ standart filter count FDCAN1-&gt;XIDFC = (FDCAN_29B_FILTER_EL_CNT &lt;&lt; FDCAN_XIDFC_LSE_Pos); \/\/ extended filter count \t FDCAN1-&gt;SIDFC |= (FDCAN_11B_FILTER_OFFSET &lt;&lt; FDCAN_SIDFC_FLSSA_Pos); \/\/ standard filter start address FDCAN1-&gt;XIDFC |= (FDCAN_29B_FILTER_OFFSET &lt;&lt; FDCAN_XIDFC_FLESA_Pos); \/\/ extended filter start address\t<\/code><\/pre>\n<p>11) \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u043e \u0447\u0451\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u0440\u0430\u0437\u043c\u0435\u0440 = 32 \u0431\u0438\u0442\u0430):<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFT<\/p>\n<\/td>\n<td>\n<p>00: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0442 SFID1 \u0434\u043e SFID2<\/p>\n<p>01: \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 SFID1 + \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 SFID2<\/p>\n<p>10: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440: SFID1 = \u0444\u0438\u043b\u044c\u0442\u0440, SFID2 = \u043c\u0430\u0441\u043a\u0430<\/p>\n<p>11: \u0424\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFEC<\/p>\n<\/td>\n<td>\n<p>000: \u0424\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>001: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 0<\/p>\n<p>010: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 1<\/p>\n<p>011: \u041e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b<\/p>\n<p>100: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442<\/p>\n<p>101: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 0<\/p>\n<p>110: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 1<\/p>\n<p>111: \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Rx \u0431\u0443\u0444\u0435\u0440 \u0438\u043b\u0438 \u043a\u0430\u043a \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f  FDCAN_SFT[1:0] \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFID1<\/p>\n<\/td>\n<td>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"74\" width=\"74\">\n<p>SFID2<\/p>\n<\/td>\n<td>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 2 \/ \u043c\u0430\u0441\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0443\u0436\u0435 \u0434\u0432\u0430 \u0441\u043b\u043e\u0432\u0430 \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430 (\u0440\u0430\u0437\u043c\u0435\u0440 = 64 \u0431\u0438\u0442\u0430):<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430<\/figcaption><\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFEC<\/p>\n<\/td>\n<td>\n<p>000: \u0424\u0438\u043b\u044c\u0442\u0440 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>001: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 0<\/p>\n<p>010: \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 FIFO 1<\/p>\n<p>011: \u041e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b<\/p>\n<p>100: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442<\/p>\n<p>101: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 0<\/p>\n<p>110: \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 FIFO 1<\/p>\n<p>111: \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Rx \u0431\u0443\u0444\u0435\u0440, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f  FDCAN_SFT[1:0] \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFTI<\/p>\n<\/td>\n<td>\n<p>00: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0442 EFID1 \u0434\u043e EFID2<\/p>\n<p>01: \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 EFID1 + \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 EFID2<\/p>\n<p>10: \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440: EFID1 = \u0444\u0438\u043b\u044c\u0442\u0440, EFID2 = \u043c\u0430\u0441\u043a\u0430<\/p>\n<p>11: \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043e\u0442 EFID1 \u0434\u043e EFID2. FDCAN_XIDAM \u043c\u0430\u0441\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFID1<\/p>\n<\/td>\n<td>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"67\" width=\"67\">\n<p>EFID2<\/p>\n<\/td>\n<td>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 2<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 XIDAM \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0441\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u041c\u041a \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0x1FFF FFFF, \u0442.\u0435. \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 fdcan \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432 \u043d\u043e\u043b\u044c, \u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u0412 \u0431\u0438\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 EFTI \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u043c\u0430\u0441\u043a\u0438.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">#define CAN_TEST_ID_0 0x01 #define CAN_TEST_ID_1 0x02  \/\/ FILTER TYPE #define FILTER_TYPE_RANGE       0UL #define FILTER_TYPE_DUAL        1UL #define FILTER_TYPE_CLASSIC     2UL #define FILTER_TYPE_DISABLE     3UL  \/* FILTER CONFIG *\/ #define FILTER_CFG_DISABLED     0UL #define FILTER_CFG_STORE_FIFO_0 1UL #define FILTER_CFG_STORE_FIFO_1 2UL #define FILTER_CFG_REJECT       3UL  unsigned long *ptr = (unsigned long*)FCCAN_29B_FILTER_START_ADDR;  *ptr++ = (FILTER_CFG_STORE_FIFO_0 &lt;&lt; 29) | (CAN_TEST_ID_0); *ptr++ = (FILTER_TYPE_DUAL        &lt;&lt; 30) | (CAN_TEST_ID_1);  \/\/ \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432.<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <strong>\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432<\/strong> \u0432 \u0434\u0432\u043e\u0439\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>12) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0451\u043c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 FIFO 0. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">\/\/ Rx FIFO 0 #define FDCAN_RX_FIFO_0_EL_CNT        10 #define FDCAN_RX_FIFO_0_HEAD_SIZE     8UL #define FDCAN_RX_FIFO_0_DATA_SIZE     8UL #define FDCAN_RX_FIFO_0_EL_SIZE       (FDCAN_RX_FIFO_0_HEAD_SIZE   + FDCAN_RX_FIFO_0_DATA_SIZE) #define FDCAN_RX_FIFO_0_EL_W_SIZE     (FDCAN_RX_FIFO_0_EL_SIZE \/ 4) #define FDCAN_RX_FIFO_0_START_ADDR    (FCCAN_29B_FILTER_START_ADDR + FDCAN_29B_FILTER_EL_CNT * FDCAN_29B_FILTER_EL_SIZE) #define FDCAN_RX_FIFO_0_OFFSET        (FDCAN_29B_FILTER_OFFSET     + FDCAN_29B_FILTER_EL_CNT * FDCAN_29B_FILTER_EL_W_SIZE)  FDCAN1-&gt;RXF0C  = FDCAN_RX_FIFO_0_OFFSET &lt;&lt; FDCAN_RXF0C_F0SA_Pos; FDCAN1-&gt;RXF0C |= FDCAN_RX_FIFO_0_EL_CNT &lt;&lt; FDCAN_RXF0C_F0S_Pos;<\/code><\/pre>\n<p>13) \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0431\u0443\u0444\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u0420\u0435\u0436\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u0430 = FIFO. \u0415\u0441\u043b\u0438 \u0440\u0435\u0436\u0438\u043c \u0443\u043a\u0430\u0437\u0430\u043d, \u043a\u0430\u043a \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c (\u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 &#8212; \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f).<\/p>\n<pre><code class=\"cpp\">\/\/ TX buffers (FIFO) #define FDCAN_TX_FIFO_EL_CNT          10UL #define FDCAN_TX_FIFO_HEAD_SIZE       8UL #define FDCAN_TX_FIFO_DATA_SIZE       8UL #define FDCAN_TX_FIFO_EL_SIZE         (FDCAN_TX_FIFO_HEAD_SIZE + FDCAN_TX_FIFO_DATA_SIZE) #define FDCAN_TX_FIFO_EL_W_SIZE    <\/code><\/pre>\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-319410","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/319410","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=319410"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/319410\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=319410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=319410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=319410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}