Skocz do zawartości

Kurs STM32 - #4 - Sterowanie portami GPIO w praktyce


Pomocna odpowiedź

To w takim razie musisz zajrzeć do dokumentacji swojego mikrokontrolera lub poszukać odpowiednich przykładów. Na przykład w Twoim przypadku szyna, do której podłączony jest port GPIOA, nie nazywa się APB2 - pewną wskazówkę masz w komunikatach kompilatora u dołu programu (AHB). Analogicznie, w używanym przez Ciebie sprzęcie mogą nie istnieć pewne tryby (GPIO_mode) działania pinów układu, które istnieją w F103.

  • Lubię! 1
(edytowany)

Ogólnie w dokumentacji (F303) masz taki rysunek:

image.thumb.png.58809b91dd3c4e6629f622396dab5345.png

W dokumentacji F103 (takiej, jak w kursie) masz inny rysunek:

image.thumb.png.d358b0090e78c132c227bf4bdb46da63.png

Możesz jeszcze zajrzeć do dokumentu opisującego różnice między seriami:

https://www.st.com/content/ccc/resource/technical/document/application_note/8e/c8/8d/e3/ee/ff/44/e6/DM00073522.pdf/files/DM00073522.pdf/jcr:content/translations/en.DM00073522.pdf

Znajdziesz tam na przykład takie informacje:

image.thumb.png.74515923685ea56e4b504baae0dc37df.png

Twój kompilator zresztą Cię o tym poinformował:

image.thumb.png.1c1ec352013f3017302272443dcf7077.png

Po prostu powinieneś wstawić AHB w miejsce APB2 w kodzie programu. To powinno zlikwidować pierwszy błąd. (Przyznam szczerze, że nie chce mi się szukać dlaczego funkcja ma w nazwie AHB zamiast AHB2 - możesz poszukać.) Mam nadzieję, że z kolejnymi błędami sobie poradzisz. Decydując się na przerobienie zadań z kursu na innym niż dedykowanym zestawie, musisz liczyć się z tego typu różnicami pomiędzy różnymi seriami stmów.

Przez pomyłkę poniższy rysunek dodał się dwa razy - nie umiem go usunąć:

image.png

Edytowano przez piotr96
Zdublowany rysunek (na dole wiadomości) - brak możliwości usunięcia.
  • Lubię! 1
  • Pomogłeś! 1

dzięki za odpowiedz ale chodzilo mi o to jak znalezc jakis dokument ze spisem komend do mojego mikroprocesora bo oczywiscie po poprawieniu tych bledow pojawiaja sie kolejne, przegladanie plikow z biblioteki niestety nie na wszystko daje odpowiedz

  • 10 miesiące później...

A ja mam pytanie odnośnie linijki LED: załóżmy, że chcielibyśmy podłączyć sobie linijkę led trochę inaczej, tj. w taki sposób, że anody led podłączylibyśmy do pinu 3.3 V na płytce, czyli musielibyśmy załączać diody zerem z pinów GPIO. I tu pytanie, jak dostosować w takim wypadku kod, a zwłaszcza linijkę: 

gpio.GPIO_Mode = GPIO_Mode_Out_PP;

Jak to sensownie zrobić?:c

Już tłumaczę:) Chodzi o kwestię kodu (a ściślej mówiąc zastąpienie fragmentu GPIO_Mode_Out_PP czymś w rodzaju "GPIO_Mode_In_PP", tylko pewnie jakoś inaczej to brzmi).

  • 3 miesiące później...
  • 11 miesiące później...

dlaczego w programie zawarte sa piny 

gpio.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|

GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

do , których przewody nie sa podpięte tylko są podpięte do wejsc analogowych to jest A5, A4, A3 , czy nie można byłoby podpiąć wszystkie przewody do wejść cyfrowych jęsli tak to jak wyglądałby wtedy kod?

 

 * @file    main.c
  * @author  Ac6
  * @version V1.0
  * @date    01-December-2013
  * @brief   Default main function.
  ******************************************************************************
*/

#include "stm32f10x.h"

int main(void)
{
	GPIO_InitTypeDef gpio;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);


	GPIO_StructInit(&gpio);
	gpio.GPIO_Pin=GPIO_Pin_4;
	gpio.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA,&gpio);
	gpio.GPIO_Pin=GPIO_Pin_7;
	gpio.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_Init(GPIOC,&gpio);
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0)
		{
			GPIO_SetBits(GPIOA,GPIO_Pin_4);

		}else{
			GPIO_ResetBits(GPIOA,GPIO_Pin_4);
		}
	}
}



mam pytanie, chciałam napisac program , który polega na tym, że gdy wcisne przycisk dioda LED na płytce stykowej zapali się, program napisałam taki jaki jest powyżej jest do bry ale to nie działa, co robie źle?

IMG_20210901_234857775.jpg

Możesz narysować schemat połączeń i zrobić bardziej wyraźne zdjęcie (bliższe) na płytki?

Wydaje mi się, że problem jest w połączeniach. Bazując na dokumentacji płytek, to port PA4 jest wyprowadzony na złącze CN7 (prawy rząd, czwarty pin od dołu), a tam na pewno nic nie masz podłączone:

image.thumb.png.abe298d0df510f3a85dca4b810cab1b2.png

 

I czy ktoś jest mi w stanie wytłumaczyć to ?

dlaczego w programie zawarte sa piny 

 

gpio.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|

 

GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

 

do , których przewody nie sa podpięte tylko są podpięte do wejsc analogowych to jest A5, A4, A3 , czy nie można byłoby podpiąć wszystkie przewody do wejść cyfrowych jęsli tak to jak wyglądałby wtedy kod?

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...