STM8L051F3 рдХреЗ рд▓рд┐рдП C ++ рдбреНрд░рд╛рдЗрд╡рд░

рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ



рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╡реА рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдпрд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдбрд┐рдмрдЧ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд▓реЗрдЦрди рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ 50% рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдПрдХ рдирдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдореМрдЬреВрджрд╛ рдХреЛрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╣реЛ рд╕рдХрддреА рд╣реИред рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдирд░реНрд╡рд╕ рд░реВрдЯреАрди рдмрди рдЬрд╛рддрд╛ рд╣реИред рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрддреЗ рд╕рдордп рд╣рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВрдЧреЗ:



  1. рдЪрд╛рд▓рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЕрднрд╛рд╡ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЛ рдЪрд╛рд▓рдХ рджреНрд╡рд╛рд░рд╛ рдмреЗрд╣рддрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдбреАрдмрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

  2. рдЪрд╛рд▓рдХ рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЕрднрд╛рд╡ред рдпрд╣реА рд╣реИ, рдЪрд╛рд▓рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрдо рд╕реЗ рдХрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЖрдкрдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдХреЛрдб рдХреЛ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдпрд╛ рдиреНрдпреВрдирддрдо рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

  3. рдЪрд╛рд▓рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рджрдХреНрд╖рддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ред

  4. рдЗрд╖реНрдЯрддрдо рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧред





рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦрддреНрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ C ++ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рджреЛ UART рдФрд░ DMA рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдХрд╛рд░реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛:



  1. рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕рдВрд░рдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ C ++ рдХреНрд▓рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЖрдкрдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдпрджрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрди UART рдФрд░ рдЪрд╛рд░ DMA рдЪреИрдирд▓ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ UART рдХреЗ рд▓рд┐рдП рддреАрди рдбреНрд░рд╛рдЗрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ DMA рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗрд╡рд▓ рдПрдХ UART рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд UART рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред

  2. рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдкрд╛рд╕ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ STM8L051F3 рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛, рдФрд░ рдлрд┐рд░, рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдореИрдВ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╕рдордп рдХреЗ рд╕рд╛рде рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЗрд╖реНрдЯрддрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  3. рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХреБрд╢рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдФрд░ рдХрдмреНрдЬреЗ рд╡рд╛рд▓реА рдореЗрдореЛрд░реА рдХреА рдорд╛рддреНрд░рд╛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реАрдзреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реБрдП рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЧреМрд░рддрд▓рдм рд╣реИ рдХрд┐ C ++ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред C ++ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рд╡реЗрд╢ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдбреЗрд░реАрдлреЗрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдбреНрд░рд╛рдЗрд╡рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рднреА рд╣реИред рдЗрдирд▓рд╛рдЗрди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ ... рдЪреВрдВрдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдПрдХ рдмрд╛рд░ рдпрд╛ рдзреАрдореА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред





рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ



рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреАрдПрдордП рдЪрд╛рд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдбреАрдПрдордП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд░реИрдо рдХреЛ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдпреВрдПрдЖрд░рдЯреА рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдпреВрдПрдЖрд░рдЯреА рд╕реЗ рд░реИрдо рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред



#include "iostm8l051f3.h" #include "Driver_DMA.hpp" char UartBuffer[128]; //    DMA DriverDMA<EnumDMA::DMA1,EnumDMA::CHANNEL1> DMAChannelTX; // DMA1  1 DriverDMA<EnumDMA::DMA1,EnumDMA::CHANNEL2> DMAChannelRX; // DMA1  2 void func() { DMAChannelTX.global_disable(); //    //    DMA DMAChannelTX.set_periph_addr(&USART1_DR); //    DMAChannelTX.set_memory0_addr(UartBuffer); //     DMAChannelTX = EnumDMA::DATABLOCK_8bit; //  - DMAChannelTX = EnumDMA::PRIORITY_MEDIUM; //   DMAChannelTX = EnumDMA::MEMPNT_INCREMENT; //     DMAChannelTX = EnumDMA::MEMORY_TO_PHERIPH; //       UART DMAChannelTX = EnumDMA::CIRCULAR_DISABLE; //    //    DMA DMAChannelRX.set_periph_addr(&USART1_DR); DMAChannelRX.set_memory0_addr(UartBuffer); DMAChannelRX = EnumDMA::DATABLOCK_8bit; DMAChannelRX = EnumDMA::PRIORITY_MEDIUM; DMAChannelRX = EnumDMA::MEMPNT_INCREMENT; DMAChannelRX = EnumDMA::PHERIPH_TO_MEMORY; //     UART   DMAChannelRX = EnumDMA::CIRCULAR_DISABLE; DMAChannelRX.set_number_of_transfers(sizeof(UartBuffer)); DMAChannelRX.channel_enable(); //    DMAChannelTX.global_enable(); //    }
      
      







рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп, рдкрдардиреАрдп рдФрд░ рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдмрди рдЬрд╛рддрд╛ рд╣реИред



рдбреНрд░рд╛рдЗрд╡рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ EnumDMA рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЧрдгрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред



 struct EnumDMA { enum DMASel{ DMA1 = 0x5070 }; enum ChannelSel{ CHANNEL0 = 0x05, CHANNEL1 = 0x0F, CHANNEL2 = 0x19, CHANNEL3 = 0x23 }; enum DataBlock{ DATABLOCK_8bit, DATABLOCK_16bit }; enum ChannelPriority{ PRIORITY_LOW, PRIORITY_MEDIUM, PRIORITY_HIGH, PRIORITY_VERYHIGH }; enum MemoryPointerMode{ MEMPNT_DECREMENT, MEMPNT_INCREMENT }; enum CircularBufferMode{ CIRCULAR_DISABLE, CIRCULAR_ENABLE }; enum TransferType{ //    3 TRANS_TYPE_PHERIPH_TO_MEMORY, TRANS_TYPE_MEMORY0_TO_MEMORY1 }; enum TransferDirection{ PHERIPH_TO_MEMORY, MEMORY_TO_PHERIPH }; enum InterruptSelection{ INTERRUPT_HALF_TRANSACTION_COMPLETE, INTERRUPT_TRANSACTION_COMPLETE }; enum InterruptVectors{ VECTOR_DMA1_CHANNEL0_HALF_TRANSACTION_COMPLETE = DMA1_CH0_HT_vector, VECTOR_DMA1_CHANNEL0_TRANSACTION_COMPLETE = DMA1_CH0_TC_vector, VECTOR_DMA1_CHANNEL1_HALF_TRANSACTION_COMPLETE = DMA1_CH1_HT_vector, VECTOR_DMA1_CHANNEL1_TRANSACTION_COMPLETE = DMA1_CH1_TC_vector, VECTOR_DMA1_CHANNEL2_HALF_TRANSACTION_COMPLETE = DMA1_CH2_HT_vector, VECTOR_DMA1_CHANNEL2_TRANSACTION_COMPLETE = DMA1_CH2_TC_vector, VECTOR_DMA1_CHANNEL3_HALF_TRANSACTION_COMPLETE = DMA1_CH3_HT_vector, VECTOR_DMA1_CHANNEL3_TRANSACTION_COMPLETE = DMA1_CH3_TC_vector, }; };
      
      







DMASel рдЧрдгрди рдЖрдкрдХреЛ DMA рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ ChannelSel рдЧрдгрди DMA рдЪреИрдирд▓реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдореЛрд░реА рдСрдлрд╕реЗрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред STM8L051F3 рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдПрдХ рдбреАрдПрдордП рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдмрдврд╝рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИред DMA1 рдЧрдгрди рдХреЛ DMA1 рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрддрд╛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред

DriverDMA рд╡рд░реНрдЧ рдбрд┐рдЬрд╛рдЗрди:



 template <EnumDMA::DMASel DMA, EnumDMA::ChannelSel DMAChannel> class DriverDMA { private: ... struct DMA_struct //   DMA     { volatile GCSR_REG GCSR; /*!< Global configuration and status register */ volatile GIR_REG GIR1; /*!< Global interrupt register 1 */ }; ... struct DMA_Channel_struct //    DMA { volatile CCR_REG CCR; /*!< CHx Control register */ volatile CSPR_REG CSPR; /*!< CHx Status & Priority register */ volatile unsigned char CNDTR; /*!< CHx Number of Bytes to Tranfer register */ volatile unsigned char CPARH; /*!< Peripheral Address High register */ volatile unsigned char CPARL; /*!< Peripheral Address Low register */ volatile unsigned char CM0EAR; /*!< Memory 0 Extended Address register (for channel3)*/ volatile unsigned char CM0ARH; /*!< Memory 0 Address High register */ volatile unsigned char CM0ARL; /*!< Memory 0 Address Low register */ }; u8 number_of_transfers; u8 NumChannel; public: DriverDMA(); void operator= (EnumDMA::DataBlock); void operator= (EnumDMA::ChannelPriority); void operator= (EnumDMA::MemoryPointerMode); void operator= (EnumDMA::CircularBufferMode); void operator= (EnumDMA::TransferDirection); void operator= (EnumDMA::TransferType); //    3 void global_enable(); void global_disable(); void channel_enable(); void channel_disable(); void set_number_of_transfers(const u16 trans_num); void set_periph_addr(u8 volatile* addr); void set_memory0_addr(u8* addr); //    00000  01FFF void set_memory1_addr(u8* addr); //    3 bool is_busy(); u16 get_amount_of_last_transation(); void interrupt_enable(EnumDMA::InterruptSelection); void interrupt_disable(EnumDMA::InterruptSelection); void interrupt_clear_pending_flag(EnumDMA::InterruptSelection); };
      
      







рдбреАрдПрдордП рдореЙрдбреНрдпреВрд▓ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдирд┐рдЬреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реА ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдбреАрдПрдордП рдореЙрдбреНрдпреВрд▓ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдЪреИрдирд▓ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг



рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:



 //---------------------------------------------------------------------------------------------- template <EnumDMA::DMASel DMA, EnumDMA::ChannelSel DMAChannel> DriverDMA<DMA,DMAChannel>::DriverDMA() { CLK_PCKENR2_bit.PCKEN24 = 1; // DMA clock enable __DMA->GCSR.bit.TO = 31; NumChannel = (u8)DMAChannel; } //---------------------------------------------------------------------------------------------- template <EnumDMA::DMASel DMA, EnumDMA::ChannelSel DMAChannel> void DriverDMA<DMA,DMAChannel>::operator= (EnumDMA::DataBlock db) { __DMACHANNEL->CSPR.bit.TSIZE = db; } //---------------------------------------------------------------------------------------------- template <EnumDMA::DMASel DMA, EnumDMA::ChannelSel DMAChannel> void DriverDMA<DMA,DMAChannel>::global_enable() { __DMA->GCSR.bit.GEN = 1; // Global enable of DMA1 }
      
      





рдЬрд╣рд╛рдВ __DMA рдФрд░ __DMACHANNEL рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 #define __DMA ((DMA_struct*) DMA) #define __DMACHANNEL ((DMA_Channel_struct*) ((u32)DMA + (u32)DMAChannel))
      
      





рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдПрдХ рдЬрдЯрд┐рд▓ рдбрд┐рдЬрд╛рдЗрди:

 __DMACHANNEL->CSPR.bit.TSIZE = db;
      
      





рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ 3 рдХреЛрдбрд╛рдВрддрд░рдХ рдХрдорд╛рдВрдб рдФрд░ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ:

 __DMA->GCSR.bit.GEN = 1;
      
      





рдПрдХ рдЕрд╕реЗрдВрдмрд▓рд░ рдХрдорд╛рдВрдб рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рддрд╛ рд╣реИред



рдмреАрдЪ рдореЗрдВ рдЖрддрд╛ рд╣реИ



рдПрдХ рд░реБрдХрд╛рд╡рдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдПрдХ рдмрд╛рдзрд╛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдПрдордП рд▓реЗрди-рджреЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рдмрдирд╛рдПрдВ:

 void func() { //      DMAChannelTX.interrupt_enable(EnumDMA::INTERRUPT_TRANSACTION_COMPLETE) } #pragma vector = EnumDMA::VECTOR_DMA1_CHANNEL1_TRANSACTION_COMPLETE __interrupt void DMA_transaction_complete() { //    DMAChannelTX.interrupt_clear_pending_flag(EnumDMA::INTERRUPT_TRANSACTION_COMPLETE) }
      
      







рдПрдХ DMA рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UART рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛



UART рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рднреА рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди C ++ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ UART рдореЙрдбреНрдпреВрд▓ рд╣реИред UART рдбреНрд░рд╛рдЗрд╡рд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ DMA рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреАрдПрдордП рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдирд┐рдЬреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдбреАрдПрдордП рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ:



 class DriverUART { private: ... u8 UartBuffer[128]; DriverDMA<EnumDMA::DMA1,EnumDMA::CHANNEL1> DMAChannelTX; DriverDMA<EnumDMA::DMA1,EnumDMA::CHANNEL2> DMAChannelRX; ...
      
      







UMA рдбреНрд░рд╛рдЗрд╡рд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ DMA рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк UART рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ DMA рдбреНрд░рд╛рдЗрд╡рд░ рддреБрд░рдВрдд рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ред



 //----------------------------------------------------------------------- // Main DriverUART Constructor //----------------------------------------------------------------------- DriverUART::DriverUART(SELECTUART uart, u32 baud_rate, u32 sys_clock, PinconfigUART confPin) { CLK_PCKENR1_bit.PCKEN15 = 1; // UART clock enable USART1_CR1_bit.USARTD = 0; USART1_CR5_bit.DMAT = 1; // DMA enable transmitter USART1_CR5_bit.DMAR = 1; // DMA enable receiver DMAChannelTX.global_disable(); DMAChannelTX.set_periph_addr(&USART1_DR); DMAChannelTX.set_memory0_addr(UartBuffer); DMAChannelTX = EnumDMA::DATABLOCK_8bit; DMAChannelTX = EnumDMA::PRIORITY_MEDIUM; DMAChannelTX = EnumDMA::MEMPNT_INCREMENT; DMAChannelTX = EnumDMA::MEMORY_TO_PHERIPH; DMAChannelTX = EnumDMA::CIRCULAR_DISABLE; DMAChannelRX.set_periph_addr(&USART1_DR); DMAChannelRX.set_memory0_addr(UartBuffer); DMAChannelRX = EnumDMA::DATABLOCK_8bit; DMAChannelRX = EnumDMA::PRIORITY_MEDIUM; DMAChannelRX = EnumDMA::MEMPNT_INCREMENT; DMAChannelRX = EnumDMA::PHERIPH_TO_MEMORY; DMAChannelRX = EnumDMA::CIRCULAR_DISABLE; DMAChannelRX.set_number_of_transfers(sizeof(UartBuffer)); DMAChannelRX.channel_enable(); DMAChannelTX.global_enable(); set_sysclock(sys_clock, baud_rate); USART1_CR2_bit.TCIEN = 1; // .     USART1_CR2_bit.ILIEN = 1; // .    USART1_CR5_bit.EIE = 1; // .     __enable_interrupt(); close(); }
      
      







рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:



 void DriverUART::transmit(u8 * source, u16 size) { while(DMAChannelTX.is_busy()) ; select_direction(TRANSMITION); __disable_interrupt(); DMAChannelTX.global_disable(); DMAChannelTX.channel_disable(); DMAChannelTX.set_number_of_transfers(size); DMAChannelTX.set_memory0_addr(source); DMAChannelTX.global_enable(); DMAChannelTX.channel_enable(); __enable_interrupt(); }
      
      







рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:



 u8 buffer[] = "hello world!" Uart1.transmit(buffer, sizeof(buffer));
      
      







рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдПрдХ рдЕрд╡рд░реЛрдз рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреАрдПрдордП рдЪреИрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ:



 void DriverUART::reception_handshake() { __disable_interrupt(); DMAChannelRX.global_disable(); DMAChannelRX.channel_disable(); received_size = DMAChannelRX.get_amount_of_last_transation(); DMAChannelRX.set_number_of_transfers(sizeof(UartBuffer)); DMAChannelRX.global_enable(); DMAChannelRX.channel_enable(); __enable_interrupt(); }
      
      







рдмреАрдЪ рдореЗрдВ, рдЖрдк рдЖрдВрддрд░рд┐рдХ рдмрдлрд╝рд░ рдХреЛ рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкреИрдХреЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ред рдЪреВрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд░реБрдХрд╛рд╡рдЯ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:



 //-------------------------------------------------------------------------- //    //-------------------------------------------------------------------------- void DriverUART::receive_handle() { u16 size; u8* pnt; Uart1.reception_handshake(); size = Uart1.get_received_size(); pnt = Uart1.get_pointer_on_internal_buffer(); //      }
      
      







рдирд┐рд╖реНрдХрд░реНрд╖



рдЗрди рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓рдХ рдХреЛ рдмреЗрд╣рддрд░ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЕрдм рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдк рдХреБрдЫ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



C ++ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХреЛрдб рд╕реНрд╡-рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЪрд╛рд▓рдХ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдПрдХ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдХрд╛ рд╕рд╛рд░ рдпрд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред



рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛрдб рдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдпрд╛ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреА рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗред



C ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдЧрддрд┐ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрддреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред



DMA рдФрд░ UART рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрд╕ рд▓рд┐рдВрдХ STM8L051F3_Drivers рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдлрд╝рд╛рдЗрд▓ "Init_UART.cpp" рдореЗрдВ UART рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред



All Articles