STM32 рднрд╛рдЧ 3: рдкрд╣рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛

рд╣рдо рдПрдХ рдРрд╕реЗ рд╕рдорд╛рдЬ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдорд╢реАрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЙрди рд╕рднреА рдХрд╛ рдЕрдзрд┐рдХ рдЕрдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред - рдбрдЧрд▓рд╕ рд░реБрд╢реНрдХреЛрдл


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

STM32 рднрд╛рдЧ 1:
STM32 рдореВрд▓ рдмрд╛рддреЗрдВ рднрд╛рдЧ 2: рдкреНрд░рд╛рд░рдВрдн

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

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

GPIO - рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯред рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХрд╛ рдмреНрд▓реЙрдХ рдЬреЛ рдЪрдордХрддреА рдПрд▓рдИрдбреА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд, рдпрд╣ рд╣рдорд╛рд░реЗ рдорд╛рдЗрдХреНрд░реЛрди, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯрд▓ рдХреЗ рдкреИрд░реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ рд╣реИред рдкрд░рд┐рдЪрд┐рдд Atmega328p (Arduino) рдХреЗ рд╡рд┐рдкрд░реАрдд, stm32 рдкреИрд░реЛрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдЧрд╛ рдкрд░ рдУрдкрди рдбреНрд░реЗрди рдлреБрдЯ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕ рдЧрддрд┐ рд╕реЗ рдпреВрдХреЗ рдкреИрд░ рдкрд░ рд╡реЛрд▓реНрдЯреЗрдЬ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

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

rcc.h

#define RCC_BASE   0x40023800

typedef struct
{
  volatile unsigned int CR;           
  volatile unsigned int PLLCFGR;      
  volatile unsigned int CFGR;         
  volatile unsigned int CIR;          
  volatile unsigned int AHB1RSTR;     
  volatile unsigned int AHB2RSTR;     
  volatile unsigned int AHB3RSTR;     
  unsigned int          RESERVED0;    
  volatile unsigned int APB1RSTR;     
  volatile unsigned int APB2RSTR;     
  unsigned int          RESERVED1[2]; 
  volatile unsigned int AHB1ENR;      
  volatile unsigned int AHB2ENR;      
  volatile unsigned int AHB3ENR;      
  unsigned int          RESERVED2;    
  volatile unsigned int APB1ENR;      
  volatile unsigned int APB2ENR;      
  unsigned int          RESERVED3[2]; 
  volatile unsigned int AHB1LPENR;    
  volatile unsigned int AHB2LPENR;    
  volatile unsigned int AHB3LPENR;    
  unsigned int          RESERVED4;    
  volatile unsigned int APB1LPENR;    
  volatile unsigned int APB2LPENR;    
  unsigned int          RESERVED5[2]; 
  volatile unsigned int BDCR;         
  volatile unsigned int CSR;          
  unsigned int          RESERVED6[2]; 
  volatile unsigned int SSCGR;        
  volatile unsigned int PLLI2SCFGR;   
  volatile unsigned int PLLSAICFGR;   
  volatile unsigned int DCKCFGR1;     
  volatile unsigned int DCKCFGR2;     

} RCC_Struct;

#define RCC ((RCC_Struct *) RCC_BASE)


рдЬреАрдкреАрдУ рд░рдЬрд┐рд╕реНрдЯрд░ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рджреВрд╕рд░рд╛ рдореИрдХреНрд░реЛ рдЬреЛрдбрд╝реЗрдВ, GPIO_OFFSETред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрд╛рдд рдХрд░реЗрдВред

gpio.h

#define GPIO_BASE   0x40020000
#define GPIO_OFFSET 0x400

typedef struct
{
   volatile unsigned int MODER;   
   volatile unsigned int OTYPER;  
   volatile unsigned int OSPEEDR; 
   volatile unsigned int PUPDR;   
   volatile unsigned int IDR;     
   volatile unsigned int ODR;     
   volatile unsigned int BSRR;    
   volatile unsigned int LCKR;    
   volatile unsigned int AFR[2];  

} GPIO_Struct;


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

RCC->AHB1ENR = 0; 


рдпрд╣ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдмрдЪрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЬ рдмрдЪрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВред

рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╣реЗрдбрд░ рддреИрдпрд╛рд░ рд╣реИрдВ, рдпрд╣ рд╕реАрдЦрдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рдЗрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рдорджрдж рд╕реЗ рдХреИрд╕реЗ рдХреВрджреЗрдВ рдФрд░ рдмрдирд╛рдПрдВ int main();ред рдпрд╣ рд╕рдм рд╕рд░рд▓ рд╣реИ рдФрд░ рдХрд╛рдлреА рдирд╣реАрдВ рд╣реИред STM32 рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░ рдмреНрд▓реЙрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЙрд╕ рдкрд░ рдПрдХ рдШрдбрд╝реА рдЬрдорд╛ рдХрд░рдиреА рд╣реЛрдЧреА, рдЕрдиреНрдпрдерд╛ рдбреЗрдЯрд╛ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЯрд╛рдпрд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд╣реВрдВ рд╡реИрд╕рд╛ рд╣реА рдмрдиреВрдВрдЧрд╛ред рдмреНрд▓рд╛рдХреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯрд╛рдпрд░реЛрдВ рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЗрдХрд╛рдИ AHB1 рдмрд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рдПрдПрдЪрдмреА 1 рдмрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкреЛрд░реНрдЯ I рд╣реИред рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдЗрдП рд╣рдорд╛рд░реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ int main () рдЬреЛрдбрд╝реЗрдВ; рдФрд░ рдлрд┐рд░ main.c рдлрд╛рдЗрд▓ рд╣реА рдмрдирд╛рдПрдВ

extern void *_estack;

void Reset_Handler();
void Default_Handler();

//   
int  main();

void NMI_Handler()                    __attribute__ ((weak, alias ("Default_Handler")));
void HardFault_Handler()              __attribute__ ((weak, alias ("Default_Handler")));

void *vectors[] __attribute__((section(".isr_vector"), used)) = {
    &_estack,
	&Reset_Handler,
	&NMI_Handler,
	&HardFault_Handler
};

extern void *_sidata, *_sdata, *_edata, *_sbss, *_ebss;



void __attribute__((naked, noreturn)) Reset_Handler()
{


	void **pSource, **pDest;
	for (pSource = &_sidata, pDest = &_sdata; pDest != &_edata; pSource++, pDest++)
		*pDest = *pSource;

	for (pDest = &_sbss; pDest != &_ebss; pDest++)
		*pDest = 0;

    //   
    main();

	while(1);
}

void __attribute__((naked, noreturn)) Default_Handler(){
    while(1);
}


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

#include "rcc.h"
#include "gpio.h"


int main()
{
    //  GPIO I ,   8 ( )
    RCC->AHB1ENR |= (1<<8);

    //     
    //          
    //      
    volatile GPIO_Struct *GPIOI = (GPIO_Struct *)(GPIO_BASE + (GPIO_OFFSET*8));  

    //     ""
    GPIOI->MODER |= (1<<2);

    //   ,   , push-pull,   .
    //   push pull
    GPIOI->OTYPER &= ~(1<<1);

    //      ,       
    GPIOI->OSPEEDR |= (2<<2);

    //   
    while(1){
        for(volatile int i = 0; i < 1000000; i++){
            // 
        }

        // ,   1   0  .
        GPIOI->ODR ^= (1<<1);
    }

    return 0;
}


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


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЖрд░рд╕реАрд╕реА рдЗрдХрд╛рдИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

All Articles