Added k-line files from 1.9 version, works until dfi

This commit is contained in:
2026-03-30 21:33:37 +02:00
parent c9c2abb4a6
commit b43177774e
13 changed files with 2001 additions and 18 deletions

View File

@@ -35,6 +35,7 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.2092360888" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath"> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.2092360888" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Kline_Libs}&quot;"/>
</option> </option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1467004031" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1467004031" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
</tool> </tool>
@@ -54,6 +55,7 @@
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> <listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Kline_Libs}&quot;"/>
</option> </option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.264989976" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.264989976" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool> </tool>
@@ -118,6 +120,7 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.1997772256" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath"> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.1997772256" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Kline_Libs}&quot;"/>
</option> </option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1230182628" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1230182628" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
</tool> </tool>
@@ -136,6 +139,7 @@
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> <listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/CAN_Libs}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Immobilisers}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Kline_Libs}&quot;"/>
</option> </option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1042657329" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1042657329" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool> </tool>

View File

@@ -60,9 +60,11 @@ void DMA1_Channel1_IRQHandler(void);
void DMA1_Channel2_IRQHandler(void); void DMA1_Channel2_IRQHandler(void);
void FDCAN1_IT0_IRQHandler(void); void FDCAN1_IT0_IRQHandler(void);
void TIM1_BRK_TIM15_IRQHandler(void); void TIM1_BRK_TIM15_IRQHandler(void);
void TIM1_TRG_COM_TIM17_IRQHandler(void);
void TIM1_CC_IRQHandler(void); void TIM1_CC_IRQHandler(void);
void TIM2_IRQHandler(void); void TIM2_IRQHandler(void);
void TIM3_IRQHandler(void); void TIM3_IRQHandler(void);
void USART1_IRQHandler(void);
void TIM6_DAC_IRQHandler(void); void TIM6_DAC_IRQHandler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */

View File

