рдкрд░рд┐рдЪрдп
рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдПрдХ рдФрд░ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╛ рдПрд╕рдЯреАрдПрдо 32 рдкрд░ рдЗрд╕рдХреА рдкрд╣рд▓реА рдмрд╛рдзрд╛ рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ рдЙрдард╛рдП рдЧрдП рд╕рднреА рдореБрджреНрджреЛрдВ рдкрд░ рд╡реНрдпрд╛рдкрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рди рдХреЗрд╡рд▓ рдХрдИ рдкреЗрд╢реЗрд╡рд░ рдФрд░ рдРрд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдмрдирдиреЗ рдХреЗ рд╕рдкрдиреЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ), рдмрд▓реНрдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЛ рднреА рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╖рдп рдЕрдирдЧрд┐рдирдд рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдорд┐рд▓рддрд╛ рд╣реИ / рдмреНрд▓реЙрдЧ "рдПрдордХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢рд┐рдХреНрд╖рдХред"

рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛?
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдХреА рд╣реИ, рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмрд┐рдЯ рдмреИрдВрдбрд┐рдВрдЧ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рдРрд╕реА рдЬрдЧрд╣реЗрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ (рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рд▓реЗрдЦ рднреА рдорд┐рд▓рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреВрд░рдХ рдФрд░ рдЖрдзреБрдирд┐рдХреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрдВрдЧреНрд░реЗрдЬреА-рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд░реНрдиреЗрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд
(рдФрд░ рдЬреЛ рд▓реЛрдЧ рдЙрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рд╡реЗ рддреБрд░рдВрдд рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВ)рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмрд┐рдЯ рдмреИрдВрдбрд┐рдВрдЧ рд╕реНрд╡рдпрдВ рдХреЛрд░ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдкрд░рд┐рд╡рд╛рд░ рдФрд░ рдХрдВрдкрдиреА рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд░ рдЙрдкрдпреБрдХреНрдд рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ Cortex-M3 рд╣реЛрдиреЗ рджреЗрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЛрд░ рдкрд░ рд╣реА рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдорд╛рдВрдЧреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ,
рдпрд╣рд╛рдВ рдпрд╣ рд╣реИ , рдЦрдВрдб 4.2 рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдпрд╣рд╛рдБ рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рддрдХрдиреАрдХреА рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдм рдРрд╕реЗ "рдЧрдВрднреАрд░" STM32, LPC, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдХреА рдкреНрд░рд╕рд╛рд░ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдмреЗрдХрд╛рд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрд╕рдЯреАрдПрдо 32, рдПрд▓рдкреАрд╕реА рдЖрджрд┐ред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реЗрдВрд╕рд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣реИрдмрд░ рдкрд░ рднреАред рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдореИрдВ рдПрдордХреЗ рдореЗрдореЛрд░реА рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдмрд┐рдЯ рдмреИрдВрдбрд┐рдВрдЧ рдХреЗ рдлрд╛рдпрджреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд╕рдмрд╕реЗ STM32 рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореБрдЭреЗ PB0 рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
GPIOB->MODER |= GPIO_MODER_MODER0_0;
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╢реЗрд╖ рдмрд┐рдЯреНрд╕ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ тАЬORтАЭ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ 4 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ:
- рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рд░рдЬрд┐рд╕реНрдЯрд░ (RON) рдХреЗ рд▓рд┐рдП GPIOB-> MODER рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
- P1 рд╕реЗ RON рдореЗрдВ рдЗрдВрдЧрд┐рдд рдкрддреЗ рдкрд░ рдЕрдиреНрдп RON рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
- GPIO_MODER_MODER0_0 рдХреЗ рд╕рд╛рде рдЗрд╕ рдорд╛рди рдХрд╛ рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрд╕ рдпрд╛ рдмрдирд╛рдПрдВред
- рдкрд░рд┐рдгрд╛рдо GPIOB-> MODER рдкрд░ рд╡рд╛рдкрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХрд░реНрдиреЗрд▓ рдердВрдм 2 рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рд╡реЙрд▓реНрдпреВрдо рдореЗрдВ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рд░ рдЬрдЧрд╣ рд╣рдо рдЕрдиреБрдХреВрд▓рди рдУ 3 рдХреЗ рд╕реНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╡рд┐рдзрд╛рдирд╕рднрд╛ рднрд╛рд╖рд╛ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрджреНрдо рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкреАрд╕реА рдкрддреЗ рдкрд░ рдХреЛрдб рдХрд╛ рдкрддрд╛ (рдХрдиреНрд╡реЗрдпрд░ рдмреЗрд▓реНрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП) + 0x58 рдкрд╛рддреЗ рд╣реИрдВред

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдСрдкрд░реЗрд╢рди рдореЗрдВ 4 рдЪрд░рдг (рдФрд░ рдЕрдзрд┐рдХ рдШрдбрд╝реА рдЪрдХреНрд░) рдФрд░ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреЗ 14 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдкреБрд╕реНрддрдХ [2] рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рд╡реИрд╕реЗ, рд░реВрд╕реА рдореЗрдВ рднреА рд╣реИред
рд╣рдо рдмрд┐рдЯ_рдмреИрдВрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
рд╕рд╛рд░, рдХрд┐рд╕рд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬреЛ рд╣рдо рдкрд░рд┐рдзреАрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдпрд╛ рд░реИрдо рдХреЗ рдЕрдиреНрдп рдмрд┐рдЯреНрд╕ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмрд┐рдВрджреБрдУрдВ 2) рдФрд░ 3) рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ [1] рд╕реЗ рд╕реВрддреНрд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрддреЗ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рд╣рдо рдПрдХ рд╕рдорд╛рди рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд╕реЗрдВрдмрд▓рд░:

