Butona basildikca bir bir artan, uzun sureli basislarda artisi bes yapan sayici

Başlatan z, 23 Aralık 2013, 07:31:30

z


#include "STM32F4xx.h"

int Sayac=0;

// FCPU =168Mhz
// FAHB =FCPU
// FAPB2=FCPU/2
// FAPB1=FCPU/4

void SystemInit()
{
unsigned int i;
     (*((
int*)0xE000ED88))|=0x0F00000;  
     for (
i=0;i<0x00100000;i++);     // OSC oturtma ve kurtarma rutini
     
RCC->CFGR |= 0x00009400;        // AHB ve APB hizlarini max degerlere set edelim
     
RCC->CR |= 0x00010000;          // HSE Xtal osc calismaya baslasin        
     
while (!(RCC->CR 0x00020000));// Xtal osc stabil hale gelsin
     
RCC->PLLCFGR 0x07402A04;      // PLL katsayilarini M=4, N=168, P=2 ve Q=7 yapalim
     
RCC->CR |= 0x01000000;          // PLL calismaya baslasin  (Rehber Sayfa 95)
     
while(!(RCC->CR 0x02000000)); // Pll hazir oluncaya kadar bekle
     
FLASH->ACR 0x00000605;        // Flash ROM icin 5 Wait state secelim ve ART yi aktif edelim (Rehber Sayfa 55)
     
RCC->CFGR |= 0x00000002;        // Sistem Clk u PLL uzerinden besleyelim
     
while ((RCC->CFGR 0x0000000F) != 0x0000000A); // Besleninceye kadar bekle
     
RCC->AHB1ENR |= 0x0000000F;     // GPIO A,B,C,D clock'u aktif edelim 
     
GPIOD->MODER 0x55000000;      // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
     
GPIOD->OSPEEDR0xFFFFFFFF;     // GPIOD nin tum cikislari en yuksek hizda kullanacagiz 
     
RCC->APB2ENR|=0x4000;           // SYSCFG Enable
          
//   Timer 7 ile calisalim
 
     
RCC->APB1ENR|=0x00000020;       // Timer7 CLK'u aktif edelim (84 Mhz)
     
TIM7->CR1=0x0080;               // Otomatik Reload
     
TIM7->PSC =4200-1;              // Prescaler cikis frekansimiz 20KHz
     
TIM7->ARR =4000-1;              // Her 200ms de int uretsin 
     
TIM7->DIER=0x0001;              // Update Int enable
     
NVIC->ISER[1] = 0X00800000;     // NVIC de Timer 7 interrupta izin verelim
     
//   EXTI (Butona basinca pinimiz H oluyor)

     
GPIOA->MODER&=~0x00000003;      // GPIO pin ancak inp modunda interrupt uretebilir (Rehber 143)
     
SYSCFG->EXTICR[0]&=~0x0000000F// GPIO A0 interrupt uretecek
     
EXTI->RTSR=1;                   // Yukselen kenar tetiklemesi yapacagiz. (EXTI0)
     
EXTI->FTSR=1;                   // Dusen kenar tetiklemesi yapacagiz.  (EXTI0)
     
EXTI->IMR=1;                    // EXTI0 Int enable (Rehber 202-203)
     
EXTI->EMR=0;                    // Event istemiyoruz
     
NVIC->ISER[0] = 0x00000040;     // NVIC EXTI0_IRQ interrupti acalim     
          


void EXTI0_IRQHandler ()
{
     
EXTI->PR|=0x00000001;           // EXTIO INT flagimizi silelim
          
//   Butona basildi yada birakildi          
          
     
if(GPIOA->IDR&1)                // Basili ise
       
{
         
TIM7->CNT=0;                // Counteri sifirlayalim   
         
TIM7->CR1|=0x0001;          // Counter Enable 
         
Sayac++; 
         
GPIOD->BSRRL=0x8000;        // Led yansin                           
       

     else
       {
         
TIM7->CR1&=~0x0001;         // Counter Disable       
         
GPIOD->BSRRH=0x8000;        // Led sonsun                           
       
}               


void TIM7_IRQHandler()
{
     
TIM7->SR=0;                     // Timer Int Flagini silelim
          
     
if(Sayac%5Sayac+=5-(Sayac%5); // Sayac otomatik artisda 5'in katlarini saysin            
     
else Sayac+=5;                  // Sayiciyi 5 ilerlet
          
//   ornegin sayac degeri 46 iken 5 ilave etmek yerine 4 ilave edelim ve 50 olsun
//   daha sonraki artislar artik bes bes gidebilir          
          
     
GPIOD->ODR^=0x8000;


//   Butona her basista Sayac degiskeni bir bir artar
//   Eger butona uzun sureli basilirsa Sayac bes bes artmaya baslar

int main()
{
     while(
1);
}
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.