@@ -0,0 +1,274 @@
/* IKW1281Connection.c — byte pump, RX FIFO, no HAL_Delay() in hot path */
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "IKW1281Connection.h"
#include "main.h"
extern UART_HandleTypeDef huart1;
uint8_t K_TxData[KLINE_BUFFER_SIZE];
volatile uint8_t rx_done_flag = 0;
// ---------- RX FIFO ----------
static uint8_t rx_fifo[KLINE_RX_FIFO_SZ];
static volatile uint16_t rx_head = 0, rx_tail = 0;
static inline int rx_fifo_push(uint8_t b){
uint16_t next = (uint16_t)((rx_head + 1U) % KLINE_RX_FIFO_SZ);
if (next == rx_tail) rx_tail = (uint16_t)((rx_tail + 1U) % KLINE_RX_FIFO_SZ); // drop oldest
rx_fifo[rx_head] = b;
rx_head = next;
rx_done_flag = 1;
return 1;
}
int KLine_RxFifo_Pop(uint8_t *out){
if (rx_head == rx_tail) return 0;
uint8_t b = rx_fifo[rx_tail];
rx_tail = (uint16_t)((rx_tail + 1U) % KLINE_RX_FIFO_SZ);
if (out) *out = b;
return 1;
}
// ---------- Non-blocking TX "byte pump" ----------
volatile KTxEngine ktx = {0};
static uint8_t tx_byte_1;
static uint8_t _packetCounter = 0;
static uint8_t _packetCounterInitialized = 0;
void KLine_BytePump_Init(void){ memset((void*)&ktx, 0, sizeof(ktx)); }
int KLine_TxStart(const uint8_t *data, uint16_t len, uint8_t append_end, uint8_t require_ack){
if (ktx.active==1) return 0;
if (len > KLINE_TXBUF_MAX) {
// defensive: refuse too-long sends (KWP1281 blocks are small, so this is fine)
return 0;
}
memcpy(ktx.ibuf, data, len);
ktx.buf = ktx.ibuf;
ktx.using_ibuf = 1;
ktx.active = 1; ktx.len = len; ktx.idx = 0;
ktx.append_end = append_end; ktx.last_tx = 0; ktx.awaiting_echo = 0;
ktx.require_ack = require_ack; ktx.tx_inflight = 0; ktx.next_time_ms = HAL_GetTick();
return 1;
}
int KLine_TxBusy(void){ return ktx.active || ktx.tx_inflight || ktx.awaiting_echo; }
void KLine_BytePump_Service(void){
if (!ktx.active) return;
uint32_t now = HAL_GetTick();
if (ktx.awaiting_echo) return;
//if (ktx.tx_inflight) return;
if ((int32_t)(now - ktx.next_time_ms) < 0) return;
uint8_t b;
if (ktx.idx < ktx.len) b = ktx.buf[ktx.idx++];
else if (ktx.append_end) {
b = PACKET_END_EXPECTED;
ktx.append_end = 0;
ktx.active = 2; //ENDING
}
else { // === FINISHED: make sure state is fully reset ===
ktx.active = 0;
//ktx.awaiting_echo = 0; // <— add //TODO
//ktx.tx_inflight = 0; // <— add
// (optional) ktx.next_time_ms = now;
return;
}
tx_byte_1 = b;
if (HAL_UART_Transmit_IT(&huart1, &tx_byte_1, 1) == HAL_OK){
//ktx.tx_inflight = 1;
ktx.last_tx = b;
if (ktx.require_ack && ktx.active == 1){
ktx.awaiting_echo = 1; // expect tester's ~b
} else {
ktx.awaiting_echo = 0;
}
ktx.next_time_ms = now + KWP_P1_GAP_MS;
}
}
//int pepe = 0;
// Called from HAL_UART_RxCpltCallback (kline.c)
void KLine_OnByteReceived(uint8_t byte)
{
uint32_t now = HAL_GetTick();
// ---- Self-echo suppression: only within a tiny time window after our TX ----
if(ktx.active){
if ((uint32_t)(now - ktx.last_tx_done_ms) <= KWP_ECHO_SUPPRESS_MS && byte == ktx.last_tx) {
if(ktx.active == 2){
ktx.active = 0;
ktx.awaiting_echo = 0;
}
return; // echo of our own last TX byte
//no se bien si me quita el echo o el counter, habra que ver despues cuando los mensajes no sean de 03
}
}
/*if(pepe==2){
pepe++;
}*/
/*if(ktx.awaiting_ack && byte == ktx.last_tx){
return;
}*/
// ---- Tester complement for our TX byte? consume only if it matches ~last_tx ----
if (ktx.active == 1) {
if(ktx.awaiting_echo){
if (byte == (uint8_t)~ktx.last_tx) {
ktx.awaiting_echo = 0;
//return; // consumed tester's complement
} else {
// Not a complement: treat as inbound payload, drop awaiting flag to resync
ktx.awaiting_echo = 0;
//ktx.active = 0; //we are done, communication failed drop message.
//return;
// fall through to inbound handling
}
}
}
else{
//WriteComplement(byte); //then its inboud payload, echo
rx_fifo_push(byte);
}
// ---- Inbound byte from tester: ACK it immediately so we never race timing ----
// (Tiny 1-byte blocking write; safe and deterministic at 9600 bps.)
//WriteComplement(byte);
// Push for higher-level parsing
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){
if (huart->Instance == USART1) {
//ktx.tx_inflight = 0;
ktx.last_tx_done_ms = HAL_GetTick(); // <-- NEW
}
}
// ---------- Legacy/compat API (kept) ----------
uint8_t ReadByte(){
uint32_t timeout = HAL_GetTick() + 1000;
uint8_t b;
while (!KLine_RxFifo_Pop(&b)){
if ((int32_t)(HAL_GetTick() - timeout) >= 0) return 0xFF;
}
return b;
}
uint8_t ReadAndAckByte(void){ uint8_t b = ReadByte(); WriteComplement(b); return b; }
void WriteComplement(uint8_t b){
uint8_t c = (uint8_t)~b;
WriteByteRaw(c); }
void WriteByteRaw(uint8_t b){
ktx.active = 0;
KLine_TxStart(&b, 1, 0, 0);
while (KLine_TxBusy()) KLine_BytePump_Service();
/*ktx.last_tx = b;
ktx.active = 2;
pepe++;
if(b == 0x01){
pepe++;
}
extern UART_HandleTypeDef huart1;
(void)HAL_UART_Transmit(&huart1, &b, 1, 5);*/
}
#define MAX_PACKETS 16
static ParsedPacket packets_buffer[MAX_PACKETS];
ParsedPacket* ReceivePackets(int *out_count){
int count = 0;
while (1){
if (count >= MAX_PACKETS) break;
ParsedPacket p = ReceivePacket();
packets_buffer[count++] = p;
if (p.isAckNak) break;
SendAckPacket();
}
if (out_count) *out_count = count;
return packets_buffer;
}
ParsedPacket ReceivePacket(){
ParsedPacket packet = (ParsedPacket){0};
uint8_t idx = 0;
uint8_t packetLength = ReadAndAckByte(); packet.raw[idx++] = packetLength;
uint8_t packetCounter = ReadPacketCounter(); packet.raw[idx++] = packetCounter;
uint8_t packetCommand = ReadAndAckByte(); packet.raw[idx++] = packetCommand;
for (int i=0;i<packetLength-3;i++){
uint8_t b = ReadAndAckByte(); packet.raw[idx++] = b;
}
uint8_t end = ReadByte(); packet.raw[idx++] = end; packet.length = idx;
if (end != PACKET_END_EXPECTED) return packet;
packet.title = packetCommand;
switch (packetCommand){
case PACKET_CMD_ACK: packet.type = PACKET_TYPE_ACK; packet.isAckNak = 1; break;
case PACKET_CMD_NAK: packet.type = PACKET_TYPE_NAK; packet.isAckNak = 1; break;
case PACKET_CMD_AsciiData:
packet.type = (packet.raw[3] == 0x00) ? PACKET_TYPE_CODING_WSC : PACKET_TYPE_ASCII_DATA; break;
case PACKET_CMD_ReadEepromResponse: packet.type = PACKET_TYPE_READ_EEPROM_RESPONSE; break;
case PACKET_CMD_ReadRomEepromResponse: packet.type = PACKET_TYPE_READ_ROM_EEPROM_RESPONSE; break;
default: packet.type = PACKET_TYPE_UNKNOWN; break;
}
return packet;
}
void ResetPacketCounter(){ _packetCounter = 0; _packetCounterInitialized = 0; }
uint8_t ReadPacketCounter(){
uint8_t v = ReadAndAckByte();
if (!_packetCounterInitialized){ _packetCounter = v; _packetCounterInitialized = 1; }
else if (v != _packetCounter){ /* optional mismatch handling */ }
_packetCounter++;
return v;
}
inline int32_t tick_diff(uint32_t a, uint32_t b){ return (int32_t)(a - b); }
int ReadByte_Tmo(uint32_t ms, uint8_t *out){
uint32_t deadline = HAL_GetTick() + ms; uint8_t b;
while (!KLine_RxFifo_Pop(&b)){
if ((int32_t)(HAL_GetTick() - deadline) >= 0) return 0;
}
if (out) *out = b; return 1;
}
int ReadPacketCounter_Tmo(uint32_t ms, uint8_t *out){
uint8_t v; if (!ReadByte_Tmo(ms, &v)) return 0;
if (!_packetCounterInitialized){ _packetCounter = v; _packetCounterInitialized = 1; }
else if (v != _packetCounter){ _packetCounter = v+1; return 0; }
_packetCounter++; WriteComplement(v);
if (out) *out = v; return 1;
}
int ReadAndAckByte_Tmo(uint32_t ms, uint8_t *out){
uint8_t b; if (!ReadByte_Tmo(ms, &b)) return 0; WriteComplement(b); if (out) *out = b; return 1;
}
void SendAckPacket(){ uint8_t a = (uint8_t)PACKET_CMD_ACK; SendPacket(&a, 1); }
void SendPacket(uint8_t* payload, uint8_t length){
uint8_t packetLength = (uint8_t)(length + 2);
static uint8_t packet[1 + 1 + MAX_PACKET_SIZE + 1];
int idx = 0;
packet[idx++] = packetLength;
packet[idx++] = _packetCounter++;
for (int i=0;i<length;i++) packet[idx++] = payload[i];
KLine_TxStart(packet, idx, 1 /*append 0x03*/, 1 /*expect complement*/);
while (KLine_TxBusy()) KLine_BytePump_Service(); // cooperative wait (no HAL_Delay)
}
// Convenience used by your code
ParsedPacket* SendCustom(const uint8_t* data, int len, int *out_count, uint8_t isBRKT){
(void)isBRKT; SendPacket((uint8_t*)data, len);
int count = 0; ParsedPacket* p = ReceivePackets(&count);
if (out_count) *out_count = count; return p;
}

View File

@@ -0,0 +1,136 @@
/* IKW1281Connection.h — non-blocking byte-pump + proper timings */
#ifndef INC_IKW1281CONNECTION_H_
#define INC_IKW1281CONNECTION_H_
#include <string.h>
#include "stdint.h"
extern uint8_t K_RxData[];
extern volatile uint8_t rx_done_flag;
#define KLINE_BUFFER_SIZE 20
#define PACKET_END_EXPECTED 0x03
// === Protocol sizing ===
#define MAX_PACKET_SIZE 16 // KWP1281 block size
// === Timings (per ISO 9141-2 / KWP1281) ===
#define KWP_P4_MIN_MS 5U // tester inter-byte (P4) 5..20 ms
#define KWP_P4_MAX_MS 20U
#define KWP_P1_GAP_MS 5U // ECU inter-byte (P1) target
#define KWP_ECHO_SUPPRESS_MS 3U // ~3 ms window after TX to drop self-echo
// 5-baud init post-switch delays
#define KWP_W1_MS 300U // ECU internal time before 0x55 (20..300 ms allowed)
#define KWP_W2_MS 10U // 0x55 -> first keyword (5..20 ms)
#define KWP_W3_MS 10U // KW LSB -> KW MSB (0..20 ms)
// RX FIFO
#define KLINE_RX_FIFO_SZ 64
typedef struct {
char client_ident[13];
char unk_ident1[11];
char soft_info[11];
char unk_ident2[11];
char unk_ident3[11];
char unk_ident4[7];
} ControllerInfo;
typedef enum {
PACKET_CMD_ReadIdent = 0x00,
PACKET_CMD_ReadIdentAdress = 0x01,
PACKET_CMD_ReadRomEeprom = 0x03,
PACKET_CMD_ActuatorTest = 0x04,
PACKET_CMD_FaultCodesDelete = 0x05,
PACKET_CMD_End = 0x06,
PACKET_CMD_FaultCodesRead = 0x07,
PACKET_CMD_ACK = 0x09,
PACKET_CMD_NAK = 0x0A,
PACKET_CMD_SoftwareCoding = 0x10,
PACKET_CMD_LoginEeprom = 0x18,
PACKET_CMD_ReadEeprom = 0x19,
PACKET_CMD_WriteEeprom = 0x1A,
PACKET_CMD_Custom = 0x1B,
PACKET_CMD_GroupReading = 0x29,
PACKET_CMD_Login = 0x2B,
PACKET_CMD_GroupReadingResponse = 0xE7,
PACKET_CMD_ReadEepromResponse = 0xEF,
PACKET_CMD_ActuatorTestResponse = 0xF5,
PACKET_CMD_AsciiData = 0xF6,
PACKET_CMD_WriteEepromResponse = 0xF9,
PACKET_CMD_FaultCodesResponse = 0xFC,
PACKET_CMD_ReadRomEepromResponse = 0xFD
} PacketCommand;
typedef enum {
PACKET_TYPE_UNKNOWN = 0,
PACKET_TYPE_ACK,
PACKET_TYPE_NAK,
PACKET_TYPE_ASCII_DATA,
PACKET_TYPE_CODING_WSC,
PACKET_TYPE_READ_EEPROM_RESPONSE,
PACKET_TYPE_READ_ROM_EEPROM_RESPONSE
} PacketType;
typedef struct {
PacketType type;
uint8_t title;
uint8_t length;
uint8_t raw[MAX_PACKET_SIZE];
uint8_t isAckNak;
} ParsedPacket;
#define KLINE_TXBUF_MAX 32 // enough for KWP1281: 2 header + 16 data + 0x03 + margins
// === Non-blocking TX "byte pump" ===
typedef struct {
uint8_t active;
const uint8_t *buf;
uint16_t len;
uint16_t idx;
uint8_t append_end; // append 0x03
uint8_t last_tx;
uint8_t awaiting_echo; // waiting for complement
uint8_t require_ack; // expect complement per byte?
uint8_t tx_inflight; // HAL_UART_Transmit_IT in progress
uint32_t next_time_ms; // next earliest send time
uint32_t last_tx_done_ms; // last send time
uint8_t ibuf[KLINE_TXBUF_MAX];
uint8_t using_ibuf;
} KTxEngine;
extern volatile KTxEngine ktx;
void KLine_BytePump_Init(void);
void KLine_BytePump_Service(void);
int KLine_TxStart(const uint8_t *data, uint16_t len, uint8_t append_end, uint8_t require_ack);
int KLine_TxBusy(void);
// RX FIFO helpers
int KLine_RxFifo_Pop(uint8_t *out);
void KLine_OnByteReceived(uint8_t byte);
// Legacy/blocking API (still available)
void SendPacket(uint8_t* payload, uint8_t length);
void SendAckPacket(void);
void WriteByteAndReadAck(uint8_t b);
void WriteByteRaw(uint8_t b);
void WriteComplement(uint8_t b);
extern ParsedPacket ReceivePacket(void);
extern uint8_t ReadByte(void);
extern uint8_t ReadAndAckByte(void);
extern void ResetPacketCounter(void);
extern uint8_t ReadPacketCounter(void);
extern inline int32_t tick_diff(uint32_t a, uint32_t b);
// Timed reads used by higher layers
int ReadByte_Tmo(uint32_t ms, uint8_t *out);
int ReadPacketCounter_Tmo(uint32_t ms, uint8_t *out);
int ReadAndAckByte_Tmo(uint32_t ms, uint8_t *out);
#endif /* INC_IKW1281CONNECTION_H_ */

1281
Core/Kline_Libs/kline.c Normal file

File diff suppressed because it is too large Load Diff

38
Core/Kline_Libs/kline.h Normal file
View File

@@ -0,0 +1,38 @@
/* kline.h — cleaned up, matches new connection layer */
#ifndef INC_KLINE_H_
#define INC_KLINE_H_
#include "IKW1281Connection.h"
#define ECU_INIT_ADDRESS 0xF1
#define KLINE_RX_PIN GPIO_PIN_10
#define KLINE_TX_PIN GPIO_PIN_9
#define KLINE_GPIO_PORT GPIOA
#define SLAVE_ADDR 0xF1
#define SYNC_BYTE 0x55
#define POST_INIT_BAUD 9600
#define KEYWORD_LSB 0x8C
#define KEYWORD_MSB 0x51
#define REQUIRE_KEY_ACK 0 // no complements expected during 0x55/keywords
extern volatile uint8_t kline_connection_status;
typedef struct {
uint8_t dtc;
uint8_t status;
uint8_t extra;
} FaultCode;
size_t BuildCombinedFromInfo(const ControllerInfo *ci, uint8_t *out, size_t maxlen);
void KLine_Slave_Init(void);
void KLine_Rearm5Baud(void);
void KLine_Service(void);
void KLine_ServiceCommands(void);
void KLine_Slave_Poll(void);
void KLine_KeepAlivePoll(void);
#endif /* INC_KLINE_H_ */

View File

@@ -0,0 +1,25 @@
/*
* psg_prop.h
*
* Created on: Aug 19, 2025
* Author: herli
*/
#ifndef INC_PSG_PROP_H_
#define INC_PSG_PROP_H_
typedef struct {
char client_ident[13]; // 12 + null
char unk_ident1[11];
char soft_info[11];
char unk_ident2[11];
char unk_ident3[11];
} PSGControllerInfo;
#define i_Ident "0470504005"
#define i_SerialN "225832"
#define i_modIndex "000004"
#endif /* INC_PSG_PROP_H_ */

View File

@@ -31,7 +31,8 @@
#include "ee_manager.h" #include "ee_manager.h"
#include "toothed_wheel.h" #include "toothed_wheel.h"
#include "can_read_pump_data.h" #include "can_read_pump_data.h"
#include "kline.h"
#include "IKW1281Connection.h"
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
@@ -75,6 +76,7 @@ TIM_HandleTypeDef htim7;
TIM_HandleTypeDef htim8; TIM_HandleTypeDef htim8;
TIM_HandleTypeDef htim15; TIM_HandleTypeDef htim15;
TIM_HandleTypeDef htim16; TIM_HandleTypeDef htim16;
TIM_HandleTypeDef htim17;
UART_HandleTypeDef huart1; UART_HandleTypeDef huart1;
@@ -108,6 +110,7 @@ static void MX_TIM16_Init(void);
static void MX_RTC_Init(void); static void MX_RTC_Init(void);
static void MX_TIM8_Init(void); static void MX_TIM8_Init(void);
static void MX_OPAMP2_Init(void); static void MX_OPAMP2_Init(void);
static void MX_TIM17_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN PFP */
void DAC_Voltaje(uint8_t isPeak); void DAC_Voltaje(uint8_t isPeak);
void EvaluateInjection(void); void EvaluateInjection(void);
@@ -292,6 +295,7 @@ int main(void)
MX_RTC_Init(); MX_RTC_Init();
MX_TIM8_Init(); MX_TIM8_Init();
MX_OPAMP2_Init(); MX_OPAMP2_Init();
MX_TIM17_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
CAN_AppInit(); //ford might be too fast CAN_AppInit(); //ford might be too fast
@@ -343,6 +347,9 @@ int main(void)
}/*else{ }/*else{
SYNC_Pulse_EnableGPIO(); SYNC_Pulse_EnableGPIO();
}*/ }*/
KLine_Slave_Init();
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
@@ -352,6 +359,8 @@ int main(void)
/* USER CODE END WHILE */ /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN 3 */
KLine_Service();
KLine_ServiceCommands(); // <-- NEW: react to ISR kick, process full packet
TW_Service(); TW_Service();
CAN_Service(); // drain queued frames whenever HW has room CAN_Service(); // drain queued frames whenever HW has room
@@ -1304,6 +1313,42 @@ static void MX_TIM16_Init(void)
} }
/**
* @brief TIM17 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM17_Init(void)
{
/* USER CODE BEGIN TIM17_Init 0 */
/* USER CODE END TIM17_Init 0 */
/* USER CODE BEGIN TIM17_Init 1 */
/* USER CODE END TIM17_Init 1 */
htim17.Instance = TIM17;
htim17.Init.Prescaler = 160-1;
htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
htim17.Init.Period = 65535;
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim17.Init.RepetitionCounter = 0;
htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_OnePulse_Init(&htim17, TIM_OPMODE_SINGLE) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM17_Init 2 */
/* USER CODE END TIM17_Init 2 */
}
/** /**
* @brief USART1 Initialization Function * @brief USART1 Initialization Function
* @param None * @param None

View File

@@ -639,6 +639,8 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/* TIM1 interrupt Init */ /* TIM1 interrupt Init */
HAL_NVIC_SetPriority(TIM1_BRK_TIM15_IRQn, 5, 0); HAL_NVIC_SetPriority(TIM1_BRK_TIM15_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(TIM1_BRK_TIM15_IRQn); HAL_NVIC_EnableIRQ(TIM1_BRK_TIM15_IRQn);
HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0); HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_CC_IRQn); HAL_NVIC_EnableIRQ(TIM1_CC_IRQn);
/* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE BEGIN TIM1_MspInit 1 */
@@ -746,6 +748,20 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM16_MspInit 1 */ /* USER CODE END TIM16_MspInit 1 */
} }
else if(htim_base->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspInit 0 */
/* USER CODE END TIM17_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM17_CLK_ENABLE();
/* TIM17 interrupt Init */
HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
/* USER CODE BEGIN TIM17_MspInit 1 */
/* USER CODE END TIM17_MspInit 1 */
}
} }
@@ -823,6 +839,14 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
/* HAL_NVIC_DisableIRQ(TIM1_BRK_TIM15_IRQn); */ /* HAL_NVIC_DisableIRQ(TIM1_BRK_TIM15_IRQn); */
/* USER CODE END TIM1:TIM1_BRK_TIM15_IRQn disable */ /* USER CODE END TIM1:TIM1_BRK_TIM15_IRQn disable */
/* USER CODE BEGIN TIM1:TIM1_TRG_COM_TIM17_IRQn disable */
/**
* Uncomment the line below to disable the "TIM1_TRG_COM_TIM17_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn); */
/* USER CODE END TIM1:TIM1_TRG_COM_TIM17_IRQn disable */
HAL_NVIC_DisableIRQ(TIM1_CC_IRQn); HAL_NVIC_DisableIRQ(TIM1_CC_IRQn);
/* USER CODE BEGIN TIM1_MspDeInit 1 */ /* USER CODE BEGIN TIM1_MspDeInit 1 */
@@ -936,6 +960,27 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
/* USER CODE END TIM16_MspDeInit 1 */ /* USER CODE END TIM16_MspDeInit 1 */
} }
else if(htim_base->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspDeInit 0 */
/* USER CODE END TIM17_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM17_CLK_DISABLE();
/* TIM17 interrupt DeInit */
/* USER CODE BEGIN TIM17:TIM1_TRG_COM_TIM17_IRQn disable */
/**
* Uncomment the line below to disable the "TIM1_TRG_COM_TIM17_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn); */
/* USER CODE END TIM17:TIM1_TRG_COM_TIM17_IRQn disable */
/* USER CODE BEGIN TIM17_MspDeInit 1 */
/* USER CODE END TIM17_MspDeInit 1 */
}
} }
@@ -1001,6 +1046,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */ /* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */ /* USER CODE END USART1_MspInit 1 */
@@ -1031,6 +1079,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
*/ */
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
/* USART1 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */ /* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */ /* USER CODE END USART1_MspDeInit 1 */

View File

@@ -69,6 +69,8 @@ extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3; extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim6; extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim15; extern TIM_HandleTypeDef htim15;
extern TIM_HandleTypeDef htim17;
extern UART_HandleTypeDef huart1;
/* USER CODE BEGIN EV */ /* USER CODE BEGIN EV */
/* USER CODE END EV */ /* USER CODE END EV */
@@ -282,6 +284,21 @@ void TIM1_BRK_TIM15_IRQHandler(void)
/* USER CODE END TIM1_BRK_TIM15_IRQn 1 */ /* USER CODE END TIM1_BRK_TIM15_IRQn 1 */
} }
/**
* @brief This function handles TIM1 trigger and commutation interrupts and TIM17 global interrupt.
*/
void TIM1_TRG_COM_TIM17_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
/* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
HAL_TIM_IRQHandler(&htim1);
HAL_TIM_IRQHandler(&htim17);
/* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
/* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
}
/** /**
* @brief This function handles TIM1 capture compare interrupt. * @brief This function handles TIM1 capture compare interrupt.
*/ */
@@ -357,6 +374,20 @@ void TIM3_IRQHandler(void)
/* USER CODE END TIM3_IRQn 1 */ /* USER CODE END TIM3_IRQn 1 */
} }
/**
* @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
/** /**
* @brief This function handles TIM6 global interrupt, DAC1 and DAC3 channel underrun error interrupts. * @brief This function handles TIM6 global interrupt, DAC1 and DAC3 channel underrun error interrupts.
*/ */

View File

@@ -1,16 +1,16 @@
Powered by HERLICSON 19/11/2025 Powered by Herlic Components 30/03/2026
forked from 1.8.7 t06301. Forked from 1.8.7.T06216
trying to make better general project without touching working one.
this is being made for: This is main (general) project with git version control.
It is called v2 because of K-Line implementation.
soft v1 C062_2.V50
soft v2 C062_0.P64
Mod Index 000018
0470504003
mejore lo del syncout, la implementacion y poder cambiarlo por can con el watchdog.
El arreglo esta comprobado en el T06301 y porteado aqui, asi que habra que ver si funciona.
Last updated 15/01/2025
Last updated 30/03/2026

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="com.st.stm32cube.ide.mcu.debug.launch.launchConfigurationType">
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.access_port_id" value="0"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.cubeprog_external_loaders" value="[]"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.debug_auth__pwd_enable" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.debug_auth_certif_path" value=""/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.debug_auth_check_enable" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.debug_auth_key_path" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.debug_auth_permission" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.debug_auth_pwd_file" value=""/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_live_expr" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.enable_swv" value="false"/>
<intAttribute key="com.st.stm32cube.ide.mcu.debug.launch.formatVersion" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.ip_address_local" value="localhost"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.limit_swo_clock.enabled" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.limit_swo_clock.value" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.loadList" value="{&quot;fItems&quot;:[{&quot;fIsFromMainTab&quot;:true,&quot;fPath&quot;:&quot;Debug/hpsg5-controller_v2-stm32g4.elf&quot;,&quot;fProjectName&quot;:&quot;hpsg5-controller_v2-stm32g4&quot;,&quot;fPerformBuild&quot;:true,&quot;fDownload&quot;:true,&quot;fLoadSymbols&quot;:true}]}"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.override_start_address_mode" value="default"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.remoteCommand" value="target remote"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startServer" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.divby0" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.exception.unaligned" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.startuptab.haltonexception" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swd_mode" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_port" value="61235"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.swv_trace_hclk" value="160000000"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.useRemoteTarget" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.launch.vector_table" value=""/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.launch.verify_flash_download" value="true"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_allow_halt" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.cti_signal_halt" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_logging" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_max_halt_delay" value="false"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.enable_shared_stlink" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.frequency" value="0"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.halt_all_on_reset" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.log_file" value="C:\Users\herli\Documents\HerlicComponents\Firmware\hpsg5-controller_v2-stm32g4\Debug\st-link_gdbserver_log.txt"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.low_power_debug" value="enable"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.max_halt_delay" value="2"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.reset_strategy" value="connect_under_reset"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_check_serial_number" value="true"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.stlink_txt_serial_number" value="004400353100000E4E593346"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlink.watchdog_config" value="none"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkenable_rtos" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.debug.stlinkrestart_configurations" value="{&quot;fVersion&quot;:1,&quot;fItems&quot;:[{&quot;fDisplayName&quot;:&quot;Reset&quot;,&quot;fIsSuppressible&quot;:false,&quot;fResetAttribute&quot;:&quot;Software system reset&quot;,&quot;fResetStrategies&quot;:[{&quot;fDisplayName&quot;:&quot;Software system reset&quot;,&quot;fLaunchAttribute&quot;:&quot;system_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Hardware reset&quot;,&quot;fLaunchAttribute&quot;:&quot;hardware_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset hardware\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;Core reset&quot;,&quot;fLaunchAttribute&quot;:&quot;core_reset&quot;,&quot;fGdbCommands&quot;:[&quot;monitor reset core\r\n&quot;],&quot;fCmdOptions&quot;:[&quot;-g&quot;]},{&quot;fDisplayName&quot;:&quot;None&quot;,&quot;fLaunchAttribute&quot;:&quot;no_reset&quot;,&quot;fGdbCommands&quot;:[],&quot;fCmdOptions&quot;:[&quot;-g&quot;]}],&quot;fGdbCommandGroup&quot;:{&quot;name&quot;:&quot;Additional commands&quot;,&quot;commands&quot;:[]},&quot;fStartApplication&quot;:true}]}"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.enableRtosProxy" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyCustomProperties" value=""/>
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriver" value="threadx"/>
<booleanAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriverAuto" value="false"/>
<stringAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyDriverPort" value="cortex_m0"/>
<intAttribute key="com.st.stm32cube.ide.mcu.rtosproxy.rtosProxyPort" value="60000"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doHalt" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDeviceId" value="com.st.stm32cube.ide.mcu.debug.stlink"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value=""/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="61234"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.runCommands" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="arm-none-eabi-gdb"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.NON_STOP" value="false"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_START_MODE" value="remote"/>
<booleanAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_STOP_AT_MAIN_SYMBOL" value="main"/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="Debug/hpsg5-controller_v2-stm32g4.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="hpsg5-controller_v2-stm32g4"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="true"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.232563982"/>
<booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/hpsg5-controller_v2-stm32g4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;"/>
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
</launchConfiguration>

View File

