Witam, próbóję zrobić przyciemnianie diody techniką PWM, na kontrolerze STM32 discovery, ale i tak niezależnie jaką wartość ustawię dioda świeci tak samo, mógłby mi ktoś powiedzieć jak ten temat ugryźć w środowisku Keil?
tutaj mój kod: http://pastebin.com/x9EUkCiU
dziękuję za pomoc.

- Rejestracja:ponad 13 lat
- Ostatnio:20 dni
- Postów:174

- Rejestracja:ponad 13 lat
- Ostatnio:20 dni
- Postów:174
Witam, przerabiałem trochę przykład z paczki keil'a, i na podstawie funkcji z OpenStm32 próbowałem jakoś skonfigurować ten timer, gdyby ktoś mi mógł wytłumaczyć jak to zrobić w keilu, i jeszcze jakieś konkretne odnośniki do poczytania na ten temat (raczej próbuje ogarnąć sam tą konfiguracje rejestrów, ale w sumie z pomocą HAL też by mogło być). Więc w skrócie byłbym wdzięczny gdyby ktoś mi wytłumaczył jak tego PWM'a skonfigurować tutaj, tak, żeby działał, bo jak dotąd to kombinuję i bez efektów ;/.
- Rejestracja:prawie 9 lat
- Ostatnio:około 4 lata
- Postów:192
Na początek wywal obie funkcje zaczynające się u Ciebie od prefiksu "os": osKernelInitialize() oraz osKernelStart(). Mam wrażenie (niepotwierdzone jednak testami), że to drugie powoduje aktywację pętli schedulera w tym RTOS i ta funkcja nigdy nie wraca do main(). Sprawdź, bo to mało poprawek, a powinno pomóc.

- Rejestracja:ponad 13 lat
- Ostatnio:20 dni
- Postów:174
Wykombinowałem coś takiego ~~
void PWM_GPIO_INIT()
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__GPIOB_CLK_ENABLE();
/* Configure GPIO pins: PD12 PD13 PD14 PD15 */
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_11 | GPIO_PIN_13 | GPIO_PIN_15;
GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
GPIO_InitStruct.Alternate=GPIO_AF2_TIM4;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
void TIM4_Init(void)
{
TIM_HandleTypeDef hTim4;
// Configure TIM4 for PWM
__TIM4_CLK_ENABLE();
hTim4.Instance = TIM4;
hTim4.Init.Prescaler= 0; // (84MHz / 42000 = 2KHz)
hTim4.Init.CounterMode = TIM_COUNTERMODE_UP;
hTim4.Init.Period = 8399; // Period = 2000 -> 1 second
hTim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_PWM_Init(&hTim4);
// Configure channels 1-4 for TIM4,
// each channel is mapped to a GPIO pin
TIM_OC_InitTypeDef oc_config;
oc_config.OCMode = TIM_OCMODE_PWM2;
oc_config.Pulse = 1000;
oc_config.OCNIdleState = TIM_OCNIDLESTATE_RESET;
oc_config.OCIdleState = TIM_OCIDLESTATE_RESET;
oc_config.OCFastMode = TIM_OCFAST_DISABLE;
oc_config.OCPolarity = TIM_OCPOLARITY_HIGH;
oc_config.Pulse = 2099;
HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_1);
oc_config.Pulse = 4199;
HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_3);
// Flip the OC polarity for channels 2 and 4
oc_config.OCPolarity = TIM_OCPOLARITY_LOW;
oc_config.Pulse = 6299;
HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_2);
oc_config.Pulse = 8399;
HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_4);
// HAL_TIM_Base_Init(&hTim4);
// HAL_TIM_Base_Start(&hTim4);
HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_4);
}
Powiedzmy, że coś zaczyna działać, jeszcze trochę to muszę po poprawiać, ale może komuś się przydać (Stm32F4 HAL)
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.