35 lines
1.2 KiB
C
35 lines
1.2 KiB
C
#ifndef INC_CLOCK_SYNC_H_
|
|
#define INC_CLOCK_SYNC_H_
|
|
|
|
/**
|
|
* @file Clock_Sync.h
|
|
* @author Jasper v. Blanckenburg (j.blanckenburg@fasttube.de)
|
|
* @brief Clock synchronization mechanism -- master side
|
|
* @version 0.1
|
|
* @date 2022-08-01
|
|
*
|
|
* @copyright Copyright (c) 2022
|
|
*
|
|
* The slaves' clocks are fairly inaccurate -- too inaccurate for reliable CAN
|
|
* communication. In order to synchronize the clock frequencies, the slaves need
|
|
* an external clock source. Since the HSE doesn't work on all slaves, we use
|
|
* the master as the external clock source. For more detail, take a look at the
|
|
* clock sync section in the slave code.
|
|
*
|
|
* This file handles the master part of the clock sync mechanism: It sends
|
|
* CLOCK_SYNC frames every 1000 ms and MASTER_HEARTBEAT frames every 100 ms. In
|
|
* order to keep the time between packets accurate, they are sent from timer
|
|
* interrupts.
|
|
*/
|
|
|
|
#include "stm32g4xx_hal.h"
|
|
#include "stm32g4xx_hal_fdcan.h"
|
|
#include "stm32g4xx_hal_tim.h"
|
|
|
|
void clock_sync_init(FDCAN_HandleTypeDef* can, TIM_HandleTypeDef* sync_timer,
|
|
TIM_HandleTypeDef* heartbeat_timer);
|
|
|
|
void clock_sync_handle_timer_complete(TIM_HandleTypeDef* timer);
|
|
|
|
#endif // INC_CLOCK_SYNC_H_
|