STM32 рдмреВрдЯрд▓реЛрдбрд░ DFU рдореЛрдб CubeMX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред рдХрджрдо рд╕реЗ рдХрджрдо рдирд┐рд░реНрджреЗрд╢

рдЗрд╕рд▓рд┐рдП, STMicroelectronics рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд▓рдЧрднрдЧ рдкреВрд░реНрдг рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдордВрдбреЛрд░рд┐рдпрд▓ рдХреЗ рдХрд╛рдо рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХрднреА-рдХрднреА рдмрд╣реБрдд рд╡реНрдпрд╕реНрдд рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмреВрдЯрд▓реЛрдбрд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖ рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреЗ рд▓рд┐рдП "рддреЗрдЬ" рд╣реЛрддреА рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рд╛рдордЧреНрд░реА рдореЗрдВ CubeMX рдкреИрдХреЗрдЬ, DfuSeDemo "рдмреВрдЯрд▓реЛрдбрд░" рдФрд░ Dfu рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдлрд╝рд░реНрдорд╡реЗрдпрд░ рддреИрдпрд╛рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╣рдо рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЗ рд╣рдорд╛рд░реА рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ рдХреЛ рд╕рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдХреНрд░реЛ рдЕрд╕реЗрдВрдмрд▓рд░ рдФрд░ рдбреЗрдЯрд╛рд╢реАрдЯ рдЧреБрд░реБ рдХреЛ рдХреНрд╖рдорд╛ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдкрдХрд╛ рд░рд╣рд╛ рд╣реИ ...

рд╣рдореЗрдВ CubeMX рдХреА рд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, DfuSeDemo + Dfu рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдбрд╛рдЙрдирд▓реЛрдб, рд╕рднреА рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИрдВ, STM32 ST-LINK рдЙрдкрдпреЛрдЧрд┐рддрд╛, рд╣рдо рд╕рдм рдХреБрдЫ STMicroelectronics рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдореБрдлреНрдд рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВред

рдЕрдВрдХрд▓ рд▓рд┐рдпрд╛рдУ рдХреА STM32F103C8T6 рдЪрд┐рдк рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЫрдбрд╝реА

рдЫрд╡рд┐

рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдПрд╕рдЯреА-рд▓рд┐рдВрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ред

рдЫрд╡рд┐

рдЦреИрд░, рдЖрдкрдХреА рдкрд╕рдВрджреАрджрд╛ рдЖрдИрдбреАрдИ, рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рд╣рдо рдХреЗрдИрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рдЖрдИрдбреАрдИ рдореЗрдВ рд╕рдВрдХрд▓рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВред

рддреЛ рдЪрд▓рд┐рдП рдЬрд╛рдиреЗ ...

CubeMX рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ...

рдЫрд╡рд┐

рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛-рд╕реВрдЪреА рдХрд╛ рдЬрд╢реНрди рдордирд╛рдПрдВ ...

рдЫрд╡рд┐

рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдо USB рдбрд┐рд╡рд╛рдЗрд╕ тЖТ рдбрд┐рд╡рд╛рдЗрд╕ FS рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рддрджрдиреБрд╕рд╛рд░, USB рдбрд┐рд╡рд╛рдЗрд╕ тЖТ рдбрд╛рдЙрдирд▓реЙрдб рдЕрдкрдбреЗрдЯ рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдХреНрд▓рд╛рд╕, рдФрд░ рдЕрд╡рд┐рд╕реНрдорд░рдгреАрдп RCC тЖТ рд╣рд╛рдИ рд╕реНрдкреАрдб рдХреНрд▓реЙрдХ тЖТ рдХреНрд░рд┐рд╕реНрдЯрд▓ / рд╕рд┐рд░реЗрдорд┐рдХ рд░реЗрд╕реЛрдиреЗрдЯрд░ рдмреЛрд░реНрдб рдкрд░ рдПрдХ рд╣реИред

рдЕрдЧрд▓рд╛, рдмреВрдЯрд▓реЛрдбрд░-рдПрдХ рдореЛрдб рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрд╕ рдореМрдЬреВрджрд╛ рдмреВрдЯ 1 рдЬрдореНрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЫрд╡рд┐

рд╣рдо рдЫреЛрдЯреА рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░, рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдмреВрдЯ 1 рдХреЛ рдкреАрдмреА 2 рдХреЗ рдкреИрд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ GPIO_Input рдореЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдХрд┐рдпрд╛, рдШрдбрд╝реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреИрдм рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрдпрди рдорд╢реАрди рд╢реБрд░реВ рдХрд░реЗрдВред

