kbd.c 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "kbd.h"
  2. #include "stm32f10x_lib.h"
  3. #define GPIO_Pin_KB1 GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
  4. #define GPIO_Pin_KB2 GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_9
  5. #define GPIO_KB1 GPIOA
  6. #define GPIO_KB2 GPIOB
  7. #define RCC_APB2Periph_GPIO_KB1 RCC_APB2Periph_GPIOA
  8. #define RCC_APB2Periph_GPIO_KB2 RCC_APB2Periph_GPIOB
  9. #define EXTI_LINE_KB1 EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3
  10. #define GPIO_PORT_SOURCE_KB1 GPIO_PortSourceGPIOA
  11. #define EXTI_LINE_KB2 EXTI_Line0 | EXTI_Line1 | EXTI_Line9
  12. #define GPIO_PORT_SOURCE_KB2 GPIO_PortSourceGPIOB
  13. void rt_hw_kbd_init()
  14. {
  15. GPIO_InitTypeDef GPIO_InitStructure;
  16. NVIC_InitTypeDef NVIC_InitStructure;
  17. EXTI_InitTypeDef EXTI_InitStructure;
  18. /* Configure Key Button 1 GPIO Pin as input floating (Key Button EXTI Line) */
  19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_KB1;
  20. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  21. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  22. GPIO_Init(GPIO_KB1, &GPIO_InitStructure);
  23. /* Configure Key Button 2 GPIO Pin as input floating (Key Button EXTI Line) */
  24. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_KB2;
  25. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  26. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  27. GPIO_Init(GPIO_KB2, &GPIO_InitStructure);
  28. /* Enable Key Button GPIO Port clock */
  29. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_KB1 | RCC_APB2Periph_GPIO_KB2 |
  30. RCC_APB2Periph_AFIO, ENABLE);
  31. /* Configure one bit for preemption priority */
  32. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  33. /* Enable the EXTI9_5 Interrupt */
  34. NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
  35. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  36. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  37. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  38. NVIC_Init(&NVIC_InitStructure);
  39. NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQChannel;
  40. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  41. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  42. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  43. NVIC_Init(&NVIC_InitStructure);
  44. NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQChannel;
  45. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  46. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  47. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  48. NVIC_Init(&NVIC_InitStructure);
  49. NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel;
  50. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  51. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  52. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  53. NVIC_Init(&NVIC_InitStructure);
  54. NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
  55. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  56. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  57. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  58. NVIC_Init(&NVIC_InitStructure);
  59. /* Connect Key Button EXTI Line to Key Button GPIO Pin */
  60. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB1, GPIO_PinSource0);
  61. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB1, GPIO_PinSource1);
  62. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB1, GPIO_PinSource2);
  63. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB1, GPIO_PinSource3);
  64. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB2, GPIO_PinSource0);
  65. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB2, GPIO_PinSource1);
  66. GPIO_EXTILineConfig(GPIO_PORT_SOURCE_KB2, GPIO_PinSource9);
  67. /* Configure Key Button EXTI Line to generate an interrupt on falling edge */
  68. EXTI_InitStructure.EXTI_Line = EXTI_LINE_KB1 | EXTI_LINE_KB2;
  69. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  70. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  71. EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  72. EXTI_Init(&EXTI_InitStructure);
  73. }
  74. void rt_hw_kbd_scan()
  75. {
  76. /* KBD1 */
  77. /* KBD2 */
  78. }