STM32F4xx TIMER Init kütüphanesi

Başlatan Klein, 20 Ocak 2012, 03:07:56

Klein

/**
  ******************************************************************************
  * @dosya    stm32f4xx_TIMER.h
  * @yazar  Picproje
  * @version V1.0.0
  * @date    19.01.2012
  * @özet    STM32F4 - Cortex-M4 TIMER register tanımlamaları. 
  *				STM32F4xx.h tanım dosyası ile birlikte kullanılır. tek başına kullanılmaz.
  *				register isimlendirmelerinde STM32F4xx.h ve ilgili dokümanlardaki isimlendirmelere 
  *				sadık kalınmaya çalışılmıştır.
  * @revizyon geçmişi 
  *				V1.0.0	16.01.2012  Başlangıç. TIM registerlerine ilişkin tanımlamalar.
  *				V1.0.1  21.01.2012  T_Tmr_CCER_Type tipi union yapıldı. Tüm bitlere erişim için
  *				                    CCER isimli uint16_t tipinde üye eklendi.
  *				V1.1.1 	22.01.2012  T_Tmr_CCR_Type union tipi eklendi. CCR registerlerini 
  									array ve ayrık olarak kullanabilme opsiyonu sağlandı. 
  ******************************************************************************
  */ 

#ifndef __STM32F4XX_TIMER
#define __STM32F4XX_TIMER

#include "STM32F4xx.h" 

enum TMR_CR1 { TMR_CKD_DIVTCKINT =0, TMR_CKD_DIV2TCKINT = 1, TMR_CKD_DIV4TCKINT,
			   TMR_ARPE_PRELOAD=0, TMR_ARPE_NOTPRELOAD=1,
			   TMR_CMS_ALIGNEDGE =0, TMR_CMS_ALIGNMODE1 =1, TMR_CMS_ALIGNMODE2=2, TMR_CMS_ALIGNMODE3 =3,
			   TMR_DIR_UPCOUNT=0, TMR_DIR_DOWNCOUNT = 1,
			   TMR_OPM_CONTINIOUS =0, TMR_OPM_ONEPULSE =1,
			   TMR_URS_UPDATE_ANY_SOURCE =0, TMR_URS_UPDATEONLY_CNTR,
			   TMR_UDIS_UPDATE_EVENT_DISABLE =0, TMR_UDIS_UPDATE_EVENT_ENABLE =1,
			   TMR_COUNTER_DISABLE = 0, TMR_COUNTER_ENABLE =1
			 };
enum TMR_CR2 { TMR_TI1S_TI1IN_CH1 =0, TMR_TI1S_TI1IN_XOR_CH123 =1,
			   TMR_MMS_MASTER_RESET =0, TMR_MMS_MASTER_ENABLE =1, TMR_MMS_MASTER_UPDATE =2, TMR_MMS_MASTER_CMP_PULSE =3,
			   TMR_MMS_MASTER_CMP_OC1REF =4, TMR_MMS_MASTER_CMP_OC2REF =5, TMR_MMS_MASTER_CMP_OC3REF =6, TMR_MMS_MASTER_CMP_OC4REF =7,
			 };

enum TMR_SMCR{	TMR_MSM_NO_ACTION =0, TMR_MSM_EFFECT_EVENT,
				TMR_TS_INTERNAL_TRG_ITR1 =1, TMR_TS_INTERNAL_TRG_ITR2 =2,
				TMR_TS_EDGE_DETECT_TI1F_ED =4, 
				TMR_TS_FLTR_IN1_TI1FP1 =5, TMR_TS_FLTR_IN2_TI2FP2 =6,
				TMR_TS_EXTERNAL_TRG_ETRF =7,
				TMR_SMS_SLAVE_DISABLE =0, 
				TMR_SMS_ENCODER_MODE1 =1, TMR_SMS_ENCODER_MODE2 =2, TMR_SMS_ENCODER_MODE3 =3,
				TMR_SMS_RESET_MODE =4, TMR_SMS_GATED_MODE =5, TMR_SMS_TRG_MODE =6, TMR_SMS_EXTERNAL_CLK =7
			 }; 	

