Teknoloji

STM32 – Buton

Merhabalar arkadaşlar bu blogda sizlere STM32 de bir butonun nasıl kullanılacağını anlatacağım.  STM32 ailesine ait bir kart ile bunu yapabileceksiniz.  Uygulamaya direkt girmeden önce pull-down direnci hakkında biraz bilgi sahibi olmamız gerekecek , bunun için altaki bağlantıya tıklayın ve iyice inceleyin çünkü her yerde karşınıza çıkacaktır.

[button text=”Pull-up ve Pull- down Direnci” new_tab=”yes” size=”medium” icon=”” url=”https://www.elektrikport.com/makale-detay/pull-up-ve-pull-down-direnc-nedir/16930#ad-image-0″]

 

 

Yandaki  devrede pull-down direnci ile mikrodenetleyicimizin uygun pinine  Buton/Switch den sonra bir bağlantı yapıyoruz.

 

Bu bağlantıdan sonra kodumuzu inceleyelim.

 

 

 

İlk olarak kütüphanemizi ekliyoruz
#include "stm32f10x.h"

Ardından buton durumunu hafızada tutacak bir değişken belirliyorum.
uint16_t buttonDeger = 0;

Butona ve lede ait init işlemlerini aşağıda belirledik. (initialize: Başlatmak )
GPIO işlemini daha iyi anlaman için önceki dersdeki kodun başdaki açıklamaısnı okuyarak daha iyi anlayabilirsiniz. [button text=”Git” new_tab=”” size=”small” icon=”” url=”https://samettasoglu.com/2022/12/22/stm32fx-led-yak/”]

Buton ve Led için uygun Faz Hatlarını aktif ettik.
Buton için : C portu seçildi.
Led için : B portu seçildi.

void gpioConfig(){
GPIO_InitTypeDef GPIOInitStructer;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

Ledimizin işlemlerini belirledik.
GPIOInitStructer.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOInitStructer.GPIO_Pin = GPIO_Pin_0;
GPIOInitStructer.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructer);

Butonumuzun işlemlerini belirledik
GPIOInitStructer.GPIO_Mode = GPIO_Mode_IPD;
GPIOInitStructer.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOC,&GPIOInitStructer);

 

Buton işlemlerini detaylı inceleyelim.
Mod olarak “Input Pull Down” kısaltması olan “IPD” yi seçtik.
GPIOInitStructer.GPIO_Mode = GPIO_Mode_IPD;

Mikrodenetleyicimizin 6. pinen bağladık .(port c -> pin 6)
GPIOInitStructer.GPIO_Pin = GPIO_Pin_6;

Ve en son tüm işlemi başlarık. Dikkat edin ilk önce butonun portunu belirledik daha sonra structure yapısını kullanarak tüm ayarları ‘&’ ile gönderdik.
GPIO_Init(GPIOC,&GPIOInitStructer);

Alt tarafdaki kısımda artık ana fonksiyonumuza geçerek işlemler devam edelim.

 

int main() kısmı içerisine giriş ve çıkış pinlerimi başlatacak “gpioConfig” fonksiyonumu çağırdım. Buton için üste kullandığım fonksiyonu burda while()fonksiyonun içerisinde çünkü butona basıldığı anı sürekli olarak kontrol etmeliyiz.
buttonDeger = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6);
satırlı kodumda ki “GPIO_ReadInputDataBit” kısım benim girlen sinyali okumam sağlıyor.
ve ardından okunan değeri değşkenime yoluyor.

int main(){
gpioConfig();
while(1){
buttonDeger = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6);
if(buttonDeger == 1){
GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_SET);
}
else{
GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_RESET);
}
}

if/else işlemi ile eğer butona basıldıysa led yanacak eğer basılmadıysa ledimiz sönece.

Butona basıldıysa       -> buttonDurum = 1
Butona basılmadıysa -> buttonDurum = 0

Tüm Kod:

#include "stm32f10x.h" // Device header
uint16_t buttonDeger = 0;
void gpioConfig(){
GPIO_InitTypeDef GPIOInitStructer;
// 1. B portunun clock ayarin 2. C portunu clock ayarini yapiyor (Aktif ettik)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
// Led için
GPIOInitStructer.GPIO_Mode = GPIO_Mode_Out_PP;
GPIOInitStructer.GPIO_Pin = GPIO_Pin_0;
GPIOInitStructer.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructer);
//Button
GPIOInitStructer.GPIO_Mode = GPIO_Mode_IPD; // InputPullDown(Gnd Baglantisi için) . IPU ise; InputPullUp (Vdd Baglantisi için)
GPIOInitStructer.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOC,&GPIOInitStructer);
}
int main(){
gpioConfig();
while(1){
buttonDeger = GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6);
if(buttonDeger == 1){
GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_SET);
}
else{
GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_RESET);
}
}
}

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu