It is based on https://developer.mbed.org/users/gregeric/code/Nucleo_Hello_Encoder/

Revision:
0:caf1d0bc4b90
Child:
1:0b315dd1bbbf
diff -r 000000000000 -r caf1d0bc4b90 rotary_encoder_abz_phase/rotary_encoder_abz_phase.hpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rotary_encoder_abz_phase/rotary_encoder_abz_phase.hpp	Sat Feb 06 14:24:56 2016 +0000
@@ -0,0 +1,42 @@
+#ifndef INCLUDED_ROTARY_ENCODER_A_PHASE_H
+#define INCLUDED_ROTARY_ENCODER_A_PHASE_H
+
+#include "rotary_encoder_base.hpp"
+#include "mbed.h"
+
+/*
+ * TIM1_CH1: AF1 @ PA_8
+ * TIM1_CH2: AF1 @ PA_9
+ *
+ * TIM2_CH1: AF1 @ PA_0
+ * TIM2_CH2: AF1 @ PA_1
+ *
+ * TIM3_CH1: AF2 @ PB_4
+ * TIM3_CH2: AF2 @ PB_5
+ *
+ * TIM4_CH1: AF2 @ PB_6, PD_12
+ * TIM4_CH2: AF2 @ PB_7, PD_13
+ *
+ * TIM5_CH1: AF2 @ PA_0*    *TIM5 used by mbed system ticker so unavailable
+ * TIM5_CH2: AF2 @ PA_1*
+ *
+ */
+
+class rotary_encoder_abz_phase : public rotary_encoder_base {
+public:
+    rotary_encoder_abz_phase(TIM_TypeDef* timer_type, PinName z_pin, size_t resolution);
+    virtual ~rotary_encoder_abz_phase() {}
+    
+    virtual int32_t get_counts() const;
+    
+    virtual void reset();
+    
+private:
+    void intr_z_phase_first();
+    void intr_z_phase();
+    
+    InterruptIn z_phase_intr_;
+    uint32_t counts_in_prev_intr_;
+};
+
+#endif