enum TMR_DIER {	TMR_TDE_TRG_DMAREQ_DISABLE =0, TMR_TDE_TRG_DMAREQ_ENABLE =1,
				TMR_CC4DE_DMAREQ_DISABLE =0, TMR_CC4DE_DMAREQ_ENABLE =1,
				TMR_CC3DE_DMAREQ_DISABLE =0, TMR_CC3DE_DMAREQ_ENABLE =1,
				TMR_CC2DE_DMAREQ_DISABLE =0, TMR_CC2DE_DMAREQ_ENABLE =1,
				TMR_CC1DE_DMAREQ_DISABLE =0, TMR_CC1DE_DMAREQ_ENABLE =1,
				TMR_UDE_UPDATE_DMAREQ_DISABLE =0, TMR_UDE_UPDATE_DMAREQ_ENABLE=1,
				TMR_TIE_TRG_IRQ_DISABLE =0, TMR_TIE_TRG_IRQ_ENABLE =1,
				TMR_CC4IE_IRQ_DISABLE =0, TMR_CC4IE_IRQ_ENABLE =1,
				TMR_CC3IE_IRQ_DISABLE =0, TMR_CC3IE_IRQ_ENABLE =1,
				TMR_CC2IE_IRQ_DISABLE =0, TMR_CC2IE_IRQ_ENABLE =1,
				TMR_CC1IE_IRQ_DISABLE =0, TMR_CC1IE_IRQ_ENABLE =1,
				TMR_UIE_UPDATE_IRQ_DISABLE =0, TMR_UIE_UPDATE_IRQ_ENABLE =1
			  };

enum TMR_EGR  {	TMR_UG_UPDATE_NOACT =0, TMR_UG_UPDATE_REINIT =1};

enum TMR_CCMR{ 	TMR_OCM_FROZEN =0, 
				TMR_OCM_MATCH_ACTIVE =1, TMR_OCxM_MATCH_INACTIVE =2,
				TMR_OCM_TOGGLE =3,
				TMR_OCM_FORCE_INACTIVE =4,
				TMR_OCM_FORCE_ACTIVE =5,
				TMR_OCM_PWM_MODE1 =6 , TMR_OCxM_PWM_MODE2 =7,
				TMR_OCPE_PRELOAD_DISABLE =0, TMR_OCPE_PRELOAD_ENABLE =1,
				TMR_OCFE_FAST_DISABLE =0, TMR_OCFE_FAST_ENABLE =1,
				TMR_CCS_CH_OUTPUT =0, TMR_CCS_CH_IN_TI1 =1, TMR_CCS_CH_IN_TI2 =2, TMR_CCS_CH_IN_TRC =3,
				TMR_ICF_FILTER_NONE =0,
				TMR_ICPSC_PRESCALE_NONE =0, 
				TMR_ICPSC_PRESCALE_2EVENTS =1,
				TMR_ICPSC_PRESCALE_4EVENTS =2,
				TMR_ICPSC_PRESCALE_8EVENTS =3,
			};

enum TMR_CCER{	TMR_CCNP_IC_SINGLE_EDGE =0, TMR_CCNP_IC_BOTH_EDGE =1,
				TMR_CCP_OC_ACTIVE_HI =0, TMR_CCP_OC_ACTIVE_LOW =1,
				TMR_CCP_IC_NONINVERT_RISING =0, TMR_CCP_IC_INVERT_FALLING =1, TMR_CCP_IC_NONINVERT_BOTH =1,
				TMR_CCE_OC_UNACTIVE =0, TMR_CCE_OC_ACTIVE =1,
				TMR_CCE_IC_DISABLE =0, TMR_CCE_IC_ENABLE =1
			  }; 
 