@@ -99,7 +99,8 @@ Mcu.IP18=TIM8
Mcu.IP19=TIM15 Mcu.IP19=TIM15
Mcu.IP2=COMP4 Mcu.IP2=COMP4
Mcu.IP20=TIM16 Mcu.IP20=TIM16
Mcu.IP21=USART1 Mcu.IP21=TIM17
Mcu.IP22=USART1
Mcu.IP3=DAC1 Mcu.IP3=DAC1
Mcu.IP4=DMA Mcu.IP4=DMA
Mcu.IP5=FDCAN1 Mcu.IP5=FDCAN1
@@ -107,7 +108,7 @@ Mcu.IP6=NVIC
Mcu.IP7=OPAMP1 Mcu.IP7=OPAMP1
Mcu.IP8=OPAMP2 Mcu.IP8=OPAMP2
Mcu.IP9=RCC Mcu.IP9=RCC
Mcu.IPNb=22 Mcu.IPNb=23
Mcu.Name=STM32G431K(6-8-B)Ux Mcu.Name=STM32G431K(6-8-B)Ux
Mcu.Package=UFQFPN32 Mcu.Package=UFQFPN32
Mcu.Pin0=PF0-OSC_IN Mcu.Pin0=PF0-OSC_IN
@@ -147,12 +148,14 @@ Mcu.Pin39=VP_TIM8_VS_no_output1
Mcu.Pin4=PA3 Mcu.Pin4=PA3
Mcu.Pin40=VP_TIM15_VS_ClockSourceINT Mcu.Pin40=VP_TIM15_VS_ClockSourceINT
Mcu.Pin41=VP_TIM16_VS_ClockSourceINT Mcu.Pin41=VP_TIM16_VS_ClockSourceINT
Mcu.Pin42=VP_TIM17_VS_ClockSourceINT
Mcu.Pin43=VP_TIM17_VS_OPM
Mcu.Pin5=PA4 Mcu.Pin5=PA4
Mcu.Pin6=PA5 Mcu.Pin6=PA5
Mcu.Pin7=PA6 Mcu.Pin7=PA6
Mcu.Pin8=PA7 Mcu.Pin8=PA7
Mcu.Pin9=PB0 Mcu.Pin9=PB0
Mcu.PinsNb=42 Mcu.PinsNb=44
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32G431KBUx Mcu.UserName=STM32G431KBUx
@@ -174,9 +177,11 @@ 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.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.TIM1_BRK_TIM15_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true NVIC.TIM1_BRK_TIM15_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true
NVIC.TIM1_CC_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:true NVIC.TIM1_CC_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:true
NVIC.TIM1_TRG_COM_TIM17_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM2_IRQn=true\:1\:0\:true\:false\:true\:true\:true\:true NVIC.TIM2_IRQn=true\:1\:0\:true\:false\:true\:true\:true\:true
NVIC.TIM3_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true NVIC.TIM3_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
NVIC.TIM6_DAC_IRQn=true\:4\:0\:true\:false\:true\:true\:true\:true NVIC.TIM6_DAC_IRQn=true\:4\:0\:true\:false\:true\:true\:true\:true
NVIC.USART1_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0.Signal=S_TIM2_CH1 PA0.Signal=S_TIM2_CH1
PA10.Mode=Asynchronous PA10.Mode=Asynchronous
@@ -265,8 +270,8 @@ ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false ProjectManager.NoMain=false
ProjectManager.PreviousToolchain=STM32CubeIDE ProjectManager.PreviousToolchain=STM32CubeIDE
ProjectManager.ProjectBuild=false ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=KBU6_1.8.7.T06216.ioc ProjectManager.ProjectFileName=hpsg5-controller_v2-stm32g4.ioc
ProjectManager.ProjectName=KBU6_1.8.7.T06216 ProjectManager.ProjectName=hpsg5-controller_v2-stm32g4
ProjectManager.ProjectStructure= ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack= ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400 ProjectManager.StackSize=0x400
@@ -275,7 +280,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_COMP4_Init-COMP4-false-HAL-true,7-MX_DAC1_Init-DAC1-false-HAL-true,8-MX_FDCAN1_Init-FDCAN1-false-HAL-true,9-MX_OPAMP1_Init-OPAMP1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_USART1_UART_Init-USART1-false-HAL-true,13-MX_TIM1_Init-TIM1-false-HAL-true,14-MX_TIM3_Init-TIM3-false-HAL-true,15-MX_TIM6_Init-TIM6-false-HAL-true,16-MX_TIM7_Init-TIM7-false-HAL-true,17-MX_TIM15_Init-TIM15-false-HAL-true,18-MX_TIM16_Init-TIM16-false-HAL-true,19-MX_RTC_Init-RTC-false-HAL-true,20-MX_TIM8_Init-TIM8-false-HAL-true,21-MX_COMP1_Init-COMP1-false-HAL-true,22-MX_OPAMP2_Init-OPAMP2-false-HAL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_COMP4_Init-COMP4-false-HAL-true,7-MX_DAC1_Init-DAC1-false-HAL-true,8-MX_FDCAN1_Init-FDCAN1-false-HAL-true,9-MX_OPAMP1_Init-OPAMP1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_USART1_UART_Init-USART1-false-HAL-true,13-MX_TIM1_Init-TIM1-false-HAL-true,14-MX_TIM3_Init-TIM3-false-HAL-true,15-MX_TIM6_Init-TIM6-false-HAL-true,16-MX_TIM7_Init-TIM7-false-HAL-true,17-MX_TIM15_Init-TIM15-false-HAL-true,18-MX_TIM16_Init-TIM16-false-HAL-true,19-MX_RTC_Init-RTC-false-HAL-true,20-MX_TIM8_Init-TIM8-false-HAL-true,21-MX_OPAMP2_Init-OPAMP2-false-HAL-true,22-MX_TIM17_Init-TIM17-false-HAL-true
RCC.ADC12Freq_Value=160000000 RCC.ADC12Freq_Value=160000000
RCC.AHBFreq_Value=160000000 RCC.AHBFreq_Value=160000000
RCC.APB1Freq_Value=160000000 RCC.APB1Freq_Value=160000000
@@ -339,6 +344,9 @@ TIM15.Prescaler=160-1
TIM15.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE TIM15.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
TIM16.IPParameters=Prescaler TIM16.IPParameters=Prescaler
TIM16.Prescaler=16000-1 TIM16.Prescaler=16000-1
TIM17.IPParameters=Prescaler,PeriodNoDither
TIM17.PeriodNoDither=65535
TIM17.Prescaler=160-1
TIM2.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1 TIM2.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
TIM2.Channel-Input_Capture3_from_TI3_Remap_TIM2=TIM_CHANNEL_3 TIM2.Channel-Input_Capture3_from_TI3_Remap_TIM2=TIM_CHANNEL_3
TIM2.ICFilter_CH1=15 TIM2.ICFilter_CH1=15
@@ -386,6 +394,10 @@ VP_TIM15_VS_ClockSourceINT.Mode=Internal
VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT
VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
VP_TIM17_VS_OPM.Mode=OPM_bit
VP_TIM17_VS_OPM.Signal=TIM17_VS_OPM
VP_TIM1_VS_ClockSourceINT.Mode=Internal VP_TIM1_VS_ClockSourceINT.Mode=Internal
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
VP_TIM1_VS_OPM.Mode=OPM_bit VP_TIM1_VS_OPM.Mode=OPM_bit