Skocz do zawartości

Kurs STM32 F1 HAL - #7 - liczniki (timery) w praktyce, PWM


Pomocna odpowiedź

@Harry_man Jesteś pewien, że przerabiasz ten kurs na STM32F103? Pytam, bo przykłady dotyczą tylko mikrokontrolera F103, na innych mają pełne prawo nie działać.

Dawno nie zaglądałem do kodu HAL na F1, więc wiele mogło się zmienić, ale nie widzę pola Alternate w strukturze GPIO_InitTypeDef (https://github.com/STMicroelectronics/STM32CubeF1/blob/master/Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h) - więc albo mamy inne wersje biblioteki, albo inny mikrokontroler. I jeśli różnica wynika z użycia innego modelu mikrokontrolera to miałbym prośbę do admina o wydzielenie dyskusji, bo chyba nie dotyczy tego kursu.

  • Lubię! 1
Link to post
Share on other sites

 ten kod mi nie działa wyskakuja błedy

image.thumb.png.26b0713c3eccf4577ab1f3faca4ce55c.png a skopiowałam dokładnie tak jak w kursie jest 

#include "stm32f1xx.h"
 
TIM_HandleTypeDef tim2;
 
void TIM2_IRQHandler(void)
{
	HAL_TIM_IRQHandler(&tim2);
}
 
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_RESET)
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
	else
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
 
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_SET);
}
 
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
	switch (htim->Channel) {
	case HAL_TIM_ACTIVE_CHANNEL_1:
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_RESET);
		break;
	case HAL_TIM_ACTIVE_CHANNEL_2:
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET);
		break;
	case HAL_TIM_ACTIVE_CHANNEL_3:
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
		break;
	case HAL_TIM_ACTIVE_CHANNEL_4:
		HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
		break;
	default:
		break;
	}
}
 
int main(void)
{
	SystemCoreClock = 8000000; // taktowanie 8Mhz
	HAL_Init();
 
	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOC_CLK_ENABLE();
	__HAL_RCC_TIM2_CLK_ENABLE();
 
	GPIO_InitTypeDef gpio;
	gpio.Mode = GPIO_MODE_OUTPUT_PP;
	gpio.Pin = GPIO_PIN_5;
	gpio.Pull = GPIO_NOPULL;
	gpio.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(GPIOA, &gpio);
 
	gpio.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
	HAL_GPIO_Init(GPIOC, &gpio);
 
	tim2.Instance = TIM2;
	tim2.Init.Period = 1000 - 1;
	tim2.Init.Prescaler = 8000 - 1;
	tim2.Init.ClockDivision = 0;
	tim2.Init.CounterMode = TIM_COUNTERMODE_UP;
	tim2.Init.RepetitionCounter = 0;
	tim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
	HAL_TIM_Base_Init(&tim2);
	HAL_TIM_Base_Start_IT(&tim2);
	HAL_NVIC_EnableIRQ(TIM2_IRQn);
 
	__HAL_TIM_SET_COMPARE(&tim2, TIM_CHANNEL_1, 100);
	__HAL_TIM_SET_COMPARE(&tim2, TIM_CHANNEL_2, 200);
	__HAL_TIM_SET_COMPARE(&tim2, TIM_CHANNEL_3, 500);
	__HAL_TIM_SET_COMPARE(&tim2, TIM_CHANNEL_4, 900);
	__HAL_TIM_ENABLE_IT(&tim2, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4);
 
	while (1) {
	}
}

co jest w takim razie zle?

Link to post
Share on other sites

U mnie powyższy kod działa. Wydaje mi się, że problem leży gdzieś w strukturze projektu lub jego ustawieniach. Sugeruję stworzyć nowy projekt (zgodnie z tym jak opisane to było w trzeciej części kursu), wkleić kod do pliku main.c (w folderze src) a następnie sprawdzić czy działa. W przypadku gdyby nie działało, w zakładce Problems, w dolnej części IDE, będą wypisane błędy które wypiszą co jest nie tak 😄

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Faktycznie to było coś z ustawieniami w projekcie ale i tak dziwne bo ja wtedy pisałam jakby na tym starym projekcie co wcześniej mi działały kody

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.