InfraredSensor.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "stm32f10x.h" // Device header
  2. uint16_t Count;
  3. void InfraredSensor_Init(void)
  4. {
  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  7. GPIO_InitTypeDef GPIO_InitStructure;
  8. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11. GPIO_Init(GPIOB, &GPIO_InitStructure);
  12. GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
  13. EXTI_InitTypeDef EXTI_InitStructure;
  14. EXTI_InitStructure.EXTI_Line = EXTI_Line14;
  15. EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  16. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  17. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  18. EXTI_Init(&EXTI_InitStructure);
  19. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  20. NVIC_InitTypeDef NVIC_InitStructure;
  21. NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  22. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  23. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  24. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  25. NVIC_Init(&NVIC_InitStructure);
  26. }
  27. uint16_t InfraredSensor_Get_Count(void)
  28. {
  29. return Count;
  30. }
  31. void EXTI15_10_IRQHandler(void)
  32. {
  33. if (EXTI_GetITStatus(EXTI_Line14) == SET)
  34. {
  35. Count ++;
  36. EXTI_ClearITPendingBit(EXTI_Line14);
  37. }
  38. }