рдЫрд╡рд┐
Cofiguration рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ ...

рдЫрд╡рд┐

GPIO рдмрдЯрди рдЪреБрдиреЗрдВ ...

рдЫрд╡рд┐

рдФрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ ...

рдЫрд╡рд┐
рдПрдХ рдХрд╕реНрдЯрдо рд▓реЗрдмрд▓ рд▓рд┐рдЦреЗрдВ, рдЗрд╕реЗ boot1 рд╣реЛрдиреЗ рджреЗрдВред

рдЕрдЧрд▓рд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ ...

рдЫрд╡рд┐

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪреБрдиреЗрдВ тЖТ рд╕реЗрдЯрд┐рдВрдЧ ...

рдЫрд╡рд┐

рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рднрд░реЗрдВтАжред

рдЫрд╡рд┐

рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЪреБрдирддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдЖрдИрдбреАрдИ рдХреНрдпреВрдм рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдордбреАрдХреЗ-рдПрдЖрд░рдПрдо рд╡реА 5ред

рдЗрд╕ рдЕрд╡рддрд╛рд░ рдореЗрдВ рдХреЛрдб рдЬреЗрдирд░реЗрдЯрд░ рдЯреИрдм рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдЧрд╛ ...

рдЫрд╡рд┐

рдЦреИрд░, рдпрд╣ рд╕рдм рд╣реИ, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдкреАрдврд╝реА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ тЖТ рдЬрдирд░реЗрдЯ рдХреЛрдб

рдЫрд╡рд┐

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

рдЫрд╡рд┐

рдЫрд╡рд┐

рд╣рдо рд╕рдВрдХрд▓рди рдФрд░ рд╕рдВрдпреЛрдЬрди рдФрд░ рдХреНрд░рд┐рд╕реНрдЯрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ... F7, F8 ...

рдЫрд╡рд┐

рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо ...

рд╣рдо рдЕрдкрдиреЗ рдмреЛрд░реНрдб рдореЗрдВ рд▓рдЧреЗ рдкрд┐рди рдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ USB рдХреЗрдмрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ ...

рдЫрд╡рд┐

рдЫрд╡рд┐

рд╡рд┐рдВрдбреЛрдЬ тЖТ рд╕рд┐рд╕реНрдЯрдо тЖТ рдбрд┐рд╡рд╛рдЗрд╕ рдореИрдиреЗрдЬрд░ тЖТ рдпреВрдПрд╕рдмреА рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдЦреЛрд▓реЗрдВред рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦреЗрдВ, рд╡рд┐рдВрдбреЛрдЬ рдереЛрдбрд╝реА рд╕реА рд╕рд░рд╕рд░рд╛рд╣рдЯ рдХрд░реЗрдЧрд╛ рдФрд░ DFM рдореЛрдб рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ STM рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ (рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рдерд╛)ред

рддреЛ, рдбреНрд░рд╛рдЗрд╡рд░ рдиреЗ рдЙрдардХрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, "рдмреВрдЯ" DfuSeDemo рд╢реБрд░реВ ...

рдЫрд╡рд┐

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ DFU рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХреНрдпрд╛ рдкрдХрдбрд╝рд╛ рдФрд░ рд╕рд┐рд▓реЗрдХреНрдЯ рдЯрд╛рд░реНрдЧреЗрдЯ рдлреАрд▓реНрдб рдкрд░ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ...

рдЫрд╡рд┐

рд╣рдо рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЪрдорддреНрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрддрд╛ 0x0800C000 рддрдХ рдлрд╝реНрд▓реИрд╢ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рдкрддреЗ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...

рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕реЗ STM32F407VE рдкрд░ рдЖрдЬрд╝рдорд╛рдпрд╛, рдЬрд╣рд╛рдБ рдореЗрдореЛрд░реА 0x08000000 рд╕реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рд╣реИ, рдпрд╛рдиреА рд╢реБрд░реВ рд╕реЗ рд╣реА ... рдХреНрдпреЛрдВ, рд╣рдорд╛рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЦреБрджрд╛рдИ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдХрд╣реАрдВ рджрдлрди рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЛрдИ рдХрдорд▓ рдирд╣реАрдВ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрдбрд╝рд╛ рдЯреБрдХрдбрд╝рд╛ рдорд╛рд▓рд┐рдХ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ... рд╢рд╛рдпрдж рдХреЛрдИ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХрд╣рд╛рдВ рдЦреЛрджрдирд╛ рд╣реИ ...

рддреЛ, "рдмрд╛рд▓ рдХрдЯрд╡рд╛рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рд╣реЛ рдЪреБрдХреА рд╣реИ" ...

рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдЪрд╛рд╣рд┐рдП ...

рдЫрд╡рд┐

рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЖрдИрдбреАрдИ рдореЗрдВ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ...

рд╣рдо рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм USER COEG BEGIN рдФрд░ USER CODE END рдХреЗ рдмреАрдЪ рдЗрдВрд╕рд░реНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рддреЛ CubeMX TOGETHER рди рд╣реЛ ... рд╡рд╣рд╛рдБ рд╣рдо рдЕрдкрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВрдЧреЗ ...

рдЪрд▓рд┐рдП main.c рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

/* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ typedef void (*pFunction)(void); pFunction JumpToApplication; uint32_t JumpAddress; /* USER CODE END PV */ . . . /* USER CODE BEGIN 0 */ uint32_t AddressMyApplicationBegin = 0x0800C000; uint32_t AddressMyApplicationEnd = 0x0800FBFC; /* USER CODE END 0 */ . . . /* USER CODE BEGIN 2 */ /* Check if the KEY Button is pressed */ if(HAL_GPIO_ReadPin(boot1_GPIO_Port, boot1_Pin ) == GPIO_PIN_SET) { /* Test if user code is programmed starting from address 0x0800C000 */ if (((*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ JumpAddress = *(__IO uint32_t *) (USBD_DFU_APP_DEFAULT_ADD + 4); JumpToApplication = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t *) USBD_DFU_APP_DEFAULT_ADD); JumpToApplication(); } } MX_USB_DEVICE_Init(); /*      */ /* USER CODE END 2 */ . . . 

рдпрд╣ рд╕рдм main.c рдХреЗ рд╕рд╛рде рд╣реИ ...

usbd_conf.h рдФрд░ рдкрд░ рдЬрд╛рдПрдВ

 #define USBD_DFU_APP_DEFAULT_ADD 0x0800000 

рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдУ ...

 #define USBD_DFU_APP_DEFAULT_ADD 0x080C000 //     тАж 

рд╣рдо рдпрд╣рд╛рдБ usbd_dfu_it.c рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдзрд┐рдХ ....

 . . . /* USER CODE BEGIN PRIVATE_TYPES */ extern uint32_t AddressMyApplicationBegin; extern uint32_t AddressMyApplicationEnd; /* USER CODE END PRIVATE_TYPES */ . . . /* USER CODE BEGIN PRIVATE_DEFINES */ #define FLASH_ERASE_TIME (uint16_t)50 #define FLASH_PROGRAM_TIME (uint16_t)50 /* USER CODE END PRIVATE_DEFINES */ . . .   ,    ┬л┬╗  тАж uint16_t MEM_If_Init_FS(void) { /* USER CODE BEGIN 0 */ HAL_StatusTypeDef flash_ok = HAL_ERROR; //   while(flash_ok != HAL_OK){ flash_ok = HAL_FLASH_Unlock(); } return (USBD_OK); /* USER CODE END 0 */ } . . . uint16_t MEM_If_DeInit_FS(void) { /* USER CODE BEGIN 1 */ HAL_StatusTypeDef flash_ok = HAL_ERROR; //  flash_ok = HAL_ERROR; while(flash_ok != HAL_OK){ flash_ok = HAL_FLASH_Lock(); } return (USBD_OK); /* USER CODE END 1 */ } . . . uint16_t MEM_If_Erase_FS(uint32_t Add) { /* USER CODE BEGIN 2 */ uint32_t NbOfPages = 0; uint32_t PageError = 0; /* Variable contains Flash operation status */ HAL_StatusTypeDef status; FLASH_EraseInitTypeDef eraseinitstruct; /* Get the number of sector to erase from 1st sector*/ NbOfPages = ((AddressMyApplicationEnd - AddressMyApplicationBegin) / FLASH_PAGE_SIZE) + 1; eraseinitstruct.TypeErase = FLASH_TYPEERASE_PAGES; eraseinitstruct.PageAddress = AddressMyApplicationBegin; eraseinitstruct.NbPages = NbOfPages; status = HAL_FLASHEx_Erase(&eraseinitstruct, &PageError); if (status != HAL_OK) { return (!USBD_OK); } return (USBD_OK); /* USER CODE END 2 */ } . . . uint16_t MEM_If_Write_FS(uint8_t *src, uint8_t *dest, uint32_t Len) { /* USER CODE BEGIN 3 */ uint32_t i = 0; for(i = 0; i < Len; i+=4) { /* Device voltage range supposed to be [2.7V to 3.6V], the operation will be done by byte */ if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, (uint32_t)(dest+i), *(uint32_t*)(src+i)) == HAL_OK) { // Usart1_Send_String("MEM_If_Write_FS OK!"); /* Check the written value */ if(*(uint32_t *)(src + i) != *(uint32_t*)(dest+i)) { /* Flash content doesn't match SRAM content */ return 2; } } else { /* Error occurred while writing data in Flash memory */ return (!USBD_OK); } } return (USBD_OK); /* USER CODE END 3 */ } . . . uint8_t *MEM_If_Read_FS (uint8_t *src, uint8_t *dest, uint32_t Len) { /* Return a valid address to avoid HardFault */ /* USER CODE BEGIN 4 */ uint32_t i = 0; uint8_t *psrc = src; for (i = 0; i < Len; i++) { dest[i] = *psrc++; } return (uint8_t*)(dest); /* ,     */ /* USER CODE END 4 */ } . . . uint16_t MEM_If_GetStatus_FS (uint32_t Add, uint8_t Cmd, uint8_t *buffer) { /* USER CODE BEGIN 5 */ switch (Cmd) { case DFU_MEDIA_PROGRAM: buffer[1] = (uint8_t)FLASH_PROGRAM_TIME; buffer[2] = (uint8_t)(FLASH_PROGRAM_TIME << 8); buffer[3] = 0; break; case DFU_MEDIA_ERASE: default: buffer[1] = (uint8_t)FLASH_ERASE_TIME; buffer[2] = (uint8_t)(FLASH_ERASE_TIME << 8); buffer[3] = 0; break; } return (USBD_OK); /* USER CODE END 5 */ } 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕рдм ...

рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХреВрджрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдПрдл 7, рдПрдл 8 рдФрд░ рдмреЛрдЯрд▓реЛрдбрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ...

рдХреНрдпрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ...

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

рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмреЙрдбреА рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЧрд╣реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдиреНрдЪ рдФрд░ рдЗрдВрдЯрд░рдкреНрдЯ рд╡реИрдХреНрдЯрд░ рдХрд╛ рдкрддрд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП ...

KEIL рдореЗрдВ рдирд╛рдорд╛рдВрдХрд┐рдд тЖТ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ тЖТ рдлрд╝реНрд▓реИрд╢ рдЙрдкрдХрд░рдг

рдЫрд╡рд┐

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкрддрд╛ рдмрджрд▓реЗрдВ ...

рдЫрд╡рд┐

рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ HEX рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ

рдЫрд╡рд┐

рдФрд░ рд╕рджрд┐рд╢ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рдмрджрд▓реЗрдВ ...

F7 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕рдВрдЧреНрд░рд╣ ...

DEX рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд HEX рдХреЛ dfo рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ ...

рдЫрд╡рд┐

рдмрдЯрди S19 рдпрд╛ HEX ... рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╣реЗрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЬрдирд░реЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ...

рдЫрд╡рд┐

рд╣рдореЗрдВ dfu рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИред

рджрд░рдЕрд╕рд▓, рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред

рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ ...

рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдмреЛрд░реНрдб рдХреЛ USB рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдмреЛрдЯрд▓реЛрдбрд░ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬрдВрдкрд░реНрд╕ рдХреЛ DFU рдореЛрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред

рдЫрд╡рд┐

рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ DFM рдореЛрдб рдореЗрдВ STM рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
"рдмреВрдЯрд▓реЛрдбрд░" рдЪрд▓рд╛рдПрдВред

рдЫрд╡рд┐
рдЙрд╕реЗ рд╣рдорд╛рд░реА dfu рдлрд╝рд╛рдЗрд▓ рдмрддрд╛рдПрдВ ...

рдЫрд╡рд┐

рд╣рдо рдЕрдкрдЧреНрд░реЗрдб рджрдмрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ ... рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪреЗрдХ рджрдмрд╛рддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рд╕рдм рдХреБрдЫ рд╕рдлрд▓ рд╣реИ ... рдЖрдк рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ ...

рдЕрдЧрд░ рддреНрд░реБрдЯрд┐ рд╣реБрдИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдПрдХ рдЬрд╛рдВрдм ...

рдЫрд╡рд┐

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ...

рддреЛ, рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдлрд▓ рд╣реИ ... рдЬрдореНрдкрд░ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

рдЫрд╡рд┐

рдФрд░ рдирд┐рдорд┐рд╖ рдбрд╛рдпреЛрдб рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ ...
...
Ufffред рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдмрдХреЛрдлрдлред рддрд╕реНрд╡реАрд░реЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рдердХ рдЧрдП :-)

рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж ...

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


All Articles