Skip to content

Commit 10dd915

Browse files
authored
Merge pull request #159 from PurdueElectricRacing/feature/cmcgalliard/rcc-MCO
[READY] Clock Out MCO1
2 parents 6591fb2 + f70d40a commit 10dd915

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

common/phal_F4_F7/gpio/gpio.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ typedef struct
232232
#define GPIO_INIT_SDIO_DT2 GPIO_INIT_AF(GPIOC, 10, 12, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_PULL_UP)
233233
#define GPIO_INIT_SDIO_DT3 GPIO_INIT_AF(GPIOC, 11, 12, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_PULL_UP)
234234

235+
// MCO1 (AF0)
236+
#define GPIO_INIT_MCO1_PA8 GPIO_INIT_AF(GPIOA, 8, 0, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
237+
235238
#ifdef STM32F732xx
236239
//CAN
237240
#define GPIO_INIT_CANRX_PA11 GPIO_INIT_AF(GPIOA, 11, 9, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_OPEN_DRAIN, GPIO_INPUT_OPEN_DRAIN)
@@ -240,6 +243,8 @@ typedef struct
240243

241244
//SPI
242245

246+
// MCO1 (AF0)
247+
#define GPIO_INIT_MCO1_PA8 GPIO_INIT_AF(GPIOA, 8, 0, GPIO_OUTPUT_ULTRA_SPEED, GPIO_OUTPUT_PUSH_PULL, GPIO_INPUT_OPEN_DRAIN)
243248

244249

245250
//UART/USART

common/phal_F4_F7/rcc/rcc.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,3 +382,28 @@ void PHAL_trimHSI(uint8_t trim_val)
382382
reg |= trim_val << RCC_CR_HSITRIM_Pos;
383383
RCC->CR = reg;
384384
}
385+
386+
bool PHAL_enableMCO1(GPIO_TypeDef* bank, uint8_t pin, MCO1Source_t source, MCODivisor_t division)
387+
{
388+
if ((bank == GPIOA) && (pin == MCO_OUT_PIN))
389+
{
390+
/* Clear Previous MCO1 Source */
391+
RCC->CFGR &= ~(RCC_CFGR_MCO1_Msk);
392+
393+
/* Select MCO1 Source*/
394+
RCC->CFGR |= (source << RCC_CFGR_MCO1_Pos);
395+
396+
/* Clear Previous Prescaler */
397+
RCC->CFGR &= ~(RCC_CFGR_MCO1PRE_Msk);
398+
399+
/* Select MCO1 Prescaler */
400+
RCC->CFGR |= (division << RCC_CFGR_MCO1PRE_Pos);
401+
}
402+
else
403+
{
404+
return false;
405+
}
406+
407+
return true;
408+
409+
} /* PHAL_enableMCO1() */

common/phal_F4_F7/rcc/rcc.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#endif // HSE_CLOCK_RATE_HZ
3131

3232
#define HSI_CLOCK_RATE_HZ (16000000)
33+
#define MCO_OUT_PIN (8)
3334

3435

3536
// RCC Constants
@@ -61,6 +62,24 @@ typedef enum {
6162
PLL_SRC_HSI16,
6263
} PLLSrc_t;
6364

65+
typedef enum
66+
{
67+
MCO1_SRC_HSI = 0,
68+
MCO1_SRC_LSE = 1,
69+
MCO1_SRC_HSE = 2,
70+
MCO1_SRC_PLL = 3,
71+
72+
} MCO1Source_t;
73+
74+
typedef enum
75+
{
76+
MCO_DIV_NONE = 0,
77+
MCO_DIV_2 = 4,
78+
MCO_DIV_3 = 5,
79+
MCO_DIV_4 = 6,
80+
MCO_DIV_5 = 7
81+
82+
} MCODivisor_t;
6483

6584
typedef enum {
6685
SYSTEM_CLOCK_SRC_PLL,
@@ -157,4 +176,23 @@ bool PHAL_configureAPB2Clock(uint32_t apb2_clock_target_hz);
157176
*/
158177
void PHAL_trimHSI(uint8_t trim_val);
159178

179+
/**
180+
* @brief Enable the Clock Out Pin 1
181+
* It is highly recommended to change this
182+
* only after reset before enabling the
183+
* external oscillators and the PLL.
184+
*
185+
* This function should be called after GPIO initialization using
186+
* GPIO_INIT_MCO1_PA8
187+
*
188+
* @param bank GPIO bank
189+
* @param pin GPIO bank
190+
* @param source Clock source to send to the pin
191+
* @param division Division of clock source sent to the pin
192+
* @return true Successfully enabled the clock out
193+
* @return false
194+
*/
195+
196+
bool PHAL_enableMCO1(GPIO_TypeDef* bank, uint8_t pin, MCO1Source_t source, MCODivisor_t division);
197+
160198
#endif // _PHAL_PLL_H_

0 commit comments

Comments
 (0)