ganz hässliche code zwischen speicher

This commit is contained in:
Johnny Hsu 2025-07-12 02:38:13 +02:00
parent 9c4b60fd18
commit fb3eba0a09
12 changed files with 88 additions and 66 deletions

View File

@ -29,6 +29,7 @@
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data);
HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle);
HAL_StatusTypeDef can_change_ts_state(TSState state);
HAL_StatusTypeDef can_update_state();
void ftcan_msg_received_cb(uint16_t id, size_t len, const uint8_t* data);
#endif

View File

@ -61,7 +61,6 @@ void Error_Handler(void);
/* Private defines -----------------------------------------------------------*/
#define TS_ON_Pin GPIO_PIN_8
#define TS_ON_GPIO_Port GPIOI
#define TS_ON_EXTI_IRQn EXTI9_5_IRQn
#define SDC_ON_Pin GPIO_PIN_0
#define SDC_ON_GPIO_Port GPIOI
#define SDC_ENABLE_Pin GPIO_PIN_1
@ -79,8 +78,9 @@ void Error_Handler(void);
#define IMD_ERROR_GPIO_Port GPIOI
/* USER CODE BEGIN Private defines */
#define AMS_TIMEOUT 150
#define AMS_TIMEOUT 5000
#define TRY(call) {if (call) return HAL_ERROR;}
#define SHOW_STATE(call) {if (call) led_blink(&htim3, COLOR_ERROR, 0);}
/* USER CODE END Private defines */
#ifdef __cplusplus

View File

@ -47,5 +47,8 @@ extern IMDData imd_data;
void error_led_init();
void sdc_init();
void ts_handle_ams_status(const uint8_t* data);
HAL_StatusTypeDef change_ts_state(TSState state);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
HAL_StatusTypeDef check_sdc_state();
#endif

View File

@ -55,7 +55,7 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void EXTI9_5_IRQHandler(void);
void FDCAN1_IT0_IRQHandler(void);
void EXTI15_10_IRQHandler(void);
/* USER CODE BEGIN EFP */

@ -1 +1 @@
Subproject commit 887f92167d58e551abac18f4f899c74bddc13d46
Subproject commit 60dab2ade129e957eca7c96eede8c34f05e13f6f

View File

@ -6,6 +6,7 @@
#include "can-halal.h"
extern int can_ams_last_tick;
extern TSState request_state;
HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
TRY(ftcan_init(handle));
@ -15,17 +16,17 @@ HAL_StatusTypeDef can_init(FDCAN_HandleTypeDef* handle) {
return HAL_OK;
}
HAL_StatusTypeDef can_change_ts_state(TSState state) {
uint8_t data[2];
if (state == TS_ACTIVE) {
data[0] = state;
return ftcan_transmit(CAN_ID_AMS_IN, data, sizeof(data));
} else if (state == TS_INACTIVE){
data[0] = state;
return ftcan_transmit(CAN_ID_AMS_IN, data, sizeof(data));
HAL_StatusTypeDef can_update_state(){
uint8_t data;
if (request_state == TS_ACTIVE){
data = 0x01;
} else if (request_state == TS_INACTIVE) {
data = 0x00;
} else {
return HAL_ERROR;
}
return ftcan_transmit(CAN_ID_AMS_IN, &data, sizeof(data));
}
void ftcan_msg_received_cb(uint16_t id, size_t len, const uint8_t* data) {

View File

@ -63,8 +63,9 @@ PCD_HandleTypeDef hpcd_USB_OTG_FS;
SDRAM_HandleTypeDef hsdram1;
/* USER CODE BEGIN PV */
extern TSStateHandle ts_state;
int can_ams_last_tick = 0;
GPIO_PinState TSON = 0;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@ -134,7 +135,9 @@ int main(void)
error_led_init();
sdc_init();
led_init(&htim3);
can_init(&hfdcan1);
while (can_init(&hfdcan1)){
led_blink(&htim3, 0x00FFFF00, 0);
}
/* USER CODE END 2 */
/* Infinite loop */
@ -147,9 +150,18 @@ int main(void)
if (HAL_GetTick() - can_ams_last_tick > AMS_TIMEOUT) {
error_led_init();
led_blink(&htim3, COLOR_ERROR, 0);
} else {
led_blink(&htim3, COLOR_HEARTBEAT, 1000);
}
led_blink(&htim3, COLOR_HEARTBEAT, 1000);
// SHOW_STATE(check_sdc_state());
// SHOW_STATE(can_update_state());
TSON = HAL_GPIO_ReadPin(TS_ON_GPIO_Port, TS_ON_Pin);
if (TSON == 1){
change_ts_state(TS_ACTIVE);
}
check_sdc_state();
can_update_state();
}
/* USER CODE END 3 */
}
@ -273,9 +285,9 @@ static void MX_FDCAN1_Init(void)
hfdcan1.Init.AutoRetransmission = DISABLE;
hfdcan1.Init.TransmitPause = DISABLE;
hfdcan1.Init.ProtocolException = DISABLE;
hfdcan1.Init.NominalPrescaler = 16;
hfdcan1.Init.NominalPrescaler = 5;
hfdcan1.Init.NominalSyncJumpWidth = 1;
hfdcan1.Init.NominalTimeSeg1 = 1;
hfdcan1.Init.NominalTimeSeg1 = 8;
hfdcan1.Init.NominalTimeSeg2 = 1;
hfdcan1.Init.DataPrescaler = 1;
hfdcan1.Init.DataSyncJumpWidth = 1;
@ -284,7 +296,7 @@ static void MX_FDCAN1_Init(void)
hfdcan1.Init.MessageRAMOffset = 0;
hfdcan1.Init.StdFiltersNbr = 32;
hfdcan1.Init.ExtFiltersNbr = 0;
hfdcan1.Init.RxFifo0ElmtsNbr = 0;
hfdcan1.Init.RxFifo0ElmtsNbr = 16;
hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.RxFifo1ElmtsNbr = 0;
hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8;
@ -292,7 +304,7 @@ static void MX_FDCAN1_Init(void)
hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.TxEventsNbr = 0;
hfdcan1.Init.TxBuffersNbr = 0;
hfdcan1.Init.TxFifoQueueElmtsNbr = 0;
hfdcan1.Init.TxFifoQueueElmtsNbr = 32;
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
@ -709,17 +721,11 @@ static void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOI, AMS_ERROR_Pin|IMD_ERROR_Pin, GPIO_PIN_SET);
/*Configure GPIO pin : TS_ON_Pin */
GPIO_InitStruct.Pin = TS_ON_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(TS_ON_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : SDC_ON_Pin */
GPIO_InitStruct.Pin = SDC_ON_Pin;
/*Configure GPIO pins : TS_ON_Pin SDC_ON_Pin */
GPIO_InitStruct.Pin = TS_ON_Pin|SDC_ON_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(SDC_ON_GPIO_Port, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
/*Configure GPIO pin : SDC_ENABLE_Pin */
GPIO_InitStruct.Pin = SDC_ENABLE_Pin;
@ -748,9 +754,6 @@ static void MX_GPIO_Init(void)
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(TS_ON_EXTI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TS_ON_EXTI_IRQn);
HAL_NVIC_SetPriority(ENC_PUSH_ON_EXTI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(ENC_PUSH_ON_EXTI_IRQn);

View File

@ -4,6 +4,8 @@
TSStateHandle ts_state;
IMDData imd_data;
uint8_t led_state;
TSState request_state = TS_INACTIVE;
void error_led_init() {
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
@ -17,34 +19,38 @@ void sdc_init() {
void ts_handle_ams_status(const uint8_t* data) {
ts_state.current_state = data[0] & 0b01111111;
imd_data.ok = data[6] & 0b10000000;
led_state = data[7];
if (ts_state.current_state != TS_ERROR) {
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_RESET);
} else {
if ((led_state | 0b00000010) == 0b10) {
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(AMS_ERROR_GPIO_Port, AMS_ERROR_Pin, GPIO_PIN_RESET);
}
if (imd_data.ok) {
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_RESET);
} else {
if ((led_state | 0b00000100) == 0b100) {
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(IMD_ERROR_GPIO_Port, IMD_ERROR_Pin, GPIO_PIN_RESET);
}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == TS_ON_Pin) {
can_change_ts_state(TS_ACTIVE);
} else if (GPIO_Pin == ENC_PUSH_ON_Pin){
can_change_ts_state(TS_INACTIVE);
HAL_StatusTypeDef change_ts_state(TSState state) {
if (state == TS_ACTIVE) {
request_state = TS_ACTIVE;
return HAL_OK;
} else if (state == TS_INACTIVE){
request_state = TS_INACTIVE;
return HAL_OK;
} else {
__NOP();
return HAL_ERROR;
}
}
HAL_StatusTypeDef check_sdc_state() {
if (!HAL_GPIO_ReadPin(SDC_ON_GPIO_Port, SDC_ON_Pin)) {
TRY(can_change_ts_state(TS_INACTIVE));
TRY(change_ts_state(TS_INACTIVE));
}
return HAL_OK;

View File

@ -163,6 +163,9 @@ void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* hfdcan)
GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
/* FDCAN1 interrupt Init */
HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn);
/* USER CODE BEGIN FDCAN1_MspInit 1 */
/* USER CODE END FDCAN1_MspInit 1 */
@ -193,6 +196,8 @@ void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* hfdcan)
*/
HAL_GPIO_DeInit(GPIOH, GPIO_PIN_13|GPIO_PIN_14);
/* FDCAN1 interrupt DeInit */
HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn);
/* USER CODE BEGIN FDCAN1_MspDeInit 1 */
/* USER CODE END FDCAN1_MspDeInit 1 */

View File

@ -55,7 +55,7 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern FDCAN_HandleTypeDef hfdcan1;
/* USER CODE BEGIN EV */
/* USER CODE END EV */
@ -199,17 +199,17 @@ void SysTick_Handler(void)
/******************************************************************************/
/**
* @brief This function handles EXTI line[9:5] interrupts.
* @brief This function handles FDCAN1 interrupt 0.
*/
void EXTI9_5_IRQHandler(void)
void FDCAN1_IT0_IRQHandler(void)
{
/* USER CODE BEGIN EXTI9_5_IRQn 0 */
/* USER CODE BEGIN FDCAN1_IT0_IRQn 0 */
/* USER CODE END EXTI9_5_IRQn 0 */
HAL_GPIO_EXTI_IRQHandler(TS_ON_Pin);
/* USER CODE BEGIN EXTI9_5_IRQn 1 */
/* USER CODE END FDCAN1_IT0_IRQn 0 */
HAL_FDCAN_IRQHandler(&hfdcan1);
/* USER CODE BEGIN FDCAN1_IT0_IRQn 1 */
/* USER CODE END EXTI9_5_IRQn 1 */
/* USER CODE END FDCAN1_IT0_IRQn 1 */
}
/**

View File

@ -4,11 +4,16 @@ CAD.pinconfig=Dual
CAD.provider=
CORTEX_M7.IPParameters=default_mode_Activation
CORTEX_M7.default_mode_Activation=1
FDCAN1.CalculateBaudRateNominal=520833
FDCAN1.CalculateTimeBitNominal=1920
FDCAN1.CalculateTimeQuantumNominal=640.0
FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,StdFiltersNbr
FDCAN1.CalculateBaudRateNominal=500000
FDCAN1.CalculateTimeBitNominal=2000
FDCAN1.CalculateTimeQuantumNominal=200.0
FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,StdFiltersNbr,TxFifoQueueElmtsNbr,NominalPrescaler,NominalTimeSeg1,NominalTimeSeg2,RxFifo0ElmtsNbr
FDCAN1.NominalPrescaler=5
FDCAN1.NominalTimeSeg1=8
FDCAN1.NominalTimeSeg2=1
FDCAN1.RxFifo0ElmtsNbr=16
FDCAN1.StdFiltersNbr=32
FDCAN1.TxFifoQueueElmtsNbr=32
File.Version=6
GPIO.groupedBy=Show All
I2C1.IPParameters=Timing
@ -145,7 +150,7 @@ MxDb.Version=DB.6.0.141
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.EXTI15_10_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI9_5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.FDCAN1_IT0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
@ -285,7 +290,9 @@ PH13.Signal=FDCAN1_TX
PH14.Locked=true
PH14.Mode=FDCAN_Activate
PH14.Signal=FDCAN1_RX
PH2.GPIOParameters=PinAttribute
PH2.Mode=RGB888
PH2.PinAttribute=
PH2.Signal=LTDC_R0
PH3.Mode=RGB888
PH3.Signal=LTDC_R1
@ -327,7 +334,7 @@ PI7.Signal=GPIO_Output
PI8.GPIOParameters=GPIO_Label
PI8.GPIO_Label=TS_ON
PI8.Locked=true
PI8.Signal=GPXTI8
PI8.Signal=GPIO_Input
PI9.Mode=RGB888
PI9.Signal=LTDC_VSYNC
PinOutPanel.RotationAngle=0
@ -405,7 +412,7 @@ RCC.HCLKFreq_Value=25000000
RCC.HRTIMFreq_Value=25000000
RCC.I2C123Freq_Value=12500000
RCC.I2C4Freq_Value=25000000
RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CKPERSourceSelection,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D2PPRE1,D2PPRE2,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM3,DIVN1,DIVN3,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3,DIVR3Freq_Value,FDCANCLockSelection,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL3FRACN,PLLFRACN,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CKPERSourceSelection,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D2PPRE1,D2PPRE2,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM3,DIVN1,DIVN3,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3,DIVR3Freq_Value,FDCANCLockSelection,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HRTIMFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI23Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
RCC.LPTIM1Freq_Value=12500000
RCC.LPTIM2Freq_Value=25000000
RCC.LPTIM345Freq_Value=25000000
@ -413,8 +420,6 @@ RCC.LPUART1Freq_Value=25000000
RCC.LTDCFreq_Value=25000000
RCC.MCO1PinFreq_Value=64000000
RCC.MCO2PinFreq_Value=25000000
RCC.PLL3FRACN=0
RCC.PLLFRACN=0
RCC.QSPIFreq_Value=25000000
RCC.RNGFreq_Value=48000000
RCC.RTCFreq_Value=32000
@ -518,8 +523,6 @@ SH.FMC_SDNWE.0=FMC_SDNWE,13b-sda1
SH.FMC_SDNWE.ConfNb=1
SH.GPXTI15.0=GPIO_EXTI15
SH.GPXTI15.ConfNb=1
SH.GPXTI8.0=GPIO_EXTI8
SH.GPXTI8.ConfNb=1
SH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1
SH.S_TIM3_CH1.ConfNb=1
SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2

View File

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [4.6.0.1-B1] date: [Tue Jul 08 21:54:22 CEST 2025]
# File automatically-generated by tool: [projectgenerator] version: [4.6.0.1-B1] date: [Fri Jul 11 23:45:55 CEST 2025]
##########################################################################################################################
# ------------------------------------------------