50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
#ifndef CANEMU_H
|
|
#define CANEMU_H
|
|
|
|
#include "canform.h"
|
|
#include "tim.h"
|
|
|
|
// Настройки GPIO и таймера
|
|
#define CANEMU_TX_GPIO_PORT GPIOB
|
|
#define CANEMU_TX_GPIO_PIN 0
|
|
#define CANEMU_TIM TIM2
|
|
#define CANEMU_TIM_US_TICKS 72 // Для 1 мкс при 72 МГц
|
|
#define CANEMU_TIM_CLOCK_HZ 72000000UL // частота таймера
|
|
#define CAN_MIN_PERIOD 20
|
|
#define LED_WORKING(on_off) \
|
|
do { \
|
|
if (!on_off) GPIOC->ODR |= (1U << 13); \
|
|
else GPIOC->ODR &= ~(1U << 13); \
|
|
} while (0)
|
|
// === Макросы управления GPIO ===
|
|
|
|
#define can_tx_set_1() (CANEMU_TX_GPIO_PORT->BSRR = (1U << CANEMU_TX_GPIO_PIN))
|
|
#define can_tx_set_0() (CANEMU_TX_GPIO_PORT->BRR = (1U << CANEMU_TX_GPIO_PIN))
|
|
|
|
// === Макросы управления таймером ===
|
|
|
|
#define tim_reset(TIM) ((TIM)->CNT = 0)
|
|
#define tim_get(TIM) ((uint16_t)(TIM)->CNT)
|
|
#define tim_start(TIM) ((TIM)->CR1 |= TIM_CR1_CEN)
|
|
#define tim_stop(TIM) ((TIM)->CR1 &= ~TIM_CR1_CEN)
|
|
|
|
typedef struct
|
|
{
|
|
CAN_TxHeaderTypeDef header;
|
|
uint8_t data[8];
|
|
uint32_t bitrate_bps;
|
|
uint32_t start_poll;
|
|
uint32_t transmit;
|
|
uint32_t period_ms;
|
|
CAN_ErrorFlags_t errors;
|
|
}CANEmu_HandleTypeDef;
|
|
extern CANEmu_HandleTypeDef hcanemu;
|
|
|
|
|
|
void CANEmu_Init(CANEmu_HandleTypeDef *hcanemu, uint32_t bitrate);
|
|
void CANEmu_Working(CANEmu_HandleTypeDef *hcanemu);
|
|
void CANEmu_SendFrame(CANEmu_HandleTypeDef *hcanemu);
|
|
|
|
|
|
#endif // CANEMU_H
|