1. Tworze nowy projek dla STM32F417IG (opisałem w poprzednim artykule)
2. Dodaje bibliotekę GPIO z repozytoriów(reszta niezbędnych bibliotek doda się sama).
3. Do pliku main.c wklejamy:
#include "stm32f4xx_gpio.h" //standardowa biblioteka wejsc/wyjsc
#include "stm32f4xx_rcc.h" //Reset and Clock Control
GPIO_InitTypeDef GPIO_InitStructure; //inicjalizacja
void Delay(__IO uint32_t nCount); //definicja funkcji opóźnienia programowego(nie sprzętowego)
int main(void)
{
SystemInit(); //inicjalizacja
/* Włączenie zegara dla konkretnego portu, domyślnie jest wyłączony dla zaoszczędzenia energii */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
/*tu wpisujemu jaki port chcemy zainicjalizowac, w moim przypadku G*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;
/* tutaj wpisujemy jakie piny na danym porcie chcemy włączyć jak wyżej pisałem u mnie to pin 6 i 8 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
/*wybierasz między IN(wejście) OUT(wyjście), AF(funkcja alternatywna/alternate function) oraz AN(tryb analogowy/analog mode)*/
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/*wybór między Push Pull(PP) a Open Dren(OD)*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
/* 2, 25, 50, 100 MHz takie częstotliwości mamy do wyboru przy standardowej bibliotece, zmiany można nanieść w funkcjach zegara i do uzyskania jest chyba każda częstotliwość z zakresu 2-100 MHz */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/*
w tej części wybieramy czy będzie podciągnięcie do mazy, zasilania, czy też bez podciągnięcia, szarzej opisałem to w poprzednim artykule
*/
GPIO_Init(GPIOG, &GPIO_InitStructure);
while(1) // pętla nieskończona
{
GPIO_SetBits(GPIOG, GPIO_Pin_6); // ustawienie pinu 6 w stan wysoki(logiczna jedynka)
Delay(0x3FFFFF); // opóźnienie
GPIO_SetBits(GPIOG, GPIO_Pin_8); // ustawienie pinu 8 w stan wysoki
Delay(0x3FFFFF); //opóźnienie
GPIO_ResetBits(GPIOG, GPIO_Pin_6|GPIO_Pin_8); //skasowanie bitu, czyli ustawienie w stan niski
Delay(0xFFFFFF); // opóźnienie
}
}
void Delay(__IO uint32_t nCount) //funkcja opóźnienia
{
while(nCount--)
{
}
}
3. Do pliku main.c wklejamy:
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
GPIO_InitTypeDef GPIO_InitStructure; //inicjalizacja
void Delay(__IO uint32_t nCount); //definicja funkcji opóźnienia programowego(nie sprzętowego)
int main(void)
{
SystemInit(); //inicjalizacja
/* Włączenie zegara dla konkretnego portu, domyślnie jest wyłączony dla zaoszczędzenia energii */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
/*tu wpisujemu jaki port chcemy zainicjalizowac, w moim przypadku G*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;
/* tutaj wpisujemy jakie piny na danym porcie chcemy włączyć jak wyżej pisałem u mnie to pin 6 i 8 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
/*wybierasz między IN(wejście) OUT(wyjście), AF(funkcja alternatywna/alternate function) oraz AN(tryb analogowy/analog mode)*/
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
/*wybór między Push Pull(PP) a Open Dren(OD)*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
/* 2, 25, 50, 100 MHz takie częstotliwości mamy do wyboru przy standardowej bibliotece, zmiany można nanieść w funkcjach zegara i do uzyskania jest chyba każda częstotliwość z zakresu 2-100 MHz */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/*
w tej części wybieramy czy będzie podciągnięcie do mazy, zasilania, czy też bez podciągnięcia, szarzej opisałem to w poprzednim artykule
*/
GPIO_Init(GPIOG, &GPIO_InitStructure);
while(1) // pętla nieskończona
{
GPIO_SetBits(GPIOG, GPIO_Pin_6); // ustawienie pinu 6 w stan wysoki(logiczna jedynka)
Delay(0x3FFFFF); // opóźnienie
GPIO_SetBits(GPIOG, GPIO_Pin_8); // ustawienie pinu 8 w stan wysoki
Delay(0x3FFFFF); //opóźnienie
GPIO_ResetBits(GPIOG, GPIO_Pin_6|GPIO_Pin_8); //skasowanie bitu, czyli ustawienie w stan niski
Delay(0xFFFFFF); // opóźnienie
}
}
void Delay(__IO uint32_t nCount) //funkcja opóźnienia
{
while(nCount--)
{
}
}
Brak komentarzy:
Prześlij komentarz