#define TMR1                ((TIMER_TypeDef *) TIM1_BASE)
#define TMR2                ((TIMER_TypeDef *) TIM2_BASE)
#define TMR3                ((TIMER_TypeDef *) TIM3_BASE)
#define TMR4                ((TIMER_TypeDef *) TIM4_BASE)
#define TMR5                ((TIMER_TypeDef *) TIM5_BASE)
#define TMR6                ((TIMER_TypeDef *) TIM6_BASE)
#define TMR7                ((TIMER_TypeDef *) TIM7_BASE)
#define TMR8                ((TIMER_TypeDef *) TIM8_BASE)
#define TMR9                ((TIMER_TypeDef *) TIM9_BASE)
#define TMR10                ((TIMER_TypeDef *) TIM10_BASE)
#define TMR11                ((TIMER_TypeDef *) TIM11_BASE)
#define TMR12                ((TIMER_TypeDef *) TIM12_BASE)
#define TMR13                ((TIMER_TypeDef *) TIM13_BASE)
#define TMR14                ((TIMER_TypeDef *) TIM14_BASE)


#pragma anon_unions

typedef struct{
  __IO uint16_t CEN:1;
  __IO uint16_t UDIS:1;
  __IO uint16_t URS:1;
  __IO uint16_t OPM:1;
  __IO uint16_t DIR:1;
  __IO uint16_t CMS:2;
  __IO uint16_t ARPE:1;
  __IO uint16_t CKD:2;
  __IO uint16_t :6;

} T_Tmr_CR1_Type;

typedef struct{
  __IO uint16_t :3;
  __IO uint16_t CCDS:1;
  __IO uint16_t MMS:3;
  __IO uint16_t TI1S:1;
  __IO uint16_t :8;
} T_Tmr_CR2_Type;

typedef struct{
  __IO uint16_t SMS:3;
  __IO uint16_t :1;
  __IO uint16_t TS:3;
  __IO uint16_t MSM:1;
  __IO uint16_t ETF:4;
  __IO uint16_t ETPS:2;
  __IO uint16_t ECE:1;
  __IO uint16_t ETP:1;
} T_Tmr_SMCR_Type;

typedef struct{
  __IO uint16_t UIE:1;
  __IO uint16_t CC1IE:1;
  __IO uint16_t CC2IE:1;
  __IO uint16_t CC3IE:1;
  __IO uint16_t CC4IE:1;
  __IO uint16_t :1;
  __IO uint16_t TIE:1;
  __IO uint16_t :1;
  __IO uint16_t UDE:1;
  __IO uint16_t CC1DE:1;
  __IO uint16_t CC2DE:1;
  __IO uint16_t CC3DE:1;
  __IO uint16_t CC4DE:1;
  __IO uint16_t :1;
  __IO uint16_t TDE:1;
  __IO uint16_t :1;
} T_Tmr_DIER_Type;

typedef struct{
  __IO uint16_t UIF:1;
  __IO uint16_t CC1IF:1;
  __IO uint16_t CC2IF:1;
  __IO uint16_t CC3IF:1;
  __IO uint16_t CC4IF:1;
  __IO uint16_t :1;
  __IO uint16_t TIF:1;
  __IO uint16_t :2;
  __IO uint16_t CC1OF:1;
  __IO uint16_t CC2OF:1;
  __IO uint16_t CC3OF:1;
  __IO uint16_t CC4OF:1;
  __IO uint16_t :3;
} T_Tmr_SR_Type;

typedef struct{
  __IO uint16_t UG:1;
  __IO uint16_t CC1G:1;
  __IO uint16_t CC2G:1;
  __IO uint16_t CC3G:1;
  __IO uint16_t CC4G:1;
  __IO uint16_t :1;
  __IO uint16_t TG:1;
  __IO uint16_t :9;
} T_Tmr_EGR_Type;

typedef struct{
  __IO uint16_t CC1S:2;
  __IO uint16_t OC1FE:1;
  __IO uint16_t OC1PE:1;
  __IO uint16_t OC1M:3;
  __IO uint16_t OC1CE:1;
  __IO uint16_t CC2S:2;
  __IO uint16_t OC2FE:1;
  __IO uint16_t OC2PE:1;
  __IO uint16_t OC2M:3;
  __IO uint16_t OC2CE:1;
}T_Tmr_CCMR1_OC_Type;

