OpenWRT рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдорд┐рдиреАрдХрдВрдкреНрдпреВрдЯрд░: рдПрдХ рдпреВрдПрд╕рдмреА рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛


рд╢реБрдн рджреЛрдкрд╣рд░, рдкреНрд░рд┐рдп Khabrovitesред рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░рд╛рдЙрдЯрд░ рдХреЛ рдПрд▓рд╕реАрдбреА рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╕рд╛рде рд╕рд╛рдзрд╛рд░рдг рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдВрдмреЗ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХреЗ рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ STM32F103 рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ USB рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдлрд┐рд░ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд╛рд▓рдХ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдкреВрд░реНрдг рдлреНрд░реЗрдордмрдлрд╝рд░ рдбреНрд░рд╛рдЗрд╡рд░, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдПрдХреНрд╕-рд╕рд░реНрд╡рд░ред рдЙрд╕реА рд╕рдордп, рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ OpenWRT рд╕реНрд░реЛрдд рдХреЗ рдкреЗрдбрд╝ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдХрд░реЗрдВрдЧреЗред
рдареАрдХ рд╣реИ, рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐, рдХрдИ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╕реАрди рдЖрдВрд╕реВ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдареЛрд╕ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗ рдЬреЛ рдЙрддреНрд╕рд╛рд╣ рдХреЛ рдлреАрдХрд╛ рди рд╣реЛрдиреЗ рджреЗред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд▓реЛрд╣рд╛


рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рд▓реЛрд╣реЗ рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЛ рд▓реЛрдЧ рдорд┐рд▓рд╛рдк рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рддреБрд░рдВрдд рдЖрд╢реНрд╡рд╕реНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ - рдЬреЛ рд╣рдо рдХрд░реЗрдВрдЧреЗ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд┐рд▓рд╛рдк рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ STM32F103VE рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдПрдХ QVGA рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред
рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреА рд╣реЛрдЧреА, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд░рд╛рдЙрдЯрд░, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдореЗрдВ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗред рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдпрдВ USB рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

STM32F103 рдореЗрдВ рджреЛ рдЗрдХрд╛рдЗрдпрд╛рдБ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдкрд╣рд▓рд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ USB рдирд┐рдпрдВрддреНрд░рдХ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдФрд░ рд╣реЛрд╕реНрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИред рджреВрд╕рд░рд╛ FSMC рд╣реИ - рдлреНрд▓реЗрдХреНрд╕рд┐рдмрд▓ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдореЛрд░реА рдХрдВрдЯреНрд░реЛрд▓рд░ред рдпрд╣ рдПрдХ рд╕реНрдерд┐рд░ рдореЗрдореЛрд░реА рдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИ рдЬрд┐рд╕реЗ SRAM, NAND / NOR FLASH рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╕ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рд╕рдордп рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╣реЛред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдорд╛рдЗрдХреНрд░реЛрдХреНрд░рд┐рд╕реНрдХреЗрдЯреНрд╕ рдХреЛ рдкрддрд╛ рд╕реНрдерд╛рди рдкрд░ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░, рдЬрдм рдЙрдЪрд┐рдд рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдлрдПрд╕рдПрдорд╕реА рд╕реНрд╡рдпрдВ рдирд┐рдпрдВрддреНрд░рдг рд░реЗрдЦрд╛рдУрдВ рдФрд░ рдкрддреЗ рдФрд░ рдбреЗрдЯрд╛ рдмрд╕реЛрдВ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред

рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд▓реИрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд▓рдЧрднрдЧ NOR рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдФрд░ SRAM: 16-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдмрд╕, рд╕реАрдПрд╕ рд╕реНрдЯреНрд░реАрдмрд▓реНрд╕, ~ рдбрдмреНрд▓реНрдпреВрдЖрд░, ~ рдЖрд░рдбреА рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдЗрди рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╕реАрдПрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЪрдХреНрд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред ~ рдбрдмреНрд▓реНрдпреВрдЖрд░ рдпрд╛ ~ рдЖрд░рдбреА рдХреНрд░рдорд╢рдГ рдкрдврд╝рдиреЗ рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рд╕рдХреНрд░рд┐рдп рд╣реЛрддреЗ рд╣реИрдВред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдбрд┐рд╕реНрдкреНрд▓реЗ рд╣рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рддрдХ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рдФрд░ рдбреЗрдЯрд╛ рдмрд╕ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдХрд▓ 16-рдмрд┐рдЯ рдмрд╕ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд░рдПрд╕ рд╕рд┐рдЧреНрдирд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рд░рдЬрд┐рд╕реНрдЯрд░ рдЪреБрдиреЗрдВред рдЬрдм рдЖрд░рдПрд╕ рд╕рд┐рдЧреНрдирд▓ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдмрд╕ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореВрд▓реНрдп рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ (рд░реИрдо рд╕реЗрд▓) рдХреЗ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдмрд╛рдж рдореЗрдВ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд░реИрдо рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЖрд░рдПрд╕ - рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдкрдврд╝рдирд╛ рдпрд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реИрдо рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рдореЗрдореЛрд░реА рд╣реИ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рддрдВрддреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рд╣реИред рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА GRAM, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд░реИрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рд╡рд┐рдВрдбреЛ" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИред рдЙрд╕реА рд╕рдордп, рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рд▓реЙрдЬрд┐рдХ рд╕реНрд╡рдпрдВ рд╣реА рдЖрдВрддрд░рд┐рдХ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рдХреЛ рдмрдврд╝рд╛ / рдШрдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЙрд╕реА рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд░реАрдбрд┐рдВрдЧ (CTR_WRITE_DATA, CTR_READ_DATA)
рдПрдлрдПрд╕рдПрдорд╕реА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрд░рдПрд╕ рд╕рд┐рдЧреНрдирд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдПрдлрдПрд╕рдПрдорд╕реА рдХреЗ рдЙрдкрд▓рдмреНрдз рдкрддреЗ рдмрд╕ рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЖрд░рдПрд╕ рд╕рд┐рдЧреНрдирд▓ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдордиреЗ рд╕рд┐рдЧреНрдирд▓ A0 рдХреЛ RS рд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реИред рдлрд┐рд░, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ 0x00000000 рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп (рдЬрд┐рд╕ рдЖрдзрд╛рд░ рдкрддреЗ рд╕реЗ рдпрд╣ рдПрдлрдПрд╕рдПрдорд╕реА рдмреИрдВрдХ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЖрд░рдПрд╕ рд╕рд┐рдЧреНрдирд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдЗрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдПрдбреНрд░реЗрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░реЗрдЧрд╛ред
0x00000001 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдкрддрд╛ рдкрдВрдХреНрддрд┐ A0 рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд░реАрдбрд┐рдВрдЧ рдпрд╛ рд▓реЗрдЦрди рд░реИрдо рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рдЙрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рд╢реВрдиреНрдп рдкрддреЗ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ STM рдПрдкрдиреЛрдЯ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЗрд╕рдХреЗ рдбреЗрдЯрд╢реАрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред

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

рдЪреВрдВрдХрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд┐рдиреА-рдПрд╕рдЯреАрдПрдо 32 рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЪрд┐рдк рдЪрдпрди рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ рдФрд░ рдЖрд░рдПрд╕ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреМрди рд╕реА рдкрддрд╛ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдХреАрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, FSMC_NE1 рдХреЛ CS рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ FSMC_A16 рдХреЛ RS рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ PE1 рдХреЗ рд▓рд┐рдП рд░реАрд╕реЗрдЯ рд╕рд┐рдЧреНрдирд▓ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ PD13 рд╕реЗ рдЬреБрдбрд╝рд╛ рдмреИрдХрд▓рд╛рдЗрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд┐рдЧреНрдирд▓ рднреА рд╣реИред
рдЙрд╕реА рд╕рдордп, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпреВрдПрд╕рдмреА рд╕рд╕реНрдкреЗрдВрдбрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рдЗрд╕ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдпрд╣ рдкреАрд╕реА 13 рд╣реИред

рддреЛ, рд╣рдо рдХреЛрдб рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдореБрд▓рд╛рдпрдо


рдПрд▓рд╕реАрдбреА рдСрдкрд░реЗрд╢рди

рдЖрдЗрдП рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдо CooCox IDE рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рд╣рдо рдбреЗрдЯрд╛ рдкрддреНрд░рдХ рд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рд╕рднреА рдкрддреЗ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рджреЗрдВрдЧреЗ:

рдПрд▓рд╕реАрдбреА рд░рдЬрд┐рд╕реНрдЯрд░ рдШреЛрд╖рдгрд╛
#define CTR_OSC_START 0x0000 #define CTR_DRV_OUTPUT1 0x0001 #define CTR_DRV_WAVE 0x0002 #define CTR_ENTRY_MODE 0x0003 #define CTR_RESIZE 0x0004 #define CTR_DISPLAY1 0x0007 #define CTR_DISPLAY2 0x0008 #define CTR_DISPLAY3 0x0009 #define CTR_DISPLAY4 0x000A #define CTR_RGB_INTERFACE1 0x000C #define CTR_FRM_MARKER 0x000D #define CTR_RGB_INTERFACE2 0x000F #define CTR_POWER1 0x0010 #define CTR_POWER2 0x0011 #define CTR_POWER3 0x0012 #define CTR_POWER4 0x0013 #define CTR_HORZ_ADDRESS 0x0020 #define CTR_VERT_ADDRESS 0x0021 #define CTR_WRITE_DATA 0x0022 #define CTR_READ_DATA 0x0022 #define CTR_POWER7 0x0029 #define CTR_FRM_COLOR 0x002B #define CTR_GAMMA1 0x0030 #define CTR_GAMMA2 0x0031 #define CTR_GAMMA3 0x0032 #define CTR_GAMMA4 0x0035 #define CTR_GAMMA5 0x0036 #define CTR_GAMMA6 0x0037 #define CTR_GAMMA7 0x0038 #define CTR_GAMMA8 0x0039 #define CTR_GAMMA9 0x003C #define CTR_GAMMA10 0x003D #define CTR_HORZ_START 0x0050 #define CTR_HORZ_END 0x0051 #define CTR_VERT_START 0x0052 #define CTR_VERT_END 0x0053 #define CTR_DRV_OUTPUT2 0x0060 #define CTR_BASE_IMAGE 0x0061 #define CTR_VERT_SCROLL 0x006A #define CTR_PIMG1_POS 0x0080 #define CTR_PIMG1_START 0x0081 #define CTR_PIMG1_END 0x0082 #define CTR_PIMG2_POS 0x0083 #define CTR_PIMG2_START 0x0084 #define CTR_PIMG2_END 0x0085 #define CTR_PANEL_INTERFACE1 0x0090 #define CTR_PANEL_INTERFACE2 0x0092 #define CTR_PANEL_INTERFACE4 0x0095 #define CTR_OTP_VCMPROGRAM 0x00A1 #define CTR_OTP_VCMSTATUS 0x00A2 #define CTR_OTP_IDKEY 0x00A5 


рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рдХреЛрдб рдмрд┐рдВрджреБ рд╕реЗ, FSMC рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рд╕рд░рд▓ рд▓реЗрдЦрди / рдореЗрдореЛрд░реА рд╕реЗ рдкрдврд╝реА рдЬрд╛рдПрдЧреА, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╣рдо STM32, FSMC рдЕрдиреБрднрд╛рдЧ рдкрд░ рд╕рдВрджрд░реНрдн рдореИрдиреБрдЕрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ NOR / SRAM рдХреЗ рд▓рд┐рдП 0x60000000 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрддреЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рдореЗрдВ рдмреИрдВрдХ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдмрдбрд╝реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЕрд░реНрде рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдВрдХ # 1 NOR / SRAM рд╣реИ, рдмреИрдВрдХ # 2 рдФрд░ # 3 NAND рд╣реИрдВ, рдмреИрдВрдХ # 4 рдПрдХ рдкреАрд╕реА рдХрд╛рд░реНрдб рд╣реИред
рдмрджрд▓реЗ рдореЗрдВ, рдмреИрдВрдХ # 1 рдХрд╛ рдЙрдкрдпреЛрдЧ 4 рдореЗрдореЛрд░реА рдЪрд┐рдкреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ NOR рдпрд╛ SRAM рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдбрд┐рд╕реНрдкреНрд▓реЗ NE1 рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо FSMC_Bank1_NORSRAM1 рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдмреИрдВрдХ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдЖрдзрд╛рд░ рдкрддреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рддреБрд░рдВрдд рдкрд░рд┐рднрд╛рд╖рд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 #define LCDRegister (*((volatile uint16_t*) 0x60000000)) 

рд╡рд╣ рдкрддрд╛ рдЬреЛ RS рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдкрддрд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ A16 рд▓рд╛рдЗрди рд╕рдХреНрд░рд┐рдп рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0x60000000 + (2 << 16), рдЕрд░реНрдерд╛рдд 0x60020000, рдЗрд╕рд▓рд┐рдП рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 #define LCDMemory (*((volatile uint16_t*) 0x60020000)) 

рдФрд░ рддреБрд░рдВрдд, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдЗрд╕рдХреА рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдорд╛рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдореИрдХреНрд░реЛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗ:

 #define LCD_WRITE_REGISTER(REG, DATA) LCDRegister=REG;LCDMemory=DATA; #define LCD_BEGIN_RAM_WRITE LCDRegister=CTR_WRITE_DATA; #define LCD_WRITE_RAM(DATA) LCDMemory=DATA 

рдЙрд╕реА рд╕рдордп, рд╣рдо рдкрд┐рдВрд╕ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рдкреЛрд░реНрдЯ рдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдмреИрдХрд▓рд╛рдЗрдЯ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдорд╛рдирддреЗ рд╣реИрдВ:

 #define BacklightPin GPIO_Pin_13 #define BacklightPort GPIOD #define ResetPin GPIO_Pin_1 #define ResetPort GPIOE 

рдЕрдм рд╣рдо FSMC рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

FSMC рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб
 void LCDInitHardware() { SysTick_Config(SystemCoreClock/1000); GPIO_InitTypeDef GPIO_InitStructure; FSMC_NORSRAMInitTypeDef FSMC_InitStructure; FSMC_NORSRAMTimingInitTypeDef FSMC_Timing; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_14| GPIO_Pin_15; //Interface GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14 | GPIO_Pin_15; //Interface GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = BacklightPin; //Backlight GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(BacklightPort, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ResetPin; //Reset GPIO_Init(ResetPort, &GPIO_InitStructure); GPIO_SetBits(ResetPort,ResetPin); FSMC_Timing.FSMC_AddressSetupTime = 1; FSMC_Timing.FSMC_AddressHoldTime = 0; FSMC_Timing.FSMC_DataSetupTime = 5; FSMC_Timing.FSMC_BusTurnAroundDuration = 0; FSMC_Timing.FSMC_CLKDivision = 0; FSMC_Timing.FSMC_DataLatency = 0; FSMC_Timing.FSMC_AccessMode = FSMC_AccessMode_B; FSMC_InitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1; FSMC_InitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; FSMC_InitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; FSMC_InitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; FSMC_InitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_InitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_InitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_InitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_InitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; FSMC_InitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_InitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_InitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_InitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_InitStructure.FSMC_ReadWriteTimingStruct = &FSMC_Timing; FSMC_InitStructure.FSMC_WriteTimingStruct = &FSMC_Timing; FSMC_NORSRAMInit(&FSMC_InitStructure); FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); } 


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдорд░ рдХреЛ рдПрдХ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рджреМрд░рд╛рди рджреЗрд░реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛), рдлрд┐рд░ рд╣рдо рдЙрди рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдлрдПрд╕рдПрдорд╕реА рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реИрдВ ", рд╣рдо рд░реАрд╕реЗрдЯ рдФрд░ рдмреИрдХрд▓рд╛рдЗрдЯ рдкрд┐рди рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдкреБрд╢-рдкреБрд▓, рдлрд┐рд░ FSMC рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВред
рдЖрдк рд╕реНрд╡рдпрдВ рд╕рдордп-рд╕реАрдорд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдПрд╕рдЯреАрдПрдо рдХреЗ рдПрдкрдиреЛрдЯ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╣рдо рдореЗрдореЛрд░реА рдкреНрд░рдХрд╛рд░ рдХреЛ SRAM рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╕ рдХреА рдЪреМрдбрд╝рд╛рдИ 16 рдмрд┐рдЯреНрд╕ рд╣реИ, рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реБрдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╡рд┐рд╡рд░рдг рдПрдХ рдкрддреНрд░рдХ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреГрд╖реНрда рд▓реЗрддрд╛ рд╣реИред
рд╣рдо рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕рдорд╛рд░реЛрд╣ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдХрд╛рдлреА рд╕рдЯреАрдХ рд╡рд┐рд▓рдВрдм рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

SysTick рдЯрд╛рдЗрдорд░ рджреЗрд░реА рд╕рдорд╛рд░реЛрд╣
 volatile uint32_t Tick = 0x00000000; void SysTick_Handler() { if(Tick>0) Tick--; } void SysTickDelay(uint32_t msDelay) { Tick=msDelay; while(Tick); } 


рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХрд╛рд░реНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

рдПрд▓рд╕реАрдбреА рдЖрд░рдВрднреАрдХрд░рдг
 void LCDInit() { LCDHardwareReset(); LCD_WRITE_REGISTER(CTR_OSC_START, 0x0001); LCD_WRITE_REGISTER(CTR_DRV_OUTPUT1, 0x0100); LCD_WRITE_REGISTER(CTR_DRV_WAVE, 0x0700); LCD_WRITE_REGISTER(CTR_ENTRY_MODE, 0x1038); LCD_WRITE_REGISTER(CTR_RESIZE, 0x0000); LCD_WRITE_REGISTER(CTR_DISPLAY2, 0x0202); LCD_WRITE_REGISTER(CTR_DISPLAY3, 0x0000); LCD_WRITE_REGISTER(CTR_DISPLAY4, 0x0000); LCD_WRITE_REGISTER(CTR_RGB_INTERFACE1, 0x0001); LCD_WRITE_REGISTER(CTR_FRM_MARKER, 0x0000); LCD_WRITE_REGISTER(CTR_RGB_INTERFACE2, 0x0000); LCD_WRITE_REGISTER(CTR_POWER1, 0x0000); LCD_WRITE_REGISTER(CTR_POWER2, 0x0007); LCD_WRITE_REGISTER(CTR_POWER3, 0x0000); LCD_WRITE_REGISTER(CTR_POWER4, 0x0000); SysTickDelay(200); LCD_WRITE_REGISTER(CTR_POWER1, 0x1590); LCD_WRITE_REGISTER(CTR_POWER2, 0x0227); SysTickDelay(50); LCD_WRITE_REGISTER(CTR_POWER3, 0x009C); SysTickDelay(50); LCD_WRITE_REGISTER(CTR_POWER4, 0x1900); LCD_WRITE_REGISTER(CTR_POWER7, 0x1900); LCD_WRITE_REGISTER(CTR_FRM_COLOR, 0x000E); SysTickDelay(50); LCD_WRITE_REGISTER(CTR_HORZ_ADDRESS, 0x0000); LCD_WRITE_REGISTER(CTR_VERT_ADDRESS, 0x0000); LCD_WRITE_REGISTER(CTR_HORZ_START, 0x0000); LCD_WRITE_REGISTER(CTR_HORZ_END, 239); LCD_WRITE_REGISTER(CTR_VERT_START, 0x0000); LCD_WRITE_REGISTER(CTR_VERT_END, 319); LCD_WRITE_REGISTER(CTR_DRV_OUTPUT2, 0x2700); LCD_WRITE_REGISTER(CTR_BASE_IMAGE, 0x0001); LCD_WRITE_REGISTER(CTR_VERT_SCROLL, 0x0000); GPIO_SetBits(BacklightPort,BacklightPin); } 


рдЕрдиреБрдХреНрд░рдо рдХреЛ рдбреЗрдЯрд╢реАрдЯ рд╕реЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рдСрд╕рд┐рд▓реЗрдЯрд░ рдФрд░ рдкрд╛рд╡рд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдХреЗ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдХреБрдЫ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рджреЗрд░реА рдХреЛ рднреА рдЭреЗрд▓реЗрдВ, рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕рд░реНрдХрд┐рдЯрд░реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рджреЗрдВред рд╕рд╛рде рд╣реА, рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЛрдб рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GRAM рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдбреНрд░реЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ - рдЖрдк рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдмрдврд╝рд╛ рдпрд╛ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдиреАрдЪреЗ рдпрд╛ рдКрдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд, рдЙрд╕ рджрд┐рд╢рд╛ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред ред
рдЗрд╕ рдХреЛрдб рдореЗрдВ, LCDHardwareReset рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмреНрд▓реЙрдХ рд╣реИ рдЬреЛ рд░реАрд╕реЗрдЯ рд▓рд╛рдЗрди рдкрд░ рд╕рдХреНрд░рд┐рдп рд╕реНрддрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдереЛрдбрд╝реА рджреЗрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:

 void LCDHardwareReset() { GPIO_ResetBits(ResetPort,ResetPin); SysTickDelay(50); GPIO_SetBits(ResetPort,ResetPin); SysTickDelay(10); } 

рд╣рдо рдХреБрдЫ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕реНрддрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ:

 void LCDOn() { LCD_WRITE_REGISTER(CTR_DISPLAY1, 0x0133); } void LCDOff() { LCD_WRITE_REGISTER(CTR_DISPLAY1, 0x0131); } 

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

  void LCDSetBounds(uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) { LCD_WRITE_REGISTER(CTR_VERT_START, left); LCD_WRITE_REGISTER(CTR_VERT_END, right); LCD_WRITE_REGISTER(CTR_HORZ_START, top); LCD_WRITE_REGISTER(CTR_HORZ_END, bottom); LCD_WRITE_REGISTER(CTR_HORZ_ADDRESS, top); LCD_WRITE_REGISTER(CTR_VERT_ADDRESS, left); } 

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

 void LCDClear(uint16_t color) { LCDSetBounds(0,0,320-1,240-1); LCD_BEGIN_RAM_WRITE; uint32_t i; for(i=0;i<320*240;i++) LCD_WRITE_RAM(color); } 

рдЕрдкрдиреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдмрд╕ рдЗрддрдирд╛ рд╣реА рдХрд░рдирд╛ рд╣реИ

 LCDInitHardware(); LCDInit(); LCDOn(); LCDClear(0x0000); 

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рджрд░реНрд╢рди рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд╛рд▓рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред LCDClear рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реНрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдЪрдпрдирд┐рдд рд░рдВрдЧ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм рдЪрд▓реЛ рдЕрдзрд┐рдХ рдХрдард┐рди рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ - рдпреВрдПрд╕рдмреАред

USB рдСрдкрд░реЗрд╢рди

USB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡реНрдпрд╛рдкрдХ рдФрд░ рдмрд╣реБрдореБрдЦреА рд╡рд┐рд╖рдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЦ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ USB рдЗрди рдП рдирдЯрд╢реЗрд▓ ( рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг , рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг ) рдирд╛рдордХ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, USB рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИ, рдЬрд┐рд╕реЗ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕реЙрдХреЗрдЯ рд╕реЙрдХреЗрдЯ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдпреВрдбреАрдкреА рдХреЗ рд▓рд┐рдП рдпрд╛ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдПрдВрдбрдкреЙрдЗрдВрдЯ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

  1. рдирд┐рдпрдВрддреНрд░рдг рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг USB рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 64 рдмрд╛рдЗрдЯ рддрдХ рдЫреЛрдЯреЗ рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢реВрдиреНрдп рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд┐рд╕реА рднреА USB рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореЗрдЬрдмрд╛рди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреИрдХреЗрдЬ рд╡рд┐рддрд░рдг рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ; рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣реЛрд╕реНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдВрддреНрд░рдг рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗрд╡рд▓ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рджреНрд╡рд┐рджрд┐рд╢ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЕрдиреНрдп рд╕рднреА рдпрд╛ рддреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпрд╛ рдХреЗрд╡рд▓ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
  2. рдЗрдВрдЯрд░рдкреНрд░реЗрдиреНрдпреЛрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА рдкрд░ рд╣реЛрд╕реНрдЯ рдкреЛрд▓рд┐рдВрдЧ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ USB рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрд╡рдпрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрд┐рдВрджреБ рдХреАрдмреЛрд░реНрдб рдФрд░ рдорд╛рдЙрд╕ рдЬреИрд╕реЗ HID рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреИрдХреЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдПрдлрдПрд╕ рдпреВрдПрд╕рдмреА рдореЗрдВ 64 рдмрд╛рдЗрдЯ рддрдХ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдбрд┐рд▓реАрд╡рд░реА рдХреА рдЧрд╛рд░рдВрдЯреАред
  3. Isochronous Endpoint - рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреИрдХреЗрдЯ рд╣рд╛рдирд┐ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдореЗрдВ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред FS USB рдореЗрдВ рдкреИрдХреЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ 1024 рдмрд╛рдЗрдЯ рддрдХ рд╣реЛрддрд╛ рд╣реИред
  4. рдмрд▓реНрдХ рдПрдирдкреЙрдЗрдВрдЯ рд╕реВрдЪрдирд╛ рднрдВрдбрд╛рд░рдг рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИрдВред
    рдпрд╣ рдЧрд╛рд░рдВрдЯреА рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рднреЗрдЬрдиреЗ рдФрд░ рдПрдлрдПрд╕ рдпреВрдПрд╕рдмреА рдХреЗ рд▓рд┐рдП 64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рдкреИрдХреЗрдЯ рдХреЗ рдЖрдХрд╛рд░ (рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреЗ рд▓рд┐рдП, рдкреИрдХреЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ 1023 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ) рдорд╛рдирддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ STM32 рдХреЗ USB рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдбрдмрд▓ рдмрдлрд░рд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдереНрд░реВрдкреБрдЯ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред рдЗрдВрдЯрд░рдкреНрдЯ, рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдЗрд╕реНрд╕реЛрдХреНрд░реЛрдирд╕ рдХреЗ рдмрд╛рдж рд╢реЗрд╖ рдЙрдкрд▓рдмреНрдз рдмреИрдВрдбрд╡рд┐рдбреНрде рдмрд▓реНрдХ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдиреНрдп рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рдХреНрдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред рдереЛрдХ рдХреЗ рд╕рд╛рдеред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрд▓реНрдХ рд╣реИ, рд╣рдо рдЧреНрд░рд╛рдлрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмреНрд▓реЙрдХ рднреЗрдЬреЗрдВрдЧреЗ рдЬреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВрдЧреЗ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдбрдмрд▓ рдмрдлрд░рд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдкрд░рд┐рд╕рд░ рдореЗрдВ рдХрд┐рд╕реА рдЖрд╡рдзрд┐рдХрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ Isochronous рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреА "рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ" рдкреНрд░рдХреГрддрд┐ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХ рдбреЗрдЯрд╛ рдЕрд╕рдореНрдкреАрдбрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдордирдорд╛рдиреЗ рдкрджреЛрдВ рдкрд░ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреИрдХреЗрдЯ рдЦреЛ рджреЗрдЧрд╛ред
рд╣реЛрд╕реНрдЯ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдХрд░рдг рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ рдХреНрдпрд╛ рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВ, рд╣реЛрд╕реНрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдПрдВрдбрдкреЙрдЗрдВрдЯ # 0 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
рд╡реЗ рдЬрд┐рд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдЦ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЫрд╡рд┐
рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЙрдирдХреЗ рдкрд╛рд╕ рд▓реМрдЯ рдЖрдПрдВрдЧреЗ, рдФрд░ рдЕрдм рд╣рдо рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ рдХрд┐ рдпреВрдПрд╕рдмреА рдХреЗ рд╕рд╛рде рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдлрд░реНрдорд╡реЗрдпрд░ рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдФрд░ рдмрд┐рдВрджреБ рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗред
  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдпреВрдПрд╕рдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдЯреАрдПрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЖрдВрддреНрд░ рд╕реЗ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реНрдерд┐рдд) рдПрд╕рдЯреАрдПрдо 32_рдпреВрдПрд╕рдмреА-рдПрдлрдПрд╕-рдбрд┐рд╡рд╛рдЗрд╕_рдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ - рд▓рд┐рдВрдХреНрдб рдлрд╝реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝реЗрдВ ред рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлреЛрд▓реНрдбрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕реЗ usb_user рдХреА рддрд░рд╣ рдХрд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо hw_config.h рдФрд░ usb_conf.h рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ - рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдПрд╕рдЯреАрдПрдо рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╣реЛрддреА рд╣реИред
    Hw_config.h рдореЗрдВ рд╣рдо рддреБрд░рдВрдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ

     #include "stm32f10x.h" 

    рдЕрдиреНрдпрдерд╛ рдЕрдирд╕реБрд▓рдЭреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ (uint8_t, uint16_t, uint32_t, ...)
    рд╕рдорд╛рд╡реЗрд╢ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╣рдорд╛рд░реЗ usb_user рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
  2. Usb_user рдореЗрдВ рдПрдХ рдирдИ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШреЛрд╖рдгрд╛рдПрдБ рд╣реЛрдВрдЧреА, рдЖрдЗрдП рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, usb_desc.h, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╡рд╣рд╛рдБ рдбрд╛рд▓рддреЗ рд╣реИрдВ:

     #include "usb_lib.h" #define SIZ_DEVICE_DESC 0x12 #define SIZ_CONFIG_DESC 0x19 #define SIZ_STRING_LANGID 0x04 #define SIZ_STRING_VENDOR 0x10 #define SIZ_STRING_PRODUCT 0x10 #define SIZ_STRING_SERIAL 0x12 extern const uint8_t USB_ConfigDescriptor[SIZ_CONFIG_DESC]; extern ONE_DESCRIPTOR Device_Descriptor; extern ONE_DESCRIPTOR Config_Descriptor; extern ONE_DESCRIPTOR String_Descriptor[4]; 

    рдпрд╣рд╛рдВ, " SIZ_ " рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдЗрди рдЖрдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
    extern const uint8_t USB_ConfigDescriptor рд╣рдо рдХреЗрд╡рд▓ рд╣реЗрдбрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╛рдХреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ uint_8 рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рдиреНрд╣реЗрдВ One_DESCRIPTOR рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рджреЛ рд╕рджрд╕реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдлреЙрд░реНрдо uint8_t * рдореЗрдВ рдПрдХ рд╣реА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рд╣реИ, рджреВрд╕рд░рд╛ рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рд╕реЛрд▓рд╣-рдмрд┐рдЯ рд▓рдВрдмрд╛рдИ рд╣реИред
    рдЕрдм рдПрдХ рдирдП usb_desc.c рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рдФрд░ рд╡рд╣рд╛рдВ рд╣рдорд╛рд░реЗ рд╣реЗрдбрд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реБрдП, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
    рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдПрдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝реАрд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА USB рдЗрди рдП рдирдЯрд╢реЗрд▓ рдХреЗ рд▓реЗрдЦ рдореЗрдВ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╕рднреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ (рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╣рдо рдЙрдиреНрд╣реЗрдВ рдбрд┐рдлрд╛рдЗрди рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдмрд╛рдж рдмрд╛рдЗрдЯ - рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ред
    рдпрд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

    рдбрд┐рд╡рд╛рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░
     const uint8_t USB_DeviceDescriptor[SIZ_DEVICE_DESC] = { 0x12, /* bLength */ 0x01, /* bDescriptorType */ 0x00, 0x02, /* bcdUSB = 2.00 */ 0xFF, /* bDeviceClass: Vendor Specific */ 0x00, /* bDeviceSubClass */ 0x00, /* bDeviceProtocol */ 0x40, /* bMaxPacketSize0 */ 0xAD, 0xDE, /* idVendor*/ 0x0D, 0xF0, /* idProduct*/ 0x00, 0x01, /* bcdDevice = 2.00 */ 1, /* Index of string descriptor describing manufacturer */ 2, /* Index of string descriptor describing product */ 3, /* Index of string descriptor describing the device's serial number */ 0x01 /* bNumConfigurations */ }; 



    рд╣рдо VID = 0xDEAD рдФрд░ PID = 0xF00D, рдПрдХрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ 64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдзрд┐рдХрддрдо рдкреИрдХреЗрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ "рд╡рд┐рдХреНрд░реЗрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ" рдбрд┐рд╡рд╛рдЗрд╕ (HID рдЬреИрд╕реА рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ) рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
    рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

    рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд┐рд╡рд░рдгрдХ
     const uint8_t USB_ConfigDescriptor[SIZ_CONFIG_DESC] = { /*Configuration Descriptor*/ 0x09, /* bLength: Configuration Descriptor size */ 0x02, /* bDescriptorType: Configuration */ SIZ_CONFIG_DESC, /* wTotalLength:no of returned bytes */ 0x00, 0x01, /* bNumInterfaces: 1 interface */ 0x01, /* bConfigurationValue: Configuration value */ 0x00, /* iConfiguration: Index of string descriptor describing the configuration */ 0xE0, /* bmAttributes: bus powered */ 0x32, /* MaxPower 100 mA */ /*Interface Descriptor*/ 0x09, /* bLength: Interface Descriptor size */ 0x04, /* bDescriptorType: Interface */ 0x00, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x01, /* bNumEndpoints: One endpoints used */ 0xFF, /* bInterfaceClass: Vendor Specific*/ 0x00, /* bInterfaceSubClass*/ 0x00, /* bInterfaceProtocol*/ 0x00, /* iInterface: */ /*Endpoint 1 Descriptor*/ 0x07, /* bLength: Endpoint Descriptor size */ 0x05, /* bDescriptorType: Endpoint */ 0x01, /* bEndpointAddress: (OUT1) */ 0x02, /* bmAttributes: Bulk */ 0x40, /* wMaxPacketSize: */ 0x00, 0x00 /* bInterval: */ }; 


    рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдкрд╣рд▓рд╛ рдмрд╛рдЗрдЯ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд┐рдЧ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛ 0x09 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкреВрд░реЗ рд╡рд░реНрдг рдХреА рдбрдмрд▓-рдмрд╛рдЗрдЯ рд▓рдВрдмрд╛рдИ рдЖрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░, рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдФрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд╛рдЗрдЯ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╢реВрдиреНрдп рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
    рдлрд┐рд░ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдЗрдВрдбреЗрдХреНрд╕ 0 рдкрд░ рд╕реНрдерд┐рдд) рд╣реИ, рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рдмрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИ рдФрд░ 100 рдПрдордП рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред
    рдЙрд╕реА рд╕рд░рдгреА рдореЗрдВ рдЖрдЧреЗ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣реИ, рдЙрд╕реА 0x09 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЖрдХрд╛рд░, рджреЛ рдЗрдВрдбреЗрдХреНрд╕, рджреЛрдиреЛрдВ рд╢реВрдиреНрдп, рдЬрд┐рд╕ рдкрд░ рд╣реЛрд╕реНрдЯ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЛрдЧрд╛, рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрдЧ, рдлрд┐рд░ рд╕реЗ "рд╡рд┐рдХреНрд░реЗрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ"ред , рдХреЛрдИ рдЙрдкрд╡рд░реНрдЧ, рдХреЛрдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╢реВрдиреНрдп)ред
    рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд┐рдо рд╣рдорд╛рд░реЗ рдПрдХрдорд╛рддреНрд░ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓ рд╣реИред рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ 0 рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рддреБрд░рдВрдд рдмрд▓реНрдХ рдПрдВрдбрдкреЙрдЗрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред 1. рдкрддрд╛ рдмрд╛рдЗрдЯ рди рдХреЗрд╡рд▓ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд░рдг рдХреА рджрд┐рд╢рд╛ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкреИрдХреЗрдЯ рдХреЛ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкреИрдХреЗрдЯ рдХрд╛ рд╕реАрдорд╛ рдЖрдХрд╛рд░ (рдзреНрдпрд╛рди, рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ!) рдФрд░ рдЕрдВрддрд┐рдо рдмрд╛рдЗрдЯ рдХреЛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдЫреЛрдбрд╝ рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд▓реНрдХ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИред
    рдЕрдЧрд▓рд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:

    рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдгрдирдХрд░реНрддрд╛
     /* USB String Descriptors */ const uint8_t USB_StringLangID[SIZ_STRING_LANGID] = { SIZ_STRING_LANGID, /* bLength */ 0x03, /* String descriptor */ 0x09, 0x04 /* LangID = 0x0409: US English */ }; const uint8_t USB_StringVendor[SIZ_STRING_VENDOR] = { SIZ_STRING_VENDOR, /* Size of Vendor string */ 0x03, /* bDescriptorType*/ /* Manufacturer: "Amon-Ra" */ 'A', 0, 'm', 0, 'o', 0, 'n', 0, '-', 0, 'R', 0, 'a', 0 }; const uint8_t USB_StringProduct[SIZ_STRING_PRODUCT] = { SIZ_STRING_PRODUCT, /* bLength */ 0x03, /* bDescriptorType */ /* Product name: "USB LCD" */ 'U', 0, 'S', 0, 'B', 0, ' ', 0, 'L', 0, 'C', 0, 'D', 0 }; uint8_t USB_StringSerial[SIZ_STRING_SERIAL] = { SIZ_STRING_SERIAL, /* bLength */ 0x03, /* bDescriptorType */ 'U', 0, 'S', 0, 'B', 0, 'L', 0, 'C', 0, 'D', 0, '0', 0, '1', 0 }; 


    рдпреВрдирд┐рдХреЛрдб рдХреЗ рддрд╛рд░реЛрдВ рдХреЛ рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
    рдЕрдВрдд рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рднрд░реЗрдВ:

    рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдПрдВ
     ONE_DESCRIPTOR Device_Descriptor = { (uint8_t*)USB_DeviceDescriptor, SIZ_DEVICE_DESC }; ONE_DESCRIPTOR Config_Descriptor = { (uint8_t*)USB_ConfigDescriptor, SIZ_CONFIG_DESC }; ONE_DESCRIPTOR String_Descriptor[4] = { {(uint8_t*)USB_StringLangID, SIZ_STRING_LANGID}, {(uint8_t*)USB_StringVendor, SIZ_STRING_VENDOR}, {(uint8_t*)USB_StringProduct, SIZ_STRING_PRODUCT}, {(uint8_t*)USB_StringSerial, SIZ_STRING_SERIAL} }; 


  3. Usb_conf.h рдореЗрдВ рдХреБрдЫ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

    Usb_conf.h рдХреЛрдб
     #define EP_NUM 0x02 #define BTABLE_ADDRESS (0x00) /* EP0 */ /* rx/tx buffer base address */ #define ENDP0_RXADDR (0x40) #define ENDP0_TXADDR (0x80) /* EP1 */ /* tx buffer base address */ #define ENDP1_RXADDR (0xC0) /* IMR_MSK */ /* mask defining which events has to be handled */ /* by the device application software */ #define IMR_MSK (CNTR_CTRM | CNTR_RESETM) 


    рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдкрд╡рд╛рдж IMR_MSK рд╣реИ , рдПрдХ рдореБрдЦреМрдЯрд╛ рдЬреЛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпреВрдПрд╕рдмреА рдЗрдВрдЯрд░рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рд╕рд╣реА рдиреНрдпреВрдирддрдо рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ - рд╕рд╣реА рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ рд░реАрд╕реЗрдЯ рдХрд╛ рд░реБрдХрд╛рд╡рдЯред
    рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкрддреЗ рддрдерд╛рдХрдерд┐рдд рдкреАрдПрдордП, рдкреИрдХреЗрдЯ рдореЗрдореЛрд░реА рдПрд░рд┐рдпрд╛ рдХреЗ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдкреИрдХреЗрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рджреЛрдиреЛрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рдкреИрдХреЗрдЯ рдЖрдХрд╛рд░ 64 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рд╕реЗрдЯ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЙрдЪрд┐рдд рдХрджрдо рдХреЗ рд╕рд╛рде рд░рдЦрддреЗ рд╣реИрдВ, рдЗрди рд╕рдорд╛рди рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкрддреЗ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рди рднреА рд▓реЗрддрд╛ рд╣реИред
  4. рдЕрдм рд╣рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпреЗ рдХреЙрд▓рдмреИрдХ DEVICE_PROP рдФрд░ USER_STANDARD_REQUESTS рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реИрдВ, рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА Device_Property рдФрд░ User_Standard_Requests рдирд╛рдореЛрдВ рдХреЗ рддрд╣рдд рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗ ред
    рдпреВрдПрд╕рдмреА рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдХреЙрд▓рдмреИрдХ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп USB рдЪрдВрдХ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╢реБрд░реБрдЖрддреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдпреВрдПрд╕рдмреА рд▓рд╛рдЗрди рдкрд░ рдкреБрд▓-рдЕрдк рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ, рдЬреЛ рд╣рдореЗрдВ рдмрд╕ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реИред

    рд╢реВрдиреНрдп Device_init ()
     void Device_init() { DEVICE_INFO *pInfo = &Device_Info; pInfo->Current_Configuration = 0; _SetCNTR(CNTR_FRES); //Reset USB block _SetCNTR(0); //Deassert reset signal _SetISTR(0); //Clear pending interrupts USB_SIL_Init(); GPIO_ResetBits(GPIOC, GPIO_Pin_13); //Enable pull-up } 


    рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓рдмреИрдХ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореЗрдЬрдмрд╛рди рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд░реАрд╕реЗрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ:

    рд╢реВрдиреНрдп Device_Reset ()
     void Device_Reset() { //Set device as not configured pInformation->Current_Configuration = 0; pInformation->Current_Interface = 0; //the default Interface /* Current Feature initialization */ pInformation->Current_Feature = USB_ConfigDescriptor[7]; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); SetEPType(ENDP1, EP_BULK); SetEPRxAddr(ENDP1, ENDP1_RXADDR); SetEPRxCount(ENDP1, 0x40); SetEPRxStatus(ENDP1, EP_RX_VALID); SetEPTxStatus(ENDP1, EP_TX_DIS); /* Set this device to response on default address */ SetDeviceAddress(0); } 


    , 0, .
    ,

     #define Device_Status_In NOP_Process #define Device_Status_Out NOP_Process 

    , , , , , .
    , - Control Endpoint 0, :

     RESULT Device_Data_Setup(uint8_t RequestNo) { return USB_UNSUPPORT; } RESULT Device_NoData_Setup(uint8_t RequestNo) { return USB_UNSUPPORT; } 

    , , , , . - , .
    , , . , USB_UNSUPPORT .

     RESULT Device_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting) { if (AlternateSetting > 0) { return USB_UNSUPPORT; } else if (Interface > 0) { return USB_UNSUPPORT; } return USB_SUCCESS; } 

    STM , :

     uint8_t *Device_GetDeviceDescriptor(uint16_t Length) { return Standard_GetDescriptorData(Length, &Device_Descriptor); } uint8_t *Device_GetConfigDescriptor(uint16_t Length) { return Standard_GetDescriptorData(Length, &Config_Descriptor); } uint8_t *Device_GetStringDescriptor(uint16_t Length) { uint8_t wValue0 = pInformation->USBwValue0; if (wValue0 > 4) { return NULL; } else { return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]); } } 


    , :

     DEVICE_PROP Device_Property = { Device_init, Device_Reset, Device_Status_In, Device_Status_Out, Device_Data_Setup, Device_NoData_Setup, Device_Get_Interface_Setting, Device_GetDeviceDescriptor, Device_GetConfigDescriptor, Device_GetStringDescriptor, 0, 0x40 /*MAX PACKET SIZE*/ }; 

  5. , User_Standard_Requests .
    тАФ .. HID - , , NOP_Process . , User_SetDeviceAddress тАУ , .

    User_Standard_Requests
     #define Device_GetConfiguration NOP_Process #define Device_SetConfiguration NOP_Process #define Device_GetInterface NOP_Process #define Device_SetInterface NOP_Process #define Device_GetStatus NOP_Process #define Device_ClearFeature NOP_Process #define Device_SetEndPointFeature NOP_Process #define Device_SetDeviceFeature NOP_Process #define Device_SetDeviceAddress NOP_Process USER_STANDARD_REQUESTS User_Standard_Requests = { Device_GetConfiguration, Device_SetConfiguration, Device_GetInterface, Device_SetInterface, Device_GetStatus, Device_ClearFeature, Device_SetEndPointFeature, Device_SetDeviceFeature, Device_SetDeviceAddress }; 


  6. , :
     __IO uint16_t wIstr; DEVICE Device_Table = { EP_NUM, 1 }; 

    , ( ) .
  7. тАУ , :

    void USB_Interrupts_Config(void) void Set_USBClock()
     void USB_Interrupts_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void Set_USBClock() { /* Select USBCLK source */ RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); /* Enable the USB clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); } 


    .
    Low-Priority ( , ), .
    Isochronous Bulk , ( ). , .
    USB 1.5 (48 ) USB.
  8. , , .

     void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); } void USB_LP_CAN1_RX0_IRQHandler(void) { wIstr = _GetISTR(); #if (IMR_MSK & ISTR_CTR) if (wIstr & ISTR_CTR & wInterrupt_Mask) { CTR_LP(); } #endif #if (IMR_MSK & ISTR_RESET) if (wIstr & ISTR_RESET & wInterrupt_Mask) { _SetISTR((uint16_t)CLR_RESET); Device_Property.Reset(); } #endif } 


    , тАУ USB , USB LCD, . , Bulk Endpoint 1 , .
  9. тАУ , NOT_ADDRESSED TRANSFER_IN_PROGRESS . , 8 , X Y ( 16- ) , , . ( ) , , . , , , - , . , . , .
    , тАУ , PMAToUserBufferCopy , . , - ?
    PMAToUserBufferCopy , PMAToLCDBufferCopy , :

     void PMAToLCDBufferCopy(uint16_t wPMABufAddr, uint16_t offset ,uint16_t wNBytes) { uint32_t n = (wNBytes + 1) >> 1; uint32_t i; uint32_t *pdwVal; pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr+offset); for (i = n; i != 0; i--) LCD_WRITE_RAM(*pdwVal++); } 

    :

     void EP1_OUT_Callback(void) { uint16_t dataLen = GetEPRxCount(EP1_OUT & 0x7F); uint16_t offset=0; if(GraphicsState==NOT_ADDRESSED) { if(dataLen<=8) { SetEPRxStatus(ENDP1, EP_RX_VALID); return; } PMAToUserBufferCopy(buffer, GetEPRxAddr(EP1_OUT & 0x7F), 8); uint16_t horz = *((uint16_t*)(buffer)); uint16_t vert = *(uint16_t*)(buffer+2); dataTotal = *(uint32_t*)(buffer+4); LCD_WRITE_REGISTER(CTR_HORZ_ADDRESS,vert); //  LCD_WRITE_REGISTER(CTR_VERT_ADDRESS,horz); offset=16; dataTransfered=0x00; GraphicsState=TRANSFER_IN_PROGRESS; dataLen-=8; } LCD_BEGIN_RAM_WRITE; PMAToLCDBufferCopy(GetEPRxAddr(EP1_OUT & 0x7F), offset, dataLen); dataTransfered+=(dataLen)>>1; if(dataTransfered>=dataTotal) GraphicsState=NOT_ADDRESSED; SetEPRxStatus(ENDP1, EP_RX_VALID); } 


    , , , ( ) NOP_Process :

    рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЙрд▓рдмреИрдХ рд╕рдВрд░рдЪрдирд╛рдПрдБ
     void (*pEpInt_IN[7])(void) = { NOP_Process, NOP_Process, NOP_Process, NOP_Process, NOP_Process, NOP_Process, NOP_Process, }; void (*pEpInt_OUT[7])(void) = { EP1_OUT_Callback, NOP_Process, NOP_Process, NOP_Process, NOP_Process, NOP_Process, NOP_Process, }; 



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

рддреЛ рд╕рдмрд╕реЗ рд╕реБрдЦрдж рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ - рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА LibUSB рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдиреАрдЪреЗ рд╕реЗ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА) рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ C #, LibUSB.Net рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ - рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдбреНрд░рд╛рдЗрд╡рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЙрд╕ рдирд╛рдо рдХреЗ рддрд╣рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИред ред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдХреЛрдб рднреА рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ InfWizard рдЪрд▓рд╛рдПрдВред рд╣рдо рд╕реВрдЪреА рдореЗрдВ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ inf-file рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ libusb рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ Test_bulk рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдУрдкрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд▓рд╛рдЗрди рдореЗрдВ 8 рд╕реЗ рдЕрдзрд┐рдХ рдЕрдХреНрд╖рд░ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВред "рд░рд╛рдЗрдЯ" рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣реЗрдбрд░ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡реЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдХрдИ рд░рдВрдЧреАрди рдбреЙрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдмреЗрд╢рдХ, рдпрд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ Test_Bulk рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рд▓рд┐рдЦреЗрдВ рдмрдЯрди рдХреЗ рд╣реИрдВрдбрд▓рд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред

 var bytesToWrite = File.ReadAllBytes("D:\\myfile.raw"); 

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

рдЗрд╕реЗ рдЪреБрдирд╛: рдЗрд╕реЗ рд╕рд╛рдЗрдб рдореЗрдВ рдШреБрдорд╛рдПрдВ, рдлрд┐рд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдмреАрдПрдордкреА рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЫрд╡рд┐ рдХреЛ рд▓рдВрдмрд╡рдд рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреЛрдб рдореЗрдВ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд╣рдо 16-рдмрд┐рдЯ RGB565 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред
рд╣рдордиреЗ рдХреБрдЫ рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╣рд▓реЗ 0x40 рдмрд╛рдЗрдЯреНрд╕ (рд╣реЗрдбрд░) рдХрд╛рдЯ рджрд┐рдпрд╛, рдмрд╛рдХреА рдПрдХ рдХрдЪреНрдЪрд╛ рдмрд┐рдЯрдореИрдк рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдореЗрдВ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ USB рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВ - рдЖрдЙрдЯрдкреБрдЯ рдПрдбреНрд░реЗрд╕ (0000, 0000) рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ (320x240) рдореЗрдВ рдбреЗрдЯрд╛ рд▓рдВрдмрд╛рдИ - 002C0100
рдпрд╣ рд╕рдм, рдЗрд╕реЗ рдЙрд╕ рдирд╛рдо рдХреЗ рддрд╣рдд рд╕рд╣реЗрдЬреЗрдВ рдЬреЛ Test_bulk рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдПрдВ, рд▓рд┐рдЦреЗрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рд╡рд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рд╣реИ рд▓реЗрдЦ рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рддрдм рдордВрдЪ рдХреА рдЕрдЦрдВрдбрддрд╛ рдЦреЛ рдЬрд╛рдПрдЧреАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдВрдд рддрдХ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ - рд╣рдо рдЕрдВрдд рдореЗрдВ рд░рд╛рдЙрдЯрд░ рд▓реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЪрд╛рд▓рдХ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ OpenWRT рдХреЗ рддрд╣рдд рд╣рдорд╛рд░реЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рддрдХ!

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


All Articles