Advertisement
matthiasbock

STM32F4xx MCO1/MCO2 code

Oct 23rd, 2017
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.41 KB | None | 0 0
  1. void rcc_mco1_enable()
  2. {
  3.     rcc_periph_clock_enable(RCC_GPIOA);
  4.     gpio_mode_setup(
  5.             GPIOA,
  6.             GPIO_MODE_AF,
  7.             GPIO_PUPD_NONE,
  8.             GPIO8
  9.             );
  10.     gpio_set_af(
  11.             GPIOA,
  12.             GPIO_AF0,
  13.             GPIO8
  14.             );
  15.     gpio_set_output_options(
  16.             GPIOA,
  17.             GPIO_OTYPE_PP,
  18.             GPIO_OSPEED_100MHZ,
  19.             GPIO8
  20.             );
  21. }
  22.  
  23. void rcc_mco2_enable()
  24. {
  25.     rcc_periph_clock_enable(RCC_GPIOC);
  26.     gpio_mode_setup(
  27.             GPIOC,
  28.             GPIO_MODE_AF,
  29.             GPIO_PUPD_NONE,
  30.             GPIO9
  31.             );
  32.     gpio_set_af(
  33.             GPIOC,
  34.             GPIO_AF0,
  35.             GPIO9
  36.             );
  37.     gpio_set_output_options(
  38.             GPIOC,
  39.             GPIO_OTYPE_PP,
  40.             GPIO_OSPEED_100MHZ,
  41.             GPIO9
  42.             );
  43. }
  44.  
  45. void rcc_mco1_set_source(uint8_t src)
  46. {
  47.     // Clear MCO2 source selection bits
  48.     RCC_CFGR = (RCC_CFGR & ~(0x03 << RCC_CFGR_MCO1_SHIFT)) | ((src & 0x03) << RCC_CFGR_MCO1_SHIFT);
  49. }
  50.  
  51. void rcc_mco1_set_prescaler(uint8_t prescaler)
  52. {
  53.     uint8_t v = 0;  // no division
  54.     switch (v)
  55.     {
  56.         case 2:
  57.             v = 0x04;   // division by 2
  58.             break;
  59.         case 3:
  60.             v = 0x05;   // division by 3
  61.             break;
  62.         case 4:
  63.             v = 0x06;   // division by 4
  64.             break;
  65.         case 5:
  66.             v = 0x07;   // division by 5
  67.             break;
  68.         default:
  69.             break;
  70.     }
  71.     RCC_CFGR = (RCC_CFGR & ~(0x07 << RCC_CFGR_MCO1PRE_SHIFT)) | ((v & 0x07) << RCC_CFGR_MCO1PRE_SHIFT);
  72. }
  73.  
  74. void rcc_mco2_set_source(uint8_t src)
  75. {
  76.     // Clear MCO2 source selection bits
  77.     RCC_CFGR = (RCC_CFGR & ~(0x03 << RCC_CFGR_MCO2_SHIFT)) | ((src & 0x03) << RCC_CFGR_MCO2_SHIFT);
  78. }
  79.  
  80. void rcc_mco2_set_prescaler(uint8_t prescaler)
  81. {
  82.     uint8_t v = 0;  // no division
  83.     switch (v)
  84.     {
  85.         case 2:
  86.             v = 0x04;   // division by 2
  87.             break;
  88.         case 3:
  89.             v = 0x05;   // division by 3
  90.             break;
  91.         case 4:
  92.             v = 0x06;   // division by 4
  93.             break;
  94.         case 5:
  95.             v = 0x07;   // division by 5
  96.             break;
  97.         default:
  98.             break;
  99.     }
  100.     RCC_CFGR = (RCC_CFGR & ~(RCC_CFGR_MCO2PRE_MASK << RCC_CFGR_MCO2PRE_SHIFT)) | ((v & RCC_CFGR_MCO2PRE_MASK) << RCC_CFGR_MCO2PRE_SHIFT);
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement