STM32 - рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлреНрд▓реИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ STMicroelectronics рдЙрд▓реНрд▓реЗрдЦрдиреАрдп 32-рдмрд┐рдЯ ARM рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ STM32 рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╡реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВ, рдЬреЛ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдПрдХ , рджреЛ рдФрд░ рддреАрди ред

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

рдпрд╣ рдЗрд╕ рдкрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЕрд░реНрдерд╛рддреН - рд╣рдорд╛рд░реЗ рдПрдордХреЗ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлреНрд▓реИрд╢ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред


рд╣рдо рдорди рдХреЛ рдзреВрдореНрд░рдкрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд▓реЗрдЦ рдкрдврд╝рддреЗ рд╣реИрдВ

рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд (рдпрд╛ рдмрд▓реНрдХрд┐, рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ) рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдлреНрд▓реИрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ:



рдХреЛрдб, рд╕рдВрдХрд▓рди, рдЬрд╛рдВрдЪ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрдм рддрдХ рдЖрдк рдЕрдиреБрдХреВрд▓рди рдЪрд╛рд▓реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╕рд╣реА рд╣реИред рдореИрдВ gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ -O1 рдФрд░ -O2 рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реВрдБред рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде - рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдШрдмрд░рд╛рд╣рдЯ рдореЗрдВ рдзреВрдореНрд░рдкрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдХреЙрдлреА рдкреАрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдпрд╛ рджреЛ рджрд┐рди рдмрд┐рддрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЪрдВрдЪрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд╕рдХреЗрдВред

рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдХреНрдпреЛрдВ рджреЗрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд╣реАрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕рд░рд▓ рдирд┐рдХрд▓рд╛ - FLASH-> SR рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрдд рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, BSY рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ ST рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди EOP рдмрд┐рдЯ рд╡рд░реНрддрдорд╛рди рдорд┐рдЯрд╛ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдХрдЪреНрдЪрд╛

рддрд╕реНрд╡реАрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдиреНрдп рд▓реЗрдЦ рдвреВрдВрдврдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд▓рд┐рдВрдХ рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рднреА рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реВрдВред

рдлреНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдЕрдирд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рдХрд╛рдо - рдЗрди рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдПрдордХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдлрдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB; 


рдлрд╝реНрд▓реИрд╢ рдкреГрд╖реНрда рдХреЛ рдорд┐рдЯрд╛рддреЗ рд╣реБрдП - рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдкрддреЗ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдлреНрд▓реИрд╢ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ:
 //pageAddress -  ,    void Internal_Flash_Erase(unsigned int pageAddress) { while (FLASH->SR & FLASH_SR_BSY); if (FLASH->SR & FLASH_SR_EOP) { FLASH->SR = FLASH_SR_EOP; } FLASH->CR |= FLASH_CR_PER; FLASH->AR = pageAddress; FLASH->CR |= FLASH_CR_STRT; while (!(FLASH->SR & FLASH_SR_EOP)); FLASH->SR = FLASH_SR_EOP; FLASH->CR &= ~FLASH_CR_PER; } 


рд░рд┐рдХреЙрд░реНрдб:
 //data -     //address -   flash //count -   ,    2 void Internal_Flash_Write(unsigned char* data, unsigned int address, unsigned int count) { unsigned int i; while (FLASH->SR & FLASH_SR_BSY); if (FLASH->SR & FLASH_SR_EOP) { FLASH->SR = FLASH_SR_EOP; } FLASH->CR |= FLASH_CR_PG; for (i = 0; i < count; i += 2) { *(volatile unsigned short*)(address + i) = (((unsigned short)data[i + 1]) << 8) + data[i]; while (!(FLASH->SR & FLASH_SR_EOP)); FLASH->SR = FLASH_SR_EOP; } FLASH->CR &= ~(FLASH_CR_PG); } 


рдпреЗ рдкрд┐рд╕ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдХрдо рдХреАрдбрд╝реЗ рд╣реИрдВред

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


All Articles