typedef struct{
  __IO uint16_t CC1S:2;
  __IO uint16_t IC1PSC:2;
  __IO uint16_t IC1F:4;
  __IO uint16_t CC2S:2;
  __IO uint16_t IC2PSC:2;
  __IO uint16_t IC2F:4;
}T_Tmr_CCMR1_IC_Type;

typedef struct{
  __IO uint16_t CC3S:2;
  __IO uint16_t OC3FE:1;
  __IO uint16_t OC3PE:1;
  __IO uint16_t OC3M:3;
  __IO uint16_t OC3CE:1;
  __IO uint16_t CC4S:2;
  __IO uint16_t OC4FE:1;
  __IO uint16_t OC4PE:1;
  __IO uint16_t OC4M:3;
  __IO uint16_t OC4CE:1;
}T_Tmr_CCMR2_OC_Type;

typedef struct{
  __IO uint16_t CC3S:2;
  __IO uint16_t IC3PSC:2;
  __IO uint16_t IC3F:4;
  __IO uint16_t CC4S:2;
  __IO uint16_t IC4PSC:2;
  __IO uint16_t IC4F:4;
}T_Tmr_CCMR2_IC_Type;

typedef union{
	T_Tmr_CCMR1_OC_Type OCR;
	T_Tmr_CCMR1_IC_Type ICR;
}T_Tmr_CCMR1_Type;

typedef union{
	T_Tmr_CCMR2_OC_Type OCR;
	T_Tmr_CCMR2_IC_Type ICR;
}T_Tmr_CCMR2_Type;

typedef union{
  __IO uint16_t CCER;
 struct{
  __IO uint16_t CC1E:1;
  __IO uint16_t CC1P:1;
  __IO uint16_t :1;
  __IO uint16_t CC1NP:1;
  __IO uint16_t CC2E:1;
  __IO uint16_t CC2P:1;
  __IO uint16_t :1;
  __IO uint16_t CC2NP:1;
  __IO uint16_t CC3E:1;
  __IO uint16_t CC3P:1;
  __IO uint16_t :1;
  __IO uint16_t CC3NP:1;
  __IO uint16_t CC4E:1;
  __IO uint16_t CC4P:1;
  __IO uint16_t :1;
  __IO uint16_t CC4NP:1;
  };
}T_Tmr_CCER_Type;

typedef struct{
  __IO uint16_t DBA:4;
  __IO uint16_t :3;
  __IO uint16_t DBL:4;
  __IO uint16_t :3;
}T_Tmr_DCR_Type;

typedef struct{
  __IO uint16_t :10;
  __IO uint16_t ITR1_RMP:2;
  __IO uint16_t :4;
}T_Tmr_TIM2OR_Type;

typedef struct{
  __IO uint16_t :6;
  __IO uint16_t TI4_RMP:2;
  __IO uint16_t :8;
}T_Tmr_TIM5OR_Type;

typedef union{
	T_Tmr_TIM2OR_Type TIM2OR;
	T_Tmr_TIM5OR_Type TIM5OR;
}T_Tmr_OR_Type;

typedef union{
 __IO uint32_t CCR[4];
 __IO uint32_t CCR1;
 __IO uint32_t CCR2;
 __IO uint32_t CCR3;
 __IO uint32_t CCR4;
}T_Tmr_CCR_Type;




