FDCAN рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ рдЬреЛ рдирд╣реАрдВ рд╣реИ

рд╣рдореЗрд╢рд╛ CAN рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рд░рд▓ рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ (KDPV рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ) ...

рдЫрд╡рд┐

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВ рдЕрдХреНрд╕рд░ STM32H750VB рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдореБрдЭреЗ CAN рдмрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЛ рдПрдХ рдЕрдЬреАрдм рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ ред рдХрд╣рд╛рдиреА рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИред

рддреЛ, рдкрд╣рд▓реЗ рд╕рд░реНрдХрд┐рдЯрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред KDPV рдкрд░ рдпрд╣ рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рдкрд░рд┐рдЪрд╛рд▓рд┐рдд рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдкрд░рд╛рдзреА рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИ, CAN рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ

рдЫрд╡рд┐

MAX3051 рдХреЛ рднреМрддрд┐рдХ рдкрд░рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ ..), рдЗрд╕ рддрд░рд╣ рд╕реЗ:

рдЫрд╡рд┐

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, STM32H750VB рдХреЗ рдмрдЬрд╛рдп, STM32F107 рдПрдХ рд╣реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдерд╛, рд▓реЗрдХрд┐рди рдмреВрдврд╝рд╛ рд╡реНрдпрдХреНрддрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рдФрд░ рдпреБрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдмреБрд░рд╛ рднрд╛рдЧреНрдп рд╣реИ - рдкреБрд░рд╛рдиреЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ bxCAN рдерд╛, рдФрд░ рдирдП рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА FDCAN рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорддрднреЗрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ (рдФрд░ рдХрд╛рдо - рдмрд╕ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ): рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╣ рдерд╛рдмрди рдЧрдпрд╛ рд╣реИ
  MX_CAN1_Init (); 
  MX_FDCAN1_Init (); 
     hcan1.Instance = CAN1;
     hcan1.Init.Prescaler = 4;
     hcan1.Init.Mode = CAN_MODE_NORMAL;
     hcan1.Init.SyncJumpWidth = CAN_SJW_4TQ;
     hcan1.Init.TimeSeg1 = CAN_BS1_15TQ;
     hcan1.Init.TimeSeg2 = CAN_BS2_2TQ;
     hcan1.Init.TimeTriggeredMode = DISABLE;
     hcan1.Init.AutoBusOff = рд╕рдХреНрд╖рдо;
     hcan1.Init.AutoWakeUp = DISABLE;
     hcan1.Init.AutoRetransmission = DISABLE;
     hcan1.Init.ReceiveFifoLocked = DISABLE;
     hcan1.Init.TransmitFifoPriority = DISABLE; 
   hfdcan1.Instance = FDCAN1;
   hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_NO_BRS;
   hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
   hfdcan1.Init.AutoRetransmission = рд╕рдХреНрд╖рдо;
   hfdcan1.Init.TransmitPause = DISABLE;
   hfdcan1.Init.ProtocolException = рд╕рдХреНрд╖рдо;
   hfdcan1.Init.NominalPrescaler = 1;
   hfdcan1.Init.NominalSyncJumpWidth = 3;
   hfdcan1.Init.NominalTimeSeg1 = 11;
   hfdcan1.Init.NominalTimeSeg2 = 4;
   hfdcan1.Init.DataPrescaler = 1;
   hfdcan1.Init.DataSyncJumpWidth = 3;
   hfdcan1.Init.DataTimeSeg1 = 11;
   hfdcan1.Init.DataTimeSeg2 = 4;
   hfdcan1.Init.MessageRAMOffset = 64;
   hfdcan1.Init.StdFiltersNbr = 0;
   hfdcan1.Init.ExtFiltersNbr = 0;
   hfdcan1.Init.RxFifo0ElmtsNbr = 4;
   hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES8;
   hfdcan1.Init.RxFifo1ElmtsNbr = 4;
   hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
   hfdcan1.Init.RxBuffersNbr = 4;
   hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
   hfdcan1.Init.TxEventsNbr = 4;
  рдЕрдЧрд░ (HAL_CAN_Init (& hcan1)! = HAL_OK) { 
  рдЕрдЧрд░ (HAL_FDCAN_Start (& hfdcan1)! = HAL_OK) { 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЙрд╕реНрдореЗрдЯрд┐рдХ рдЕрдВрддрд░ред рдФрд░ рдпрд╣ рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╛рд░ рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ ...

рдХреИрди рдХрдВрдЯреНрд░реЛрд▓рд░ рдПрдХ рдкреНрд░рдореБрдЦ рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдФрд░ рдПрдХ рдмрд╕-рдСрдл рд░рд╛рдЬреНрдп рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛, рдФрд░ рдмрд╕ рд╕реЗ рдХреЛрдИ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ (рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдмрд╕ рдкрд░ рдПрдХ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗ рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рджреЛ рдмрд╛рд░ рднреЗрдЬрд╛)ред

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдбрд┐рдмрдЧрд┐рдВрдЧ рд▓рд╛рдЗрди рдЖ рдЧрдИ, рдФрд░ рдХреИрди-рдЖрд░рдПрдХреНрд╕ рдФрд░ рдХреИрди-TX рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рд╡рд╛рдпрд░рд┐рдВрдЧ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рддрд╛рд░реНрдХрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рдбрд┐рд╡рд╛рдЗрд╕ рдЪреБрдк рдерд╛, рдФрд░ рдХрдиреЗрдХреНрдЯреЗрдб рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗ рдкреИрдХреЗрдЯ рднреЗрдЬрд╛ , рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╣рдордд рдерд╛ )ред

рдЙрд╕рдХреЗ рдмрд╛рдж, FDCAN_MODE_BUS_MONITORING рдореЛрдб рдкрд╣рд▓реА рдмрд╛рд░ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░, рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛, рдореИрдВ рддреБрд░рдВрдд рдмрд╕ рд╕реЗ рд╕рдВрдХреБрд▓ рджреЗрдЦрд╛! (рдЗрд╕ рдореЛрдб рдореЗрдВ, CAN рдирд┐рдпрдВрддреНрд░рдХ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╕рдВрдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдЗрддрдирд╛ рдорд╣рд╛рди ...

рддрдм FDCAN_MODE_EXTERNAL_LOOPBACK рдореЛрдб рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЗрд╕ рдореЛрдб рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдХреЗрд╡рд▓ рдЦреБрдж рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо рдмрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ)ред рдФрд░ CAN_RX рдФрд░ CAN_TX рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рд╕рднреА рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдП - рджреЛрдиреЛрдВ рдбрд┐рд╡рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдпрдВ рднреЗрдЬреЗ рдЧрдП рдФрд░ рдмрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП, рдпрд╣рд╛рдБ рдкрд░
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ (рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░, рдирд╛рд░рдВрдЧреА рдбреЗрдЯрд╛ рд▓рд╛рдЗрди рдЖрд░рдПрдХреНрд╕ рд╕реЗ рдЧреНрд░реЗ рдбреЗрдЯрд╛ TX) рд╡реЗ рдЪреЛрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

рдЫрд╡рд┐

рддреЛ, рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╕рд░реНрдХрд┐рдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ CAN рдирд┐рдпрдВрддреНрд░рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рднреА рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдирд┐рдпрдВрддреНрд░рдг рд░рдЬрд┐рд╕реНрдЯрд░ (FDCAN рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрдЯреЗрдЯрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ (FDCAN_PSR)) LEC [2: 0] = 5 - рдЬреЛ рдХрд┐ рдбреЗрдЯрд╛рд╢реАрдЯ Bit0Error рд╕реЗ рдЕрднрд┐рдкреНрд░рд╛рдп рд╣реИ, рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмрд╕-рдСрдл рд╣реЛ рдЧрдпрд╛ред рд╕рдВрджреЗрд╢ рдХрд╛ рд╕рдВрдЪрд░рдг (рдпрд╛ рдмрд┐рдЯ рдпрд╛ рд╕рдХреНрд░рд┐рдп рддреНрд░реБрдЯрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ)
рдзреНрд╡рдЬ, рдпрд╛ рдЕрдзрд┐рднрд╛рд░ рдзреНрд╡рдЬ), рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рдкреНрд░рдореБрдЦ рд╕реНрддрд░ (рдбреЗрдЯрд╛ рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрд┐рдЯ) рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛
рддрд╛рд░реНрдХрд┐рдХ рдорд╛рди 0), рд▓реЗрдХрд┐рди рдореЙрдирд┐рдЯрд░ рдХрд┐рдП рдЧрдП рдмрд╕ рдХрд╛ рдореВрд▓реНрдп рдкреБрдирд░рд╛рд╡рд░реНрддреА рдерд╛ ...

