1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
   | #include "stm32f10x.h"                  
  int16_t Encoder_Count;
 
 
 
  void Encoder_Init(void) { 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 	 	GPIO_InitTypeDef GPIO_InitStructure; 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 	GPIO_Init(GPIOB, &GPIO_InitStructure); 	 	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); 	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1); 	 	EXTI_InitTypeDef EXTI_InitStructure; 	EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1; 	EXTI_InitStructure.EXTI_LineCmd = ENABLE; 	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 	EXTI_Init(&EXTI_InitStructure); 	 	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 	NVIC_InitTypeDef NVIC_InitStructure; 	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; 	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; 	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 	NVIC_Init(&NVIC_InitStructure);
  	NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; 	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; 	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; 	NVIC_Init(&NVIC_InitStructure); }
  int16_t Encoder_Get(void) {                     	int16_t Temp; 	Temp = Encoder_Count; 	Encoder_Count = 0; 	return Temp; }
 
 
 
  void EXTI0_IRQHandler(void) { 	if (EXTI_GetITStatus(EXTI_Line0) == SET) 	{ 		 		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0) 		{ 			if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0) 			{ 				Encoder_Count --; 			} 		} 		EXTI_ClearITPendingBit(EXTI_Line0); 	} }
  void EXTI1_IRQHandler(void) { 	if (EXTI_GetITStatus(EXTI_Line1) == SET) 	{ 		 		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0) 		{ 			if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == 0) 			{ 				Encoder_Count ++; 			} 		} 		EXTI_ClearITPendingBit(EXTI_Line1); 	} }
   |