Compare commits
7 Commits
3e4cc09120
...
interrupt-
| Author | SHA1 | Date | |
|---|---|---|---|
| c4849935c0 | |||
| bfc0eb2276 | |||
|
28fc2a966b
|
|||
|
6051e4b993
|
|||
|
3a8b90acc8
|
|||
|
7c50101f9e
|
|||
|
2657040304
|
@ -1 +0,0 @@
|
||||
{"hostname":"nagata","username":"oskar"}
|
||||
@ -1 +0,0 @@
|
||||
{"hostname":"nagata","username":"oskar"}
|
||||
@ -5,6 +5,12 @@
|
||||
//#define SN_FRONT
|
||||
#define SN_REAR
|
||||
|
||||
#ifdef SN_FRONT
|
||||
#ifdef SN_REAR
|
||||
#error "Choose to either #define SN_FRONT or SN_REAR, not both!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include "main.h"
|
||||
|
||||
@ -95,10 +101,10 @@ typedef struct {
|
||||
static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||
{
|
||||
.can_id = 0x0D1, .dlc = 3, .num_signals = 7, .period = 100, .signals = {
|
||||
{ .type = DIN, .channel = R5, .start = 0, .length = 1, .factor = 1., .name = "LS L" },
|
||||
{ .type = DIN, .channel = L9, .start = 1, .length = 1, .factor = 1., .name = "LS R" },
|
||||
{ .type = DIN, .channel = LA, .start = 2, .length = 1, .factor = 1., .name = "SDC M pre BOTS" },
|
||||
{ .type = DIN, .channel = LC, .start = 3, .length = 1, .factor = 1., .name = "SDC M post INS" },
|
||||
{ .type = DIN, .channel = L9, .start = 0, .length = 1, .factor = 1., .name = "LS L" },
|
||||
{ .type = DIN, .channel = LA, .start = 1, .length = 1, .factor = 1., .name = "LS R" },
|
||||
{ .type = DIN, .channel = R5, .start = 2, .length = 1, .factor = 1., .name = "SDC M pre BOTS" },
|
||||
{ .type = DIN, .channel = R6, .start = 3, .length = 1, .factor = 1., .name = "SDC M post INS" },
|
||||
{ .type = DIN, .channel = R7, .start = 4, .length = 1, .factor = 1., .name = "SDC M post BSPD" },
|
||||
|
||||
{ .type = AIN, .channel = R0, .start = 8, .length = 8, .factor = ((512./2)/ADQ), .name = "BDTS FL" },
|
||||
@ -109,7 +115,7 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||
.can_id = 0x0D3, .dlc = 7, .num_signals = 6, .period = 10, .signals = {
|
||||
{ .type = AIN, .channel = L1, .start = 0, .length = 8, .factor = (256./ADQ), .name = "APPS 1" },
|
||||
{ .type = AIN, .channel = L2, .start = 8, .length = 8, .factor = (256./ADQ), .name = "APPS 2" },
|
||||
{ .type = AIN, .channel = RA, .start = 16, .length = 8, .factor = ((512./2)/ADQ), .name = "BP F" },
|
||||
{ .type = AIN, .channel = L5, .start = 16, .length = 8, .factor = ((512./2)/ADQ), .name = "BP F" },
|
||||
{ .type = AIN, .channel = R9, .start = 24, .length = 12, .factor = 1., .name = "SAS" },
|
||||
{ .type = FIN, .channel = R8, .start = 40, .length = 8, .factor = 1., .name = "WSS FL" },
|
||||
{ .type = FIN, .channel = LB, .start = 48, .length = 8, .factor = 1., .name = "WSS FR" },
|
||||
@ -117,7 +123,7 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||
},
|
||||
{
|
||||
.can_id = 0x0D5, .dlc = 3, .num_signals = 2, .period = 10, .signals = {
|
||||
{ .type = AIN, .channel = RC, .start = 0, .length = 12, .factor = 1., .name = "DS FL" },
|
||||
{ .type = AIN, .channel = L3, .start = 0, .length = 12, .factor = 1., .name = "DS FL" },
|
||||
{ .type = AIN, .channel = L4, .start = 12, .length = 12, .factor = 1., .name = "DS FR" },
|
||||
}
|
||||
},
|
||||
@ -129,6 +135,11 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||
}
|
||||
};
|
||||
|
||||
#define CAN_PWM_DC_ID 0x0DA // UNUSED
|
||||
#define CAN_PWM_CONF_ID 0x0DB // UNUSED
|
||||
#define CAN_PWM_BASE_ID CAN_PWM_DC_ID
|
||||
#define CAN_PWM_FILTER_MASK 0x7FE // Match both
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef SN_REAR
|
||||
@ -143,20 +154,20 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||
{ .type = AIN, .channel = R0, .start = 8, .length = 8, .factor = ((512./2)/ADQ), .name = "BDTS RL" },
|
||||
{ .type = AIN, .channel = L8, .start = 16, .length = 8, .factor = ((512./2)/ADQ), .name = "BDTS RR" },
|
||||
|
||||
{ .type = AIN, .channel = R9, .start = 24, .length = 8, .factor = (256./ADQ), .name = "WT BAT" },
|
||||
{ .type = AIN, .channel = RB, .start = 32, .length = 8, .factor = (256./ADQ), .name = "WT DT" },
|
||||
{ .type = AIN, .channel = RD, .start = 40, .length = 8, .factor = (256./ADQ), .name = "WP BAT" },
|
||||
{ .type = AIN, .channel = RF, .start = 48, .length = 8, .factor = (256./ADQ), .name = "WP DT" },
|
||||
{ .type = AIN, .channel = L3, .start = 24, .length = 8, .factor = (256./ADQ), .name = "WT BAT" },
|
||||
{ .type = AIN, .channel = R9, .start = 32, .length = 8, .factor = (256./ADQ), .name = "WT DT" },
|
||||
{ .type = AIN, .channel = L5, .start = 40, .length = 8, .factor = (256./ADQ), .name = "WP BAT" },
|
||||
{ .type = AIN, .channel = RB, .start = 48, .length = 8, .factor = (256./ADQ), .name = "WP DT" },
|
||||
}
|
||||
},
|
||||
{
|
||||
.can_id = 0x0D4, .dlc = 8, .num_signals = 7, .period = 10, .signals = {
|
||||
{ .type = AIN, .channel = L1, .start = 0, .length = 8, .factor = ((25.6/.1)/ADQ), .name = "EBS APS 1" },
|
||||
{ .type = AIN, .channel = L2, .start = 8, .length = 8, .factor = ((25.6/.1)/ADQ), .name = "EBS APS 2" },
|
||||
{ .type = AIN, .channel = RA, .start = 16, .length = 8, .factor = ((512./2)/ADQ), .name = "BP F" },
|
||||
{ .type = AIN, .channel = RA, .start = 16, .length = 8, .factor = ((512./2)/ADQ), .name = "BP R" },
|
||||
{ .type = FIN, .channel = R8, .start = 24, .length = 8, .factor = 1., .name = "WSS RL" },
|
||||
{ .type = FIN, .channel = LB, .start = 32, .length = 8, .factor = 1., .name = "WSS RR" },
|
||||
{ .type = AIN, .channel = RC, .start = 40, .length = 12, .factor = 1., .name = "DS RL" },
|
||||
{ .type = AIN, .channel = L7, .start = 40, .length = 12, .factor = 1., .name = "DS RL" },
|
||||
{ .type = AIN, .channel = L4, .start = 52, .length = 12, .factor = 1., .name = "DS RR" },
|
||||
}
|
||||
},
|
||||
@ -173,6 +184,8 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = {
|
||||
|
||||
#define CAN_PWM_DC_ID 0x0DC
|
||||
#define CAN_PWM_CONF_ID 0x0DD
|
||||
#define CAN_PWM_BASE_ID CAN_PWM_DC_ID
|
||||
#define CAN_PWM_FILTER_MASK 0x7FE // Match both 0x0DC and 0x0DD
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -62,6 +62,7 @@ void FDCAN2_IT0_IRQHandler(void);
|
||||
void FDCAN1_IT1_IRQHandler(void);
|
||||
void FDCAN2_IT1_IRQHandler(void);
|
||||
void TIM8_CC_IRQHandler(void);
|
||||
void TIM6_DAC_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
/* USER CODE END EFP */
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "mappings.h"
|
||||
/* USER CODE END Includes */
|
||||
@ -50,9 +51,20 @@
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
|
||||
/* USER CODE BEGIN PV */
|
||||
/* Declare buffer in D1 domain SRAM */
|
||||
unsigned int tx_counter;
|
||||
bool adc_conv_cplt;
|
||||
|
||||
FDCAN_HandleTypeDef *hMainCAN, *hPeriCAN;
|
||||
FDCAN_TxHeaderTypeDef txHeader;
|
||||
|
||||
// Declare buffer in AXI SRAM
|
||||
static uint16_t adc_values[NUM_ADC_PINS];
|
||||
static uint8_t dio_values[NUM_DIO_PINS];
|
||||
#ifdef SN_FRONT
|
||||
static uint8_t ls_values[2];
|
||||
#endif /* SN_FRONT */
|
||||
|
||||
static uint16_t filtered_values[NUM_ADC_PINS];
|
||||
|
||||
// See mappings.h pwm_tim_t
|
||||
TIM_HandleTypeDef* PWM_TIM_MAP[3] = {&htim1, &htim4, &htim3};
|
||||
@ -72,6 +84,104 @@ static void MX_NVIC_Init(void);
|
||||
/* Private user code ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN 0 */
|
||||
|
||||
void send_latest_can() {
|
||||
|
||||
tx_counter++;
|
||||
|
||||
#if defined(SN_FRONT)
|
||||
memcpy(dio_values, ls_values, 2);
|
||||
memset(ls_values, 0, 2);
|
||||
for (int di = 2; di < NUM_DIO_PINS; di++) { //TODO: find way to make this dependent on mappings
|
||||
dio_values[di] = HAL_GPIO_ReadPin(
|
||||
DIO_PIN_MAP[di].port,
|
||||
DIO_PIN_MAP[di].pin
|
||||
);
|
||||
}
|
||||
#elif defined(SN_REAR)
|
||||
for (int di = 0; di < NUM_DIO_PINS; di++) {
|
||||
dio_values[di] = HAL_GPIO_ReadPin(
|
||||
DIO_PIN_MAP[di].port,
|
||||
DIO_PIN_MAP[di].pin
|
||||
);
|
||||
}
|
||||
#endif /* SN_FRONT */
|
||||
|
||||
for (int pi = 0; pi < NUM_TX_PKT; pi++) {
|
||||
|
||||
can_pkt_t* pktinfo = &(CAN_SIGNAL_MAP[pi]);
|
||||
|
||||
if (pktinfo->num_signals < 0)
|
||||
continue;
|
||||
|
||||
if (tx_counter % pktinfo->period == 0) {
|
||||
|
||||
txHeader.Identifier = pktinfo->can_id;
|
||||
txHeader.DataLength = pktinfo->dlc;
|
||||
uint64_t txData = 0;
|
||||
|
||||
for (int si = 0; si < pktinfo->num_signals; si++) {
|
||||
|
||||
can_signal_t* signal = &(pktinfo->signals[si]);
|
||||
uint16_t value = 0;
|
||||
switch (signal->type) {
|
||||
case DIN:
|
||||
value = dio_values[signal->channel];
|
||||
break;
|
||||
|
||||
case AIN:
|
||||
value = signal->factor * filtered_values[signal->channel];
|
||||
break;
|
||||
|
||||
case FIN:
|
||||
value = wss_flanks[signal->channel];
|
||||
wss_flanks[signal->channel] = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
uint16_t mask = 0xFFFF >> (16 - signal->length);
|
||||
txData |= ((uint64_t) (value & mask)) << (signal->start);
|
||||
|
||||
}
|
||||
|
||||
if (HAL_FDCAN_AddMessageToTxFifoQ(hMainCAN, &txHeader, (uint8_t*) &txData) != HAL_OK)
|
||||
Error_Handler();
|
||||
|
||||
}
|
||||
|
||||
if (tx_counter >= 256) {
|
||||
tx_counter = 0;
|
||||
HAL_GPIO_TogglePin(STATUS_G_GPIO_Port, STATUS_G_Pin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void filter_adc() {
|
||||
for (size_t i = 0; i < NUM_TX_PKT; i++){
|
||||
float alpha = 1 / CAN_SIGNAL_MAP[i].period; // TODO: check if it smoothes too much
|
||||
|
||||
for (size_t j = 0; i < CAN_SIGNAL_MAP[i].num_signals; j++) {
|
||||
if(CAN_SIGNAL_MAP[i].signals[j].type != AIN)
|
||||
continue;
|
||||
|
||||
uint8_t ch_index = CAN_SIGNAL_MAP[i].signals[j].channel;
|
||||
filtered_values[ch_index] = (alpha * adc_values[ch_index]) + ((1 - alpha) * filtered_values[ch_index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SN_FRONT
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
|
||||
if (GPIO_Pin == DIO_PIN_MAP[CAN_SIGNAL_MAP[0].signals[0].channel].pin) {
|
||||
ls_values[1] = 1;
|
||||
} else if (GPIO_Pin == DIO_PIN_MAP[CAN_SIGNAL_MAP[0].signals[1].channel].pin) {
|
||||
ls_values[0] = 1;
|
||||
}
|
||||
}
|
||||
#endif /* SN_FRONT */
|
||||
|
||||
/* USER CODE END 0 */
|
||||
|
||||
/**
|
||||
@ -117,8 +227,38 @@ int main(void)
|
||||
MX_NVIC_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
FDCAN_HandleTypeDef* hMainCAN = &hfdcan2;
|
||||
//FDCAN_HandleTypeDef* hPeriCAN = &hfdcan1;
|
||||
// Enable Interrupts for Light Switch Pins
|
||||
#ifdef SN_FRONT
|
||||
// check if pin name is "LS L"
|
||||
if (strcmp(CAN_SIGNAL_MAP[0].signals[0].name, "LS L") != 0
|
||||
|| strcmp(CAN_SIGNAL_MAP[0].signals[1].name, "LS R") != 0
|
||||
) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = CAN_SIGNAL_MAP[0].signals[0].channel;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(DIO_PIN_MAP[CAN_SIGNAL_MAP[0].signals[0].channel].port, &GPIO_InitStruct);
|
||||
GPIO_InitStruct.Pin = CAN_SIGNAL_MAP[0].signals[1].channel;
|
||||
HAL_GPIO_Init(DIO_PIN_MAP[CAN_SIGNAL_MAP[0].signals[1].channel].port, &GPIO_InitStruct);
|
||||
|
||||
// Did not find a way to make this dependent on mappings,
|
||||
// since the EXTI lines are shared for pins 10-15
|
||||
// so i just error if the pins are not 10, 15
|
||||
if (DIO_PIN_MAP[CAN_SIGNAL_MAP[0].signals[0].channel].pin != GPIO_PIN_10
|
||||
|| DIO_PIN_MAP[CAN_SIGNAL_MAP[0].signals[1].channel].pin != GPIO_PIN_15
|
||||
) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
|
||||
#endif /* SN_FRONT */
|
||||
|
||||
hMainCAN = &hfdcan1;
|
||||
hPeriCAN = &hfdcan2;
|
||||
|
||||
if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
|
||||
Error_Handler();
|
||||
@ -126,12 +266,10 @@ int main(void)
|
||||
if (HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_values, NUM_ADC_PINS) != HAL_OK)
|
||||
Error_Handler();
|
||||
|
||||
HAL_TIM_Base_Start(&htim6);
|
||||
HAL_TIM_Base_Start_IT(&htim6);
|
||||
|
||||
// CAN TX PREP
|
||||
|
||||
FDCAN_TxHeaderTypeDef txHeader;
|
||||
|
||||
// Prep the tx frame
|
||||
txHeader.ErrorStateIndicator = FDCAN_ESI_PASSIVE;
|
||||
txHeader.BitRateSwitch = FDCAN_BRS_OFF;
|
||||
@ -154,8 +292,8 @@ int main(void)
|
||||
filter.FilterIndex = 0;
|
||||
filter.FilterType = FDCAN_FILTER_MASK;
|
||||
filter.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
|
||||
filter.FilterID1 = 0x0DD;
|
||||
filter.FilterID2 = 0x7FE; // Match 0x0DC and 0x0DD
|
||||
filter.FilterID1 = CAN_PWM_BASE_ID;
|
||||
filter.FilterID2 = CAN_PWM_FILTER_MASK;
|
||||
|
||||
if (HAL_FDCAN_ConfigFilter(hMainCAN, &filter) != HAL_OK)
|
||||
Error_Handler();
|
||||
@ -170,77 +308,26 @@ int main(void)
|
||||
HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);
|
||||
HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_2);
|
||||
|
||||
tx_counter = 0;
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
/* USER CODE BEGIN WHILE */
|
||||
for (unsigned int mscounter = 0; 1; mscounter++)
|
||||
while(1)
|
||||
{
|
||||
if(adc_conv_cplt) {
|
||||
adc_conv_cplt = false;
|
||||
|
||||
filter_adc();
|
||||
|
||||
send_latest_can();
|
||||
}
|
||||
|
||||
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
for (int di = 0; di < NUM_DIO_PINS; di++) {
|
||||
dio_values[di] = HAL_GPIO_ReadPin(
|
||||
DIO_PIN_MAP[di].port,
|
||||
DIO_PIN_MAP[di].pin
|
||||
);
|
||||
}
|
||||
|
||||
for (int pi = 0; pi < NUM_TX_PKT; pi++) {
|
||||
|
||||
can_pkt_t* pktinfo = &(CAN_SIGNAL_MAP[pi]);
|
||||
|
||||
if (pktinfo->num_signals < 0)
|
||||
continue;
|
||||
|
||||
if (mscounter % pktinfo->period == 0) {
|
||||
|
||||
txHeader.Identifier = pktinfo->can_id;
|
||||
txHeader.DataLength = pktinfo->dlc;
|
||||
uint64_t txData = 0;
|
||||
|
||||
for (int si = 0; si < pktinfo->num_signals; si++) {
|
||||
|
||||
can_signal_t* signal = &(pktinfo->signals[si]);
|
||||
uint16_t value = 0;
|
||||
switch (signal->type) {
|
||||
case DIN:
|
||||
value = dio_values[signal->channel];
|
||||
break;
|
||||
|
||||
case AIN:
|
||||
value = signal->factor * adc_values[signal->channel];
|
||||
break;
|
||||
|
||||
case FIN:
|
||||
value = wss_flanks[signal->channel];
|
||||
wss_flanks[signal->channel] = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
uint16_t mask = 0xFFFF >> (16 - signal->length);
|
||||
txData |= ((uint64_t) (value & mask)) << (signal->start);
|
||||
|
||||
}
|
||||
|
||||
if (HAL_FDCAN_AddMessageToTxFifoQ(hMainCAN, &txHeader, (uint8_t*) &txData) != HAL_OK)
|
||||
Error_Handler();
|
||||
|
||||
}
|
||||
|
||||
if (mscounter >= 500) {
|
||||
mscounter = 0;
|
||||
HAL_GPIO_TogglePin(STATUS_G_GPIO_Port, STATUS_G_Pin);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// TODO: Move all this into a 1kHz timer callback!
|
||||
HAL_Delay(1);
|
||||
|
||||
}
|
||||
/* USER CODE END 3 */
|
||||
}
|
||||
@ -322,10 +409,21 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
||||
{
|
||||
if (hadc->Instance == ADC1)
|
||||
{
|
||||
__asm volatile ("NOP");
|
||||
adc_conv_cplt = true;
|
||||
}
|
||||
}
|
||||
|
||||
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
|
||||
|
||||
//HAL_GPIO_TogglePin(STATUS_B_GPIO_Port, STATUS_B_Pin);
|
||||
|
||||
if (htim != &htim6)
|
||||
return;
|
||||
|
||||
// TODO: Make timer 10kHz and dont trigger a function with it, for exiting WFI in main
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Input capture timing calculations:
|
||||
* wheel speed = 8000 rpm * (11/48) = 30.55 rot/s
|
||||
@ -371,9 +469,6 @@ void SetCCR(TIM_TypeDef* Instance, unsigned int ch, uint8_t dc) {
|
||||
|
||||
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *handle, uint32_t RxFifo0ITs)
|
||||
{
|
||||
FDCAN_HandleTypeDef* hMainCAN = &hfdcan2;
|
||||
//FDCAN_HandleTypeDef* hPeriCAN = &hfdcan1;
|
||||
|
||||
if (handle != hMainCAN || (RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) == RESET)
|
||||
return; // TODO: handle Peripheral CAN
|
||||
|
||||
@ -430,6 +525,11 @@ void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *handle, uint32_t RxFifo0ITs)
|
||||
|
||||
}
|
||||
|
||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
|
||||
{
|
||||
HAL_ResumeTick();
|
||||
}
|
||||
|
||||
/* USER CODE END 4 */
|
||||
|
||||
/**
|
||||
|
||||
@ -59,6 +59,7 @@ extern DMA_HandleTypeDef hdma_adc1;
|
||||
extern ADC_HandleTypeDef hadc1;
|
||||
extern FDCAN_HandleTypeDef hfdcan1;
|
||||
extern FDCAN_HandleTypeDef hfdcan2;
|
||||
extern TIM_HandleTypeDef htim6;
|
||||
extern TIM_HandleTypeDef htim8;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
@ -300,6 +301,20 @@ void TIM8_CC_IRQHandler(void)
|
||||
/* USER CODE END TIM8_CC_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles TIM6 global interrupt, DAC1_CH1 and DAC1_CH2 underrun error interrupts.
|
||||
*/
|
||||
void TIM6_DAC_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
|
||||
|
||||
/* USER CODE END TIM6_DAC_IRQn 0 */
|
||||
HAL_TIM_IRQHandler(&htim6);
|
||||
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
|
||||
|
||||
/* USER CODE END TIM6_DAC_IRQn 1 */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 1 */
|
||||
|
||||
/* USER CODE END 1 */
|
||||
|
||||
@ -217,9 +217,9 @@ void MX_TIM6_Init(void)
|
||||
|
||||
/* USER CODE END TIM6_Init 1 */
|
||||
htim6.Instance = TIM6;
|
||||
htim6.Init.Prescaler = 4800-1;
|
||||
htim6.Init.Prescaler = 480-1;
|
||||
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim6.Init.Period = 2000-1;
|
||||
htim6.Init.Period = 200-1;
|
||||
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
|
||||
{
|
||||
@ -334,6 +334,10 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
/* USER CODE END TIM6_MspInit 0 */
|
||||
/* TIM6 clock enable */
|
||||
__HAL_RCC_TIM6_CLK_ENABLE();
|
||||
|
||||
/* TIM6 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
|
||||
/* USER CODE BEGIN TIM6_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM6_MspInit 1 */
|
||||
@ -502,6 +506,9 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
|
||||
/* USER CODE END TIM6_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM6_CLK_DISABLE();
|
||||
|
||||
/* TIM6 interrupt Deinit */
|
||||
HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn);
|
||||
/* USER CODE BEGIN TIM6_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM6_MspDeInit 1 */
|
||||
|
||||
@ -276,6 +276,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||
NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.TIM8_CC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
PA0.GPIOParameters=GPIO_Label
|
||||
@ -633,8 +634,8 @@ TIM4.Period=255
|
||||
TIM4.Prescaler=19
|
||||
TIM6.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE
|
||||
TIM6.IPParameters=Prescaler,Period,TIM_MasterOutputTrigger,AutoReloadPreload
|
||||
TIM6.Period=2000-1
|
||||
TIM6.Prescaler=4800-1
|
||||
TIM6.Period=200-1
|
||||
TIM6.Prescaler=480-1
|
||||
TIM6.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||
TIM8.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
|
||||
TIM8.Channel-Input_Capture2_from_TI2=TIM_CHANNEL_2
|
||||
|
||||
3
pre-commit.sh
Normal file
3
pre-commit.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
[ ! find . -type f -iname "*.lck" ]
|
||||
Reference in New Issue
Block a user