рдкреБрдирд░реНрдЧрдгрд┐рдд рдкрддрд╛:

рдпрд╣рд╛рдВ рд╣рдордиреЗ RON рдореЗрдВ рдПрдХ рд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ # 1 рдЬреЛрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА, рдкрд░рд┐рдгрд╛рдо 14 рдХреЗ рдмрдЬрд╛рдп 10 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдФрд░ рдШрдбрд╝реА рдЪрдХреНрд░ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝рд╛ рдХрдо рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЕрдВрддрд░ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ?
рдПрдХ рддрд░рдл, рдмрдЪрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 168 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдУрд╡рд░рдХреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реИ, рддреЛ рдЪрдХреНрд░реЛрдВ рдореЗрдВред рдПрдХ рдФрд╕рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЬрд┐рди рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдХреНрд░рдорд╢рдГ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ 40 - 80 рд╣реЛрдВрдЧреЗ, рдпрджрд┐ рдкрддреЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдмрдЪрдд 250 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдордХреЗ рд╕реАрдзреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ "рдЬрд╝рд╢рдХрд╛рд░" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рд╕рд╛-рдХреНрдпреВрдмреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╢рд╛рдВрдд" рд╣реИ, рддреЛ рдмрдЪрдд рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 250 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЖрдВрдХрдбрд╝рд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╡рд┐рдХреГрдд рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдореЗрдВ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд░реНрдорд╡реЗрдпрд░ рдЕрд╢реЛрднрдиреАрдп рдЖрдХрд╛рд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЬрдм рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдФрд╕рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 2 - 5% рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡реЙрд▓реНрдпреВрдо, рд╕рдХреНрд╖рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ O3 рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред
рдлрд┐рд░ рд╕реЗ, рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реБрдкрд░-рдбреБрдкрд░-рдореЗрдЧрд╛ рдХреВрд▓ рдЯреВрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд░ рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА рдПрдордХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрддрдиреЗ рдХрдо рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рднреА рд▓рд╛рдЧрдд рдореЗрдВ рдХрдЯреМрддреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ?рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ рдЬрд╣рд╛рдВ рдпрд╣ рд░реИрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рд░реИрдо рдХреЗ рд▓рд┐рдП рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, рд╕реВрддреНрд░ рд╕рдорд╛рди рд╣реИ, рдмрд╕ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдкрддреЗ рдмрджрд▓реЗрдВред рддреЛ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ?
рдХреЛрдбрд╛рдВрддрд░рдХ
рдЖрдЗрдП рдиреАрдЪреЗ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкреНрдпрд╛рд░реЗ рдЕрд╕реЗрдореНрдмрд▓рд░ рд╕реЗред
рдЕрд╕реЗрдВрдмрд▓рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░, рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП # 0 рдФрд░ # 1 рдХреЗ рддрд╣рдд 2-рдмрд╛рдЗрдЯ (рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореБрдЭреЗ рдПрдХ рдирд┐рд░рдВрддрд░ рдЖрдзрд╛рд░ рдкрд░ 2 рдмрд╛рдЗрдЯреНрд╕ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рд░рд┐рдорд╛рд░реНрдХ, рдореБрдЭреЗ рдПрд╕рдЯреАрдПрдо рдХреЗ рд▓рд┐рдП рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рд╕реАрдПрдордПрд╕рдЖрдИрдПрд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдмрд┐рдЯ рдирдВрдмрд░ рдХреЛ рддреБрд░рдВрдд рдореИрдХреНрд░реЛ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛, рди рдХрд┐ рдЗрд╕рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореВрд▓реНрдп рдкрд░ред
рдЬреАрдПрдирдпреВ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди @ . MOVW R0, 0x0000 MOVW R1, 0x0001 @ .macro PeriphBitSet PerReg, BitNum LDR R3, =(BIT_BAND_ALIAS+(((\PerReg) - BIT_BAND_REGION) * 32) + ((\BitNum) * 4)) STR R1, [R3] .endm @ .macro PeriphBitReset PerReg, BitNum LDR R3, =(BIT_BAND_ALIAS+((\PerReg - BIT_BAND_REGION) * 32) + (\BitNum * 4)) STR R0, [R3] .endm
рдЙрджрд╛рд╣рд░рдг:
рдЕрд╕реЗрдВрдмрд▓рд░ рдЙрджрд╛рд╣рд░рдг PeriphSet TIM2_CCR2, 0 PeriphBitReset USART1_SR, 5
рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдЧреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХрд╛ рдЕрдВрддрд┐рдо рднрд╛рдЧ рджрд┐рдЦрд╛рдПрдЧрд╛, рдкреНрд▓рд╕ рдпрд╣
рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рдХреЛ рднреА рдПрдВрдмреЗрд▓рд░ рдореЗрдВ рдПрдордХреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╢реВрдиреНрдп рдХреЗ рдЕрдВрдд рд╕реЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрд╕рдЖрдИ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рд╛рджрд╛ рд╕реА
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдПрдХ рд╕рд░рд▓ Sishny рд╡рд┐рдХрд▓реНрдк рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрде рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛, рдХрд╣реАрдВ рд╡рд┐рд╢рд╛рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВред рдЙрд╕ рд╕рдордп, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрд╕реЗрдВрдмрд▓рд░ рдореЗрдВ рдмрд┐рдЯ рдмреИрдВрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдЧрд▓рддреА рд╕реЗ рд╕реА рдлрд╛рдЗрд▓ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ, рдпрд╣ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░ рдЧрдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕рд╛рджреЗ рд╕реА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди #define MASK_TO_BIT31(A) (A==0x80000000)? 31 : 0 #define MASK_TO_BIT30(A) (A==0x40000000)? 30 : MASK_TO_BIT31(A) #define MASK_TO_BIT29(A) (A==0x20000000)? 29 : MASK_TO_BIT30(A) #define MASK_TO_BIT28(A) (A==0x10000000)? 28 : MASK_TO_BIT29(A) #define MASK_TO_BIT27(A) (A==0x08000000)? 27 : MASK_TO_BIT28(A) #define MASK_TO_BIT26(A) (A==0x04000000)? 26 : MASK_TO_BIT27(A) #define MASK_TO_BIT25(A) (A==0x02000000)? 25 : MASK_TO_BIT26(A) #define MASK_TO_BIT24(A) (A==0x01000000)? 24 : MASK_TO_BIT25(A) #define MASK_TO_BIT23(A) (A==0x00800000)? 23 : MASK_TO_BIT24(A) #define MASK_TO_BIT22(A) (A==0x00400000)? 22 : MASK_TO_BIT23(A) #define MASK_TO_BIT21(A) (A==0x00200000)? 21 : MASK_TO_BIT22(A) #define MASK_TO_BIT20(A) (A==0x00100000)? 20 : MASK_TO_BIT21(A) #define MASK_TO_BIT19(A) (A==0x00080000)? 19 : MASK_TO_BIT20(A) #define MASK_TO_BIT18(A) (A==0x00040000)? 18 : MASK_TO_BIT19(A) #define MASK_TO_BIT17(A) (A==0x00020000)? 17 : MASK_TO_BIT18(A) #define MASK_TO_BIT16(A) (A==0x00010000)? 16 : MASK_TO_BIT17(A) #define MASK_TO_BIT15(A) (A==0x00008000)? 15 : MASK_TO_BIT16(A) #define MASK_TO_BIT14(A) (A==0x00004000)? 14 : MASK_TO_BIT15(A) #define MASK_TO_BIT13(A) (A==0x00002000)? 13 : MASK_TO_BIT14(A) #define MASK_TO_BIT12(A) (A==0x00001000)? 12 : MASK_TO_BIT13(A) #define MASK_TO_BIT11(A) (A==0x00000800)? 11 : MASK_TO_BIT12(A) #define MASK_TO_BIT10(A) (A==0x00000400)? 10 : MASK_TO_BIT11(A) #define MASK_TO_BIT09(A) (A==0x00000200)? 9 : MASK_TO_BIT10(A) #define MASK_TO_BIT08(A) (A==0x00000100)? 8 : MASK_TO_BIT09(A) #define MASK_TO_BIT07(A) (A==0x00000080)? 7 : MASK_TO_BIT08(A) #define MASK_TO_BIT06(A) (A==0x00000040)? 6 : MASK_TO_BIT07(A) #define MASK_TO_BIT05(A) (A==0x00000020)? 5 : MASK_TO_BIT06(A) #define MASK_TO_BIT04(A) (A==0x00000010)? 4 : MASK_TO_BIT05(A) #define MASK_TO_BIT03(A) (A==0x00000008)? 3 : MASK_TO_BIT04(A) #define MASK_TO_BIT02(A) (A==0x00000004)? 2 : MASK_TO_BIT03(A) #define MASK_TO_BIT01(A) (A==0x00000002)? 1 : MASK_TO_BIT02(A) #define MASK_TO_BIT(A) (A==0x00000001)? 0 : MASK_TO_BIT01(A) #define BIT_BAND_PER(reg, reg_val) (*(volatile uint32_t*)(PERIPH_BB_BASE+32*((uint32_t)(&(reg))-PERIPH_BASE)+4*((uint32_t)(MASK_TO_BIT(reg_val)))))
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдФрд░ рд╕реАрдзрд╛ рдХреЛрдбред рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдХрд╛рдо рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реАрдПрдордПрд╕рдЖрдИрдПрд╕ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬреЛ рдПрдХ рдЕрд╕реЗрдВрдмрд▓рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдерд╛ред
рдЕрд░реЗ рд╣рд╛рдБ, рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рд╕рд╛рджреЗ рд╕реА рдХреЗ рдЙрджрд╛рд╣рд░рдг BIT_BAND_PER(GPIOB->MODER, GPIO_MODER_MODER0_0) = 0;
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдзреБрдирд┐рдХ (рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░, рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд▓рдЧрднрдЧ 2015 рд╕реЗ) рд░реБрдЭрд╛рди рд╕реА рдХреЗ рд╕рд╛рде рд╕реА рдХреА рдЬрдЧрд╣ рд▓реЗрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИрдВ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдордХреЗ рдХреЗ рд▓рд┐рдП рднреАред рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЬрдиреНрдо рд╣реЛрдирд╛ рддрдп рдерд╛ред
Cpp03
рдпрд╣рд╛рдВ, рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЧреБрдЯ рдХреЗ рдПрдХ рд╣реИрдХрдиреЗрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рдЙрдкрдХрд░рдг рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред
рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдереЛрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЖрджрд░реНрд╢ рд╣реИ (рд╕реАрдПрдордПрд╕рдЖрдИрдПрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓реНрдп рд╣реИрдВ), рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛:
C ++ 03 рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди template<uint32_t val, uint32_t comp_val, uint32_t cur_bit_num> struct bit_num_from_value { enum { bit_num = (val == comp_val) ? cur_bit_num : bit_num_from_value<val, 2 * comp_val, cur_bit_num + 1>::bit_num }; }; template<uint32_t val> struct bit_num_from_value<val, static_cast<uint32_t>(0x80000000), static_cast<uint32_t>(31)> { enum { bit_num = 31 }; }; #define BIT_BAND_PER(reg, reg_val) *(reinterpret_cast<volatile uint32_t *>(PERIPH_BB_BASE + 32 * (reinterpret_cast<uint32_t>(&(reg)) - PERIPH_BASE) + 4 * (bit_num_from_value<static_cast<uint32_t>(reg_val), static_cast<uint32_t>(0x01), static_cast<uint32_t>(0)>::bit_num)))
рдЖрдк рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
C ++ 03 рдХреЗ рдЙрджрд╛рд╣рд░рдг BIT_BAND_PER(GPIOB->MODER, GPIO_MODER_MODER0_0) = false;
рдФрд░ рдореИрдХреНрд░реЛ рдХреНрдпреЛрдВ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реАрдХреЗ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рди рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рди рд╣реА рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рди рдРрд╕реА рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рдБ, рдФрд░ рдпрд╣рд╛рдБ рдореИрдХреНрд░реЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐
рдЕрдиреБрд░реВрдкрддрд╛рд╡рд╛рджреА рдЗрд╕реЗ "рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ" рдорд╛рдирддрд╛ рд╣реИред
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рд╕рдордп рдЕрднреА рднреА рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реБрдЖ, рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдиреЗ рддреЗрдЬреА рд╕реЗ C ++ 14 / C ++ 17 рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рдХреНрдпреЛрдВ рди рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
Cpp14 / cpp17
C ++ 14 рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди constexpr uint32_t bit_num_from_value_cpp14(uint32_t val, uint32_t comp_val, uint32_t bit_num) { return bit_num = (val == comp_val) ? bit_num : bit_num_from_value_cpp14(val, 2 * comp_val, bit_num + 1); } #define BIT_BAND_PER(reg, reg_val) *(reinterpret_cast<volatile uint32_t *>(PERIPH_BB_BASE + 32 * (reinterpret_cast<uint32_t>(&(reg)) - PERIPH_BASE) + 4 * (bit_num_from_value_cpp14(static_cast<uint32_t>(reg_val), static_cast<uint32_t>(0x01), static_cast<uint32_t>(0)))))
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдХреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдЬреЛ рдХрд┐, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдорд╛рдирд╡ рдЖрдВрдЦ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИред
рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡реИрд╕реЗ, C ++ 17 рдореЗрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдкреБрдирд░рд╛рд╡рд░реНрддреА рд▓рдВрдмреЛ рдХреЙрдиреНрд╕реНрдЯреИрдХреНрд╕рдкреНрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕рд░рд▓реАрдХрд░рдг рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдСрд░реНрдбрд░ рдХреЛ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ, рд╕рднреА рддреАрди рд╕реА / рд╕реАрдкреАрдкреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереНрдпреЛрд░реА рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рд╣реА рд╕реЗрдЯ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ IAR ARM 8.30 рдФрд░ gcc 7.2.0 рдкрд░ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВредрдЕрднреНрдпрд╛рд╕ рдПрдХ рдХреБрддрд┐рдпрд╛ рд╣реИ
рдпрд╣ рд╕рдм, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣реБрдЖред рдореЗрдореЛрд░реА рдмрдЪрдд рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ред рдпрд╣рд╛рдБ рдирд╣реАрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдорд╛рдорд▓рд╛ рдерд╛ред рдФрд░ рдпрд╣ рдХрдм рдЕрд▓рдЧ рдерд╛?
рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрддрд╛, рддреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрддрд╛, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрдмреНрдЬрд╛ рдХреА рдЧрдИ рдорд╛рддреНрд░рд╛ рдХрд┐рддрдиреА рдХрдо рд╣реИред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдкрд░ рдПрдХ рдореБрдЦреМрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрд╛ред рдкрд░рд┐рдгрд╛рдо рдЕрдкреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╣реИрд░рд╛рди рдХрд░ рдЧрдпрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╡реЙрд▓реНрдпреВрдо рд▓рдЧрднрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЪреБрдирд╛ рдЬрд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ 40-50 рдРрд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо 100 рдмрд╛рдЗрдЯреНрд╕, рдФрд░ рдЕрдзрд┐рдХрддрдо 200 рдмрд╛рдЗрдЯреНрд╕ рдмрдЪрд╛рдиреЗ рдереЗред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЕрдВрддрд░ 24 - 32 рдмрд╛рдЗрдЯреНрд╕ рдирд┐рдХрд▓рд╛ред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ?
рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдЖрдк рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рдЧрднрдЧ 5-10 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рдХрдВрдкрд╛рдЗрд▓рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЙрдирдХреЗ рд╕рд╛рде рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЭреЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдБ рдореЗрд░реА рдЕрдЯрдХрд▓реЗрдВ рд╣реИрдВ):
- рдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрддрдирд╛ рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рдХреИрд╕реЗ рд╣реЛрдЧрд╛
- рдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрднреА рднреА рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдЕрдзрд┐рдХ рдЪрд╛рд▓рд╛рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬрдм рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЦреБрдж рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИ
рдпрд╣реА рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ "рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп" рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдХрдЯрддрд╛ рдореЗрдВ рд╕рдорд╛рди рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рд╣реИрдВред
рд╕рдВрдпреЛрдЧ рд╕реЗ, O0 рд╕реНрддрд░ рдкрд░, рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрднрд┐рд╕рд░рдг рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рд╕реНрддрд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИред
рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реВрдВ
рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рднреА рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЕрдкрдиреЗ рд▓рд┐рдП рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗрдЧрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ рдФрд░ рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕рдореНрдорд╛рди рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдВрдд рддрдХ рдкрдврд╝рд╛ рд╣реИред
рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА
- "рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо 3 рддрдХрдиреАрдХреА рд╕рдВрджрд░реНрдн рдореИрдиреБрдЕрд▓", рдзрд╛рд░рд╛ 4.2, рдПрдЖрд░рдПрдо 2005ред
- рдПрдЖрд░рдПрдо рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдПрдо 3, рдЬреЛрд╕реЗрдл рдпрд┐рдпреВ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдЧрд╛рдЗрдбред
рдкреА рдПрд╕ рдореИрдВ рдЕрдкрдиреЗ рдмреИрдЧ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╡рд░реЗрдЬ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ред
рдХрд┐рд╕реА рддрд░рд╣ рдкреАрдкреАрдПрд╕ рдХреЛрдб рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдврд╝рд╛ рд╣реЛ рдЧрдпрд╛, рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рд╕реБрдзрд╛рд░ рдХреИрд╕реЗ рдХрд░реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдиреЛрдЯрдкреИрдб рдХреЗ рдмреНрдпрд╛рдЬ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЕрдкреНрд░рд┐рдп рднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдпреБрдкреАрдбреА:
рдкрд╛рдардХреЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рдореИрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмрд┐рдЯ рдмреИрдВрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рд╕реНрд╡рдпрдВ рдкрд░рдорд╛рдгреБ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред