Das intialisieren von µ ist eigentlich bestimmte register fullem mit die richtige Dateien. Um das zu erleichteren hat ST schone Librarys geschrieben, womit al diese Initialisierungen gemacht werden konnen. Fast alle Functionen nutzen dabei "Structures". Ein Structure ist ein Datensatz in C, welche man selbst zusammenstellen kan. Beispiel : In die TIM library ist diesen Structure programmiert :
Code:
/** 
  * @brief  TIM Time Base Init structure definition
  * @note   This sturcture is used with all TIMx except for TIM6 and TIM7.    
  */
typedef struct
{
  uint16_t TIM_Prescaler;         /*!< Specifies the prescaler value used to divide the TIM clock.
                                       This parameter can be a number between 0x0000 and 0xFFFF */
  uint16_t TIM_CounterMode;       /*!< Specifies the counter mode.
                                       This parameter can be a value of @ref TIM_Counter_Mode */
  uint16_t TIM_Period;            /*!< Specifies the period value to be loaded into the active
                                       Auto-Reload Register at the next update event.
                                       This parameter must be a number between 0x0000 and 0xFFFF.  */ 
  uint16_t TIM_ClockDivision;     /*!< Specifies the clock division.
                                      This parameter can be a value of @ref TIM_Clock_Division_CKD */
  uint8_t TIM_RepetitionCounter;  /*!< Specifies the repetition counter value. Each time the RCR downcounter
                                       reaches zero, an update event is generated and counting restarts
                                       from the RCR value (N).
                                       This means in PWM mode that (N+1) corresponds to:
                                          - the number of PWM periods in edge-aligned mode
                                          - the number of half PWM period in center-aligned mode
                                       This parameter must be a number between 0x00 and 0xFF. 
                                       @note This parameter is valid only for TIM1 and TIM8. */
} TIM_TimeBaseInitTypeDef;
Um diesen Structure zu nutzen machne wir erst eine "Variable Name" das diesen Structure hat : 'TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;"
Was men jetzt macht bei Init ist diese Structure erst fullen mit die richtige Daten, und dan wird mit eine Function " TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);" diesen Structure genutzt um alle Register zu setzen.
Wen wir noch eine 2den Timer intialisieren mochte, konnen wir die gleiche "Variable Name" nutzen, und ein zweite mal diesen Structuren mit daten fullen.
Die Daten von erste Mal werden dan ueberschrieben, aber das ist unwichtig, da wir schon alle Daten in register kopiert sind bei aufrufen von " TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);"
Die Reihenfolge ist naturlich sehr wichtig !! So, erst die Structure fullen mit Daten, dan die Init Function aufrufen, dan wen notwendig wieder fullen mit Daten für eine Zweite Timer, und dan wieder die Init Function aufrufen. Ich hffe das ich jetzt en bischen Klarheit geschafft haben in diese Materie.