typedef struct
{
  T_Tmr_CR1_Type CR1;         /*!< TIM control register 1,              Address offset: 0x00 */
  uint16_t      RESERVED0;   /*!< Reserved, 0x02                                            */
  T_Tmr_CR2_Type CR2;         /*!< TIM control register 2,              Address offset: 0x04 */
  uint16_t      RESERVED1;   /*!< Reserved, 0x06                                            */
  T_Tmr_SMCR_Type SMCR;        /*!< TIM slave mode control register,     Address offset: 0x08 */
  uint16_t      RESERVED2;   /*!< Reserved, 0x0A                                            */
  T_Tmr_DIER_Type DIER;        /*!< TIM DMA/interrupt enable register,   Address offset: 0x0C */
  uint16_t      RESERVED3;   /*!< Reserved, 0x0E                                            */
  T_Tmr_SR_Type SR;          /*!< TIM status register,                 Address offset: 0x10 */
  uint16_t      RESERVED4;   /*!< Reserved, 0x12                                            */
  T_Tmr_EGR_Type EGR;         /*!< TIM event generation register,       Address offset: 0x14 */
  uint16_t      RESERVED5;   /*!< Reserved, 0x16                                            */
  T_Tmr_CCMR1_Type CCMR1;       /*!< TIM capture/compare mode register 1, Address offset: 0x18 */
  uint16_t      RESERVED6;   /*!< Reserved, 0x1A                                            */
  T_Tmr_CCMR2_Type CCMR2;       /*!< TIM capture/compare mode register 2, Address offset: 0x1C */
  uint16_t      RESERVED7;   /*!< Reserved, 0x1E                                            */
  T_Tmr_CCER_Type CCER;        /*!< TIM capture/compare enable register, Address offset: 0x20 */
  uint16_t      RESERVED8;   /*!< Reserved, 0x22                                            */
  __IO uint32_t CNT;         /*!< TIM counter register,                Address offset: 0x24 */
  __IO uint16_t PSC;         /*!< TIM prescaler,                       Address offset: 0x28 */
  uint16_t      RESERVED9;   /*!< Reserved, 0x2A                                            */
  __IO uint32_t ARR;         /*!< TIM auto-reload register,            Address offset: 0x2C */
  __IO uint16_t RCR;         /*!< TIM repetition counter register,     Address offset: 0x30 */
  uint16_t      RESERVED10;  /*!< Reserved, 0x32                                            */
  T_Tmr_CCR_Type CCR;        /*!< TIM capture/compare register 1,      Address offset: 0x34 */
  					         /*!< TIM capture/compare register 2,      Address offset: 0x38 */
  					         /*!< TIM capture/compare register 3,      Address offset: 0x3C */
  					         /*!< TIM capture/compare register 4,      Address offset: 0x40 */
  __IO uint16_t BDTR;        /*!< TIM break and dead-time register,    Address offset: 0x44 */
  uint16_t      RESERVED11;  /*!< Reserved, 0x46                                            */
  T_Tmr_DCR_Type DCR;         /*!< TIM DMA control register,            Address offset: 0x48 */
  uint16_t      RESERVED12;  /*!< Reserved, 0x4A                                            */
  __IO uint16_t DMAR;        /*!< TIM DMA address for full transfer,   Address offset: 0x4C */
  uint16_t      RESERVED13;  /*!< Reserved, 0x4E                                            */
  T_Tmr_OR_Type OR;          /*!< TIM option register,                 Address offset: 0x50 */
  uint16_t      RESERVED14;  /*!< Reserved, 0x52                                            */
} TIMER_TypeDef;

#endif

Klein

Kullanımı:
PB4 pininden TIM3 Compare modülünü kullanarak ~10 KHz 12 bit PWM sinyali üretme.
Tanımların üzerindeki comment satırları aynı işin STM32F4xx.h ile yapılma şeklini gösteriyor.

// SystemInit kodları

 	 RCC->APB1ENR|=0x00000002;       // Timer3 CLK'u aktif edelim (84 Mhz)
	 TIM3->PSC = 1;	  //  Ön bölücü f/2 48MHz (Fck_PSC / (PSC_VAL+1)) 
	 TIM3->ARR = 4096;	   // CCR1 ile karşılaştırılacak sayı. (12 bit PWM)

