main.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #if defined STM32F1
  2. # include <stm32f10x.h>
  3. #elif defined STM32F4
  4. # include <stm32f4xx.h>
  5. #endif
  6. void initGPIO()
  7. {
  8. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  9. GPIO_InitTypeDef GPIO_Config;
  10. #if defined STM32F1
  11. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  12. GPIO_Config.GPIO_Pin = GPIO_Pin_8;
  13. GPIO_Config.GPIO_Mode = GPIO_Mode_AF_PP;
  14. GPIO_Config.GPIO_Speed = GPIO_Speed_50MHz;
  15. GPIO_Init(GPIOC, &GPIO_Config);
  16. GPIO_PinRemapConfig( GPIO_FullRemap_TIM3, ENABLE );
  17. #elif defined STM32F4
  18. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  19. GPIO_Config.GPIO_Mode = GPIO_Mode_AF;
  20. GPIO_Config.GPIO_OType = GPIO_OType_PP;
  21. GPIO_Config.GPIO_Pin = GPIO_Pin_6;
  22. GPIO_Config.GPIO_PuPd = GPIO_PuPd_NOPULL;
  23. GPIO_Config.GPIO_Speed = GPIO_Speed_2MHz;
  24. GPIO_Init(GPIOA, &GPIO_Config);
  25. GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);
  26. #endif
  27. }
  28. void initTimers()
  29. {
  30. SystemCoreClockUpdate();
  31. TIM_TimeBaseInitTypeDef TIM_BaseConfig;
  32. TIM_OCInitTypeDef TIM_OCConfig;
  33. // 10 kHz timer.
  34. TIM_BaseConfig.TIM_Prescaler = (uint16_t)(SystemCoreClock / 10000) - 1;
  35. // 10000 / 5000 = 1 Hz blinking.
  36. TIM_BaseConfig.TIM_Period = 5000;
  37. TIM_BaseConfig.TIM_ClockDivision = 0;
  38. TIM_BaseConfig.TIM_CounterMode = TIM_CounterMode_Up;
  39. TIM_OCConfig.TIM_OCMode = TIM_OCMode_PWM1;
  40. TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable;
  41. // 2500 / 5000 = 50% duty cycle.
  42. TIM_OCConfig.TIM_Pulse = 2499;
  43. TIM_OCConfig.TIM_OCPolarity = TIM_OCPolarity_High;
  44. #if defined STM32F1
  45. TIM_OC3Init(TIM3, &TIM_OCConfig);
  46. #elif defined STM32F4
  47. // For STM32F4 timer clock = SystemCoreClock / 2 by default.
  48. TIM_BaseConfig.TIM_Prescaler = (uint16_t)(SystemCoreClock / 2 / 10000) - 1;
  49. TIM_OC1Init(TIM3, &TIM_OCConfig);
  50. #endif
  51. TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  52. TIM_TimeBaseInit(TIM3, &TIM_BaseConfig);
  53. TIM_ARRPreloadConfig(TIM3, ENABLE);
  54. TIM_Cmd(TIM3, ENABLE);
  55. }
  56. void initAll(void)
  57. {
  58. initGPIO();
  59. initTimers();
  60. }
  61. int main(void)
  62. {
  63. initAll();
  64. for (;;);
  65. return 0;
  66. }