on test and not completed based on nucleo_hello_encoder library

Dependencies:   mbed

Fork of Nucleo_Hello_Encoder by David Lowe

Committer:
c128
Date:
Tue Sep 29 06:42:15 2015 +0000
Revision:
1:3d2fffa6e19f
Parent:
0:ee5cb967aa17
Child:
2:70f92ce7d983
on test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gregeric 0:ee5cb967aa17 1 /*
gregeric 0:ee5cb967aa17 2 * Using STM32's counter peripherals to interface rotary encoders.
gregeric 0:ee5cb967aa17 3 * Encoders are supported on F4xx's TIM1,2,3,4,5. TIM2 & TIM5 have 32bit count, others 16bit.
gregeric 0:ee5cb967aa17 4 * Beware mbed uses TIM5 for system timer, others for PWM.
gregeric 0:ee5cb967aa17 5 * Check your platform's PeripheralPins.c & PeripheralNames.h if you need both PWM & encoders.
gregeric 0:ee5cb967aa17 6 *
gregeric 0:ee5cb967aa17 7 * Edit HAL_TIM_Encoder_MspInitFx.cpp to suit your mcu & board's available pinouts & pullups/downs.
gregeric 0:ee5cb967aa17 8 *
gregeric 0:ee5cb967aa17 9 * Thanks to:
gregeric 0:ee5cb967aa17 10 * http://petoknm.wordpress.com/2015/01/05/rotary-encoder-and-stm32/
gregeric 0:ee5cb967aa17 11 *
gregeric 0:ee5cb967aa17 12 * References:
gregeric 0:ee5cb967aa17 13 * http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00122015.pdf
gregeric 0:ee5cb967aa17 14 * http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/DM00096844.pdf
gregeric 0:ee5cb967aa17 15 * http://www.st.com/web/en/resource/technical/document/application_note/DM00042534.pdf
gregeric 0:ee5cb967aa17 16 * http://www.st.com/web/en/resource/technical/document/datasheet/DM00102166.pdf
gregeric 0:ee5cb967aa17 17 *
gregeric 0:ee5cb967aa17 18 * David Lowe Jan 2015
gregeric 0:ee5cb967aa17 19 */
gregeric 0:ee5cb967aa17 20
gregeric 0:ee5cb967aa17 21 #include "mbed.h"
c128 1:3d2fffa6e19f 22 #include "counter.h"
gregeric 0:ee5cb967aa17 23
c128 1:3d2fffa6e19f 24 TIM_IC_InitTypeDef counterSet1;
c128 1:3d2fffa6e19f 25 TIM_HandleTypeDef timer1;
gregeric 0:ee5cb967aa17 26
gregeric 0:ee5cb967aa17 27 int main()
gregeric 0:ee5cb967aa17 28 {
gregeric 0:ee5cb967aa17 29 //examples
c128 1:3d2fffa6e19f 30 //EncoderInit(TIM_IC_InitTypeDef counterSet, TIM_HandleTypeDef timer, TIM_TypeDef *TIMx, uint32_t maxcount);
gregeric 0:ee5cb967aa17 31 //counting on A-input only, 2 ticks per cycle, rolls over at 100
c128 1:3d2fffa6e19f 32 CounterInit(counterSet1, timer1, TIM1, 0xffff);
gregeric 0:ee5cb967aa17 33
gregeric 0:ee5cb967aa17 34 //counting on both A&B inputs, 4 ticks per cycle, full 32-bit count
c128 1:3d2fffa6e19f 35 //EncoderInit(encoder2, timer2, TIM2, 0xffffffff, TIM_ENCODERMODE_TI12);
gregeric 0:ee5cb967aa17 36
gregeric 0:ee5cb967aa17 37 //counting on B-input only, 2 ticks per cycle, full 16-bit count
c128 1:3d2fffa6e19f 38 //EncoderInit(encoder3, timer3, TIM3, 0xffff, TIM_ENCODERMODE_TI2);
gregeric 0:ee5cb967aa17 39
gregeric 0:ee5cb967aa17 40 //counting on both A&B inputs, 4 ticks per cycle, full 16-bit count
c128 1:3d2fffa6e19f 41 //EncoderInit(encoder4, timer4, TIM4, 0xffff, TIM_ENCODERMODE_TI12);
gregeric 0:ee5cb967aa17 42
gregeric 0:ee5cb967aa17 43 //TIM5 is used by mbed for systick
gregeric 0:ee5cb967aa17 44 //EncoderInit(encoder2, timer2, TIM5, 0xffffffff, TIM_ENCODERMODE_TI12);
gregeric 0:ee5cb967aa17 45
gregeric 0:ee5cb967aa17 46 printf("STM HAL encoder demo\n\r");
gregeric 0:ee5cb967aa17 47
gregeric 0:ee5cb967aa17 48 while(1) {
c128 1:3d2fffa6e19f 49 int16_t count1;
gregeric 0:ee5cb967aa17 50
gregeric 0:ee5cb967aa17 51 count1=TIM1->CNT; //OK 401 411 TICKER 030
c128 1:3d2fffa6e19f 52 //count2=TIM2->CNT; //OK 401 411 N/A 030
c128 1:3d2fffa6e19f 53 //count3=TIM3->CNT; //OK 401 411 030
c128 1:3d2fffa6e19f 54 //count4=TIM4->CNT; //OK 401 NOK 411 N/A 030
c128 1:3d2fffa6e19f 55 //count5=TIM5->CNT; //TICKER 401 411 N/A 030
c128 1:3d2fffa6e19f 56 printf("%d\r\n", count1);
gregeric 0:ee5cb967aa17 57 wait(1.0);
gregeric 0:ee5cb967aa17 58 }
gregeric 0:ee5cb967aa17 59 }