рджреЛ рджрд┐рдиреЛрдВ рдХреА рдкреАрдбрд╝рд╛ рдХреЗ рдмрд╛рдж (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЧрд▓рддреА рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП) рдФрд░ рдбреЗрдЯрд╛рд╢реАрдЯ, рдЗрд░реЗрдЯрд╛ рдФрд░ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдХреЛрдб рдФрд░ рдореИрдиреБрдЕрд▓ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рдПрдХ рдЬреНрдЮрд╛рдирдкреВрд░реНрдг рдЕрдзреНрдпрдпрди рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдерд╛ - рдореИрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ!

рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рд╢рд╛рдпрдж рдорд╛рдорд▓рд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдореЗрдВ рд╣реИ, рдФрд░ ... рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдЦреБрдж рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ (рдЙрд╕реА рдмреИрдЪ рд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде)ред рдФрд░ ... рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рдареАрдХ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рддрдВрдмреВ рдЧрд╛рдбрд╝рдХрд░ , рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЪрд╛рд▓рд╛рдХ рдирдореВрдирд╛ рднрд░ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдлрдбреАрд╕реАрдПрдПрди рдХреЗ рдХрд╛рдо рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЙрддрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬрд┐рд╕реЗ рдкреНрд▓рд╕рд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ minuses рдХреЗ рд▓рд┐рдП ... рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЦреЛрдП рд╣реБрдП рд╕рдордп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛) рдФрд░ рдпрд╣ рд╕рдордЭ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдирд┐рдпрдВрддреНрд░рдХ рднрдпрд╛рдирдХ рдмрд▓ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА рд╣реИрдВ (рдпрд╛ рдпрд╣ рднреА рдПрдХ рдкреНрд▓рд╕ рд╣реИ?)ред

Source: https://habr.com/ru/post/hi483590/


All Articles