ganz hässliche code zwischen speicher

This commit is contained in:
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 */

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 */
}
/**