//	 TIM3->DIER = 0x0001;
	 TMR3->DIER.UIE = TMR_UIE_UPDATE_IRQ_DISABLE; // Interrupt kapalı. Açılırsa her periyotta interrupt üretir.
	 	 
	 //TIM3->CCMR1 |= 0x0068; //PWM mode 1, preload enable
	 TMR3->CCMR1.OCR.OC1PE = TMR_OCPE_PRELOAD_ENABLE;
	 TMR3->CCMR1.OCR.OC1M = TMR_OCM_PWM_MODE1;
	 
	 //TIM3->CCER |= 0x0002;	 // Polarite seçimi 
	 TMR3->CCER.CC1P = TMR_CCP_OC_ACTIVE_LOW;
	 
	 //TIM3->CR1 = 0x0080;  // ARPE auto reload preload
	 TMR3->CR1.ARPE = TMR_ARPE_NOTPRELOAD;

	 //TIM3->EGR |=0x0001; // Update generation
	 TMR3->EGR.UG = TMR_UG_UPDATE_REINIT;
	 
	 //TIM3->CCER |= 0x0001; // CC1 aktif.
	 TMR3->CCER.CC1E = TMR_CCE_OC_ACTIVE;

	 PB->AFR.pin.p4 = PORT_AF2_TIM3;   // PORT_B4 TIM3 ile ilişkilendirildi
	 PB->MODER.pin.p4 = PORT_ALTERNATE_FUNC; // PORT_B4 alternatif fonksiyon
	 PB->OSPEEDR.pin.p4 = PORT_HI_SPEED; // PORT_B4 çıkışı en yüksek hızda çalışacak
	 PB->OTYPER.pin.p4 = PORT_PUSH_PULL; // Çıkış tipi Push-Pull

	 //TIM3->CR1 |= 0x0001; // sayıcıyı başlat. 
  	 TMR3->CR1.CEN = TMR_COUNTER_ENABLE;

// main loop

int main(){
TIM3->CCR1 = 2048; // %50 Duty pwm
while(1);
}



Klein

Örnek 2:

PA15 pininden Timer 2 capture modülü ile PWM darbe genişliği /periyot ölçme

// SystemInit kodları

	 //TIM2->CR1 = 0x0080;
	 RCC->APB1ENR|=0x00000001;       // Timer2 CLK'u aktif edelim (84 Mhz)
	 TIM2->PSC = 1;		// ön bölücü 2 42MHz (Fck_PSC / (PSC_VAL+1))
	 TIM2->ARR = 4096; // taşma değeri. pwm gelmez veya düşük frekansta gelirse sayıcı bu değeri aşınca yeniden yüklenir. 
	 
	 //TIM2->DIER = 0x0001;
	 TMR2->DIER.UIE = TMR_UPDATE_IRQ_ENABLE;
	 
	 //TIM2->CCMR1 |= 0x0002; //CCR 1 için Giriş kaynağı TI1 seçildi
	 TMR2->CCMR1.ICR.CC1S = TMR_CCS_CH_IN_TI1; // ICR'ye dikkat! Input capture olduğu için ICR kullanıyoruz.

//	 TIM2->CCER &= ~0x000A;	 // TI1FP1 için polarite seçimi. evirilmemiş / yükselen kenar
	 TMR2->CCER.CC1P = TMR_CCP_IC_NONINVERT_RISING; 
	 TMR2->CCER.CC1NP = TMR_CCNP_IC_SINGLE_EDGE;

//	 TIM2->CCMR1 |= 0x0200; //CCR 2 için Giriş kaynağı TI1 seçildi
	 TMR2->CCMR1.ICR.CC2S = TMR_CCS_CH_IN_TI2;

//	 TIM2->CCER |= 0x0020;	 // TI1FP2 için polarite seçimi. evirilmiş / düşen kenar
	 TMR2->CCER.CC2P = TMR_CCP_IC_INVERT_FALLING;
	 TMR2->CCER.CC2NP = TMR_CCNP_IC_SINGLE_EDGE;

//	 TIM2->SMCR |= 0x0050; // geçerli tetikleme kaynağı TI1FP1
  	 TMR2->SMCR.TS = TMR_TS_FLTR_IN1_TI1FP1;

//	 TIM2->SMCR |= 0x0004; // Slave mode = reset Yükselen kenarda sayıcıyı sıfırla ve değeri güncelle.
	 TMR2->SMCR.SMS = TMR_SMS_RESET_MODE;

//	 TIM2->CCER |= 0x0011; // CC1 ve CC2 aaktif.
	 TMR2->CCER.CC1E = TMR_CCE_IC_ENABLE;
	 TMR2->CCER.CC2E = TMR_CCE_IC_ENABLE;

	 PA->MODER.pin.p15 = PORT_ALTERNATE_FUNC;
	 PA->PUPDR.pin.p15 = PORT_PULL_UP;
	 PA->AFR.pin.p15 = PORT_AF1_TIM2;


	 NVIC_EnableIRQ(TIM2_IRQn); //Timer 2 interrupt aktif et;
//	 TIM2->CR1 |= 0x0001; // sayıcıyı başlat. 
	 TMR2->CR1.CEN = TMR_COUNTER_ENABLE; 

/*******************************************************************************************/

unsigned short ccr1,ccr2

// interrupt kodu
void TIM2_IRQHandler(){
	ccp_update=1;
	ccr1=TIM2->CCR1;
	ccr2=TIM2->CCR2;
TIM2->SR=0;    

// ccr1 periyot
// ccr2 darbe genişliği.
		
}

muhittin_kaplan

Hocam Son Mesajdaki
ccp_update=1;
nedir

Klein

"ccp_update"  yeni değerler alındığını programa bildirmek için koyduğum bir bayrak. 
Veriler üzerinde yapacağım işlemleri interrupt içerisinde yapmak istemediğim için  genelde loop'ta böyle bayraklarım olur. Interrupt'u sadece verileri güncellemek için kullanırım.


if(ccp_update ){
    ccp_update=0;
    sprintf(TxBuf," Periyot =%u\rDarbe genisligi  =%u\r"ccr1,ccr2);
    SendTxt(TxBuf);
}

Klein

Güncelleme yapıldı.
V1.0.1  21.01.2012  T_Tmr_CCER_Type tipi union yapıldı. Tüm bitlere erişim için CCER isimli uint16_t tipinde üye eklendi.
V1.1.1  22.01.2012  T_Tmr_CCR_Type union tipi eklendi. CCR1, CCR2, CCR3 ve CCR4 registerlerini array ve ayrık olarak kullanabilme opsiyonu geldi.

Yeni değişikliklerle kullanım:
CCR registerleri
TMR1->CCR1 = 0x01B0; Eski kullanım şekli
TMR1->CCR.CCR[0] = 0x01B0; // yeni kullanım şekli.
TMR1->CCR.CCR1 = 0x01B0; // yeni kullanım şekli;

CCER Registerleri.
TMR1->CCER.CC1E =0; // eski
TMR1->CCER.CC1P = 1; //eski

TMR1->CCER.CC1E =0; // yeni
TMR1->CCER.CCER = 0x0550; // yeni

micelow

Merhaba hocam
Kodları keilde derlemek istediğimde aşagıdaki gibi bir kaç hata ile karşılaşıyorum çözemedim yardımcı olabilir misiniz?

Build target 'Target 1'
compiling main.c...
main.c(14): error:  #20: identifier "TMR_UPDATE_IRQ_ENABLE" is undefined
main.c(40): error:  #20: identifier "PA" is undefined
main.c(40): error:  #20: identifier "PORT_ALTERNATE_FUNC" is undefined
main.c(41): error:  #20: identifier "PORT_PULL_UP" is undefined
main.c(42): error:  #20: identifier "PORT_AF1_TIM2" is undefined
Target not created
"Bir tek şeye ihtiyacımız var çalışkan olmak."

muhittin_kaplan

kütüphanaleri düzgünce eklediniz mi ?

Klein

bu kütüphaneden önce, GPIO ayarları için başka bir tanım dosyası yazmıştım. Bahsi geçen tanımlar oradan.
Örneklerin arasında var.
https://www.picproje.org/index.php/topic,37346.0.html

micelow

"Bir tek şeye ihtiyacımız var çalışkan olmak."