furi_hal_clock.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #pragma once
  2. #ifdef __cplusplus
  3. extern "C" {
  4. #endif
  5. #include <stm32wbxx_ll_rcc.h>
  6. typedef enum {
  7. FuriHalClockMcoLse,
  8. FuriHalClockMcoSysclk,
  9. FuriHalClockMcoMsi100k,
  10. FuriHalClockMcoMsi200k,
  11. FuriHalClockMcoMsi400k,
  12. FuriHalClockMcoMsi800k,
  13. FuriHalClockMcoMsi1m,
  14. FuriHalClockMcoMsi2m,
  15. FuriHalClockMcoMsi4m,
  16. FuriHalClockMcoMsi8m,
  17. FuriHalClockMcoMsi16m,
  18. FuriHalClockMcoMsi24m,
  19. FuriHalClockMcoMsi32m,
  20. FuriHalClockMcoMsi48m,
  21. } FuriHalClockMcoSourceId;
  22. typedef enum {
  23. FuriHalClockMcoDiv1 = LL_RCC_MCO1_DIV_1,
  24. FuriHalClockMcoDiv2 = LL_RCC_MCO1_DIV_2,
  25. FuriHalClockMcoDiv4 = LL_RCC_MCO1_DIV_4,
  26. FuriHalClockMcoDiv8 = LL_RCC_MCO1_DIV_8,
  27. FuriHalClockMcoDiv16 = LL_RCC_MCO1_DIV_16,
  28. } FuriHalClockMcoDivisorId;
  29. /** Early initialization */
  30. void furi_hal_clock_init_early();
  31. /** Early deinitialization */
  32. void furi_hal_clock_deinit_early();
  33. /** Initialize clocks */
  34. void furi_hal_clock_init();
  35. /** Switch to HSI clock */
  36. void furi_hal_clock_switch_to_hsi();
  37. /** Switch to PLL clock */
  38. void furi_hal_clock_switch_to_pll();
  39. /** Stop SysTick counter without resetting */
  40. void furi_hal_clock_suspend_tick();
  41. /** Continue SysTick counter operation */
  42. void furi_hal_clock_resume_tick();
  43. /** Enable clock output on MCO pin
  44. *
  45. * @param source MCO clock source
  46. * @param div MCO clock division
  47. */
  48. void furi_hal_clock_mco_enable(FuriHalClockMcoSourceId source, FuriHalClockMcoDivisorId div);
  49. /** Disable clock output on MCO pin */
  50. void furi_hal_clock_mco_disable();
  51. #ifdef __cplusplus
  52. }
  53. #endif