STM32F031 Timer2 ile Incremental Encoder Okuma

Başlatan z, 14 Eylül 2019, 09:44:53

z

STM32F031 (STSPIN32F0) cipinde Timer2 ile incremental encoder okumaya calisiyorum.

TIM2, encoderdan gelen palslere hic cevap vermiyor.

Encoder PA0, PA1 pinlerine bagli.

Timer 2'yi encoder moduna almadan sorunsuz calisacak sekilde clk ayarlamalarini yapiyorum.

Ardindan;

Timer2 encoder ayarlamalarini yapiyorum. Ama calismiyor.

Registerlere yukledigim degerler asagida.

TIM2_CCMR1:0x0101
TIM2_CCER: 0x0000
TIM2_SMCR: 0x0003
TIM2_CR1:  0x0001

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Pinlerin alternate function ayarları ile ilgili bir sorun olabilir mi? Encoder modu haricinde dışarıdan tekli pulse sayma veya dışarı PWM verme gibi özellikler çalışıyor mu?
Gökçe Tağlıoğlu

z

#2
Encoder donanimi, cip pilerini inp olarak kullanacagi icin alternate function tanimi yapmiyorum.

AF2 olacak sekilde denedim sorun devam etti. CM3 de ayni kodlar TIm4 icin PB6 PB7 pinlerinde Alternate function ayari istemeden calisiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

crazy

Reference manualde bir örnek var.Sayfa(744)
https://www.newbiehack.com/Documents/STM32F030Reference.pdf
/* (1) Configure TI1FP1 on TI1 (CC1S = 01),
 configure TI1FP2 on TI2 (CC2S = 01) */
/* (2) Configure TI1FP1 and TI1FP2 non inverted (CC1P = CC2P = 0, reset
 value) */
/* (3) Configure both inputs are active on both rising and falling edges
 (SMS = 011) */
/* (4) Enable the counter by writing CEN=1 in the TIMx_CR1 register. */
TIMx->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; /* (1)*/
TIMx->CCER &= (uint16_t)(~(TIM_CCER_CC21 | TIM_CCER_CC2P); /* (2) */
TIMx->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1; /* (3) */
TIMx->CR1 |= TIM_CR1_CEN; /* (4) */

z

Sorun cozuldu.

CM3 ve CM0 islemcili MCUlarda timer donanimi gordugum kadariyla ayni. Verdigim reg ve icerikleri STM32F103C8'de yeterli olurken STM32F031 de alternate function tanimi istiyor.

Alternate function tanimi yaparak da calistiramayi denememis ve calistiramamistim.

Ancak GPIOA_AFRL registerini kullanmam gerekirken GPIOA_AFRH registerini kullanmisim ve bu tek bir harflik hata 4 saatime neden oldu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

RaMu

Alıntı yapılan: z - 14 Eylül 2019, 12:39:41...
Ancak GPIOA_AFRL registerini kullanmam gerekirken GPIOA_AFRH registerini kullanmisim ve bu tek bir harflik hata 4 saatime neden oldu.

Yakın zamamda benzer bir hatayı bende yaptım,
datasheet ten register ın 4 bitine değer giriyorum,
defalarca kontrol ediyorum herşey tamam ama kod istediğimi yapmıyor,
saatlerce uğraştım yok yok,
bir baktım ben [3:0] bitlerine yazmışım,
halbuki [5:2] bitlerine yazmam gerekiyor.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Bugune kadar yaptigim hatalarin %90i copy paste kaynakli.

Bir ust satirda GPIOA_AFRH registerine atama yapan satirlari copy paste ile bir alt satira kopyalayip,
atanan degeri degistirip reg adini degistirmeyi unutmusum.

Aslinda copy paste ile yapilan zaman kazanci bu tip hatalar yuzunden kazanc degil kayba neden oluyor.

Bu da bana ders olur mu? Tabiki olmaz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

F103'te inputlar için AF ayarlaması gerekmiyor ama gördüğüm kadarıyla F0 ve F4'te input bile olsa pinin AF olarak seçilmesi gerekiyor.
Gökçe Tağlıoğlu