hw_init.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "stm8s.h"
  2. void HW_Init(void)
  3. {
  4. //时钟设置
  5. CLK_DeInit();
  6. CLK_HSICmd(ENABLE); //配置内部高速时钟
  7. CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //内核1分频
  8. CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV8); //时钟8分频
  9. //GPIO
  10. GPIO_DeInit(GPIOD);
  11. GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_FL_IT); //PD4 KEY
  12. EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD, EXTI_SENSITIVITY_FALL_ONLY);
  13. GPIO_DeInit(GPIOC);
  14. GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_PU_IT); //PC3 INT2
  15. EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
  16. GPIO_Init(GPIOC, GPIO_PIN_7, GPIO_MODE_IN_PU_IT); //PC7 INT7
  17. EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
  18. GPIO_DeInit(GPIOB);
  19. GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_OD_HIZ_FAST); //SCL
  20. GPIO_Init(GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_OD_HIZ_FAST); //SDA
  21. //TIM4
  22. TIM4_DeInit();
  23. TIM4_TimeBaseInit(TIM4_PRESCALER_8, 255); //1ms
  24. TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  25. TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  26. TIM4_Cmd(ENABLE);
  27. //TIM1
  28. TIM1_DeInit();
  29. TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 999, 0);
  30. TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE,
  31. 800, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET,
  32. TIM1_OCNIDLESTATE_SET); //PWM1模式,输出使能,不互补,占空比800, 输出极性高,空闲低电平
  33. TIM1_Cmd(ENABLE);
  34. //TIM2
  35. TIM2_DeInit();
  36. TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999);
  37. TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 200, TIM2_OCPOLARITY_LOW);
  38. TIM2_OC1PreloadConfig(ENABLE);
  39. TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 200, TIM2_OCPOLARITY_LOW);
  40. TIM2_OC2PreloadConfig(ENABLE);
  41. TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 200, TIM2_OCPOLARITY_LOW);
  42. TIM2_OC3PreloadConfig(ENABLE);
  43. TIM2_ARRPreloadConfig(ENABLE);
  44. TIM2_Cmd(ENABLE);
  45. //ADC
  46. GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_FL_NO_IT); //Light_in,ch5
  47. GPIO_Init(GPIOD, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT); //Vin,ch6
  48. GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_FL_NO_IT); //Chg_in,ch2
  49. ADC1_DeInit();
  50. ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_2, ADC1_PRESSEL_FCPU_D2, \
  51. ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL5,\
  52. DISABLE);
  53. ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_5, ADC1_PRESSEL_FCPU_D2, \
  54. ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL5,\
  55. DISABLE);
  56. ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_6, ADC1_PRESSEL_FCPU_D2, \
  57. ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL6,\
  58. DISABLE);
  59. ADC1_ITConfig(ADC1_IT_AWS2, ENABLE);
  60. ADC1_ITConfig(ADC1_IT_AWS5, ENABLE);
  61. ADC1_ITConfig(ADC1_IT_AWS6, ENABLE);
  62. /* Enable general interrupts */
  63. enableInterrupts();
  64. }