Hallo !
Ich möchte unter GCC ARM /CooCox meinen TIMER2 am STM32F40 Discovery
Board initialisieren.
Dabei gibt es ja u.A. die Funktion in stm32f4xx_tim.c, um den Prescaler
zu konfigurieren:
1 | /**
|
2 | * @brief Configures the TIMx Prescaler.
|
3 | * @param TIMx: where x can be 1 to 14 to select the TIM peripheral.
|
4 | * @param Prescaler: specifies the Prescaler Register value
|
5 | * @param TIM_PSCReloadMode: specifies the TIM Prescaler Reload mode
|
6 | * This parameter can be one of the following values:
|
7 | * @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event.
|
8 | * @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediatly.
|
9 | * @retval None
|
10 | */
|
11 | void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
|
12 | {
|
13 | /* Check the parameters */
|
14 | assert_param(IS_TIM_ALL_PERIPH(TIMx));
|
15 | assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));
|
16 | /* Set the Prescaler value */
|
17 | TIMx->PSC = Prescaler;
|
18 | /* Set or reset the UG Bit */
|
19 | TIMx->EGR = TIM_PSCReloadMode;
|
20 | }
|
21 | ...
|
22 | ...
|
23 | #define TIM_PSCReloadMode_Update ((uint16_t)0x0000)
|
24 | #define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001)
|
In der Zeile TIMx->EGR = TIM_PSCReloadMode; wird doch aber das ganze
Register gesetzt, und nicht bloß das Bit-0. Es gibt ja andere
Funktionen, die andere Bits setzen, und der Aufruf würde ja diese
anderen Bits überschreiben (und umgekehrt).
Weiß der Compiler womöglich, dass er nur das Bit-0 setzen soll? Woher
sollte diese Info aber kommen? Wie funktioniert dies also???
Besten Dank für Hinweise, die mich auf die richtige Spur führen!
Michael