Added k-line files from 1.9 version, works until dfi
This commit is contained in:
@@ -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">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/CAN_Libs}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Immobilisers}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Kline_Libs}""/>
|
||||
</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"/>
|
||||
</tool>
|
||||
@@ -54,6 +55,7 @@
|
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/CAN_Libs}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Immobilisers}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Kline_Libs}""/>
|
||||
</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"/>
|
||||
</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">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/CAN_Libs}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Immobilisers}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Kline_Libs}""/>
|
||||
</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"/>
|
||||
</tool>
|
||||
@@ -136,6 +139,7 @@
|
||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/CAN_Libs}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Immobilisers}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/Core/Kline_Libs}""/>
|
||||
</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"/>
|
||||
</tool>
|
||||
|
||||
@@ -60,9 +60,11 @@ void DMA1_Channel1_IRQHandler(void);
|
||||
void DMA1_Channel2_IRQHandler(void);
|
||||
void FDCAN1_IT0_IRQHandler(void);
|
||||
void TIM1_BRK_TIM15_IRQHandler(void);
|
||||
void TIM1_TRG_COM_TIM17_IRQHandler(void);
|
||||
void TIM1_CC_IRQHandler(void);
|
||||
void TIM2_IRQHandler(void);
|
||||
void TIM3_IRQHandler(void);
|
||||
void USART1_IRQHandler(void);
|
||||
void TIM6_DAC_IRQHandler(void);
|
||||
/* USER CODE BEGIN EFP */
|
||||
|
||||
|
||||
274
Core/Kline_Libs/IKW1281Connection.c
Normal file
274
Core/Kline_Libs/IKW1281Connection.c
Normal 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;
|
||||
}
|
||||
136
Core/Kline_Libs/IKW1281Connection.h
Normal file
136
Core/Kline_Libs/IKW1281Connection.h
Normal 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
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
38
Core/Kline_Libs/kline.h
Normal 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_ */
|
||||
25
Core/Kline_Libs/psg_prop.h
Normal file
25
Core/Kline_Libs/psg_prop.h
Normal 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_ */
|
||||
@@ -31,7 +31,8 @@
|
||||
#include "ee_manager.h"
|
||||
#include "toothed_wheel.h"
|
||||
#include "can_read_pump_data.h"
|
||||
|
||||
#include "kline.h"
|
||||
#include "IKW1281Connection.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
@@ -75,6 +76,7 @@ TIM_HandleTypeDef htim7;
|
||||
TIM_HandleTypeDef htim8;
|
||||
TIM_HandleTypeDef htim15;
|
||||
TIM_HandleTypeDef htim16;
|
||||
TIM_HandleTypeDef htim17;
|
||||
|
||||
UART_HandleTypeDef huart1;
|
||||
|
||||
@@ -108,6 +110,7 @@ static void MX_TIM16_Init(void);
|
||||
static void MX_RTC_Init(void);
|
||||
static void MX_TIM8_Init(void);
|
||||
static void MX_OPAMP2_Init(void);
|
||||
static void MX_TIM17_Init(void);
|
||||
/* USER CODE BEGIN PFP */
|
||||
void DAC_Voltaje(uint8_t isPeak);
|
||||
void EvaluateInjection(void);
|
||||
@@ -292,6 +295,7 @@ int main(void)
|
||||
MX_RTC_Init();
|
||||
MX_TIM8_Init();
|
||||
MX_OPAMP2_Init();
|
||||
MX_TIM17_Init();
|
||||
/* USER CODE BEGIN 2 */
|
||||
CAN_AppInit(); //ford might be too fast
|
||||
|
||||
@@ -343,6 +347,9 @@ int main(void)
|
||||
}/*else{
|
||||
SYNC_Pulse_EnableGPIO();
|
||||
}*/
|
||||
|
||||
KLine_Slave_Init();
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
/* Infinite loop */
|
||||
@@ -352,6 +359,8 @@ int main(void)
|
||||
/* USER CODE END WHILE */
|
||||
|
||||
/* USER CODE BEGIN 3 */
|
||||
KLine_Service();
|
||||
KLine_ServiceCommands(); // <-- NEW: react to ISR kick, process full packet
|
||||
|
||||
TW_Service();
|
||||
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
|
||||
* @param None
|
||||
|
||||
@@ -639,6 +639,8 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
/* TIM1 interrupt Init */
|
||||
HAL_NVIC_SetPriority(TIM1_BRK_TIM15_IRQn, 5, 0);
|
||||
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_EnableIRQ(TIM1_CC_IRQn);
|
||||
/* 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 */
|
||||
}
|
||||
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); */
|
||||
/* 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);
|
||||
/* 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 */
|
||||
}
|
||||
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;
|
||||
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 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);
|
||||
|
||||
/* USART1 interrupt DeInit */
|
||||
HAL_NVIC_DisableIRQ(USART1_IRQn);
|
||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END USART1_MspDeInit 1 */
|
||||
|
||||
@@ -69,6 +69,8 @@ extern TIM_HandleTypeDef htim2;
|
||||
extern TIM_HandleTypeDef htim3;
|
||||
extern TIM_HandleTypeDef htim6;
|
||||
extern TIM_HandleTypeDef htim15;
|
||||
extern TIM_HandleTypeDef htim17;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
/* USER CODE BEGIN EV */
|
||||
|
||||
/* USER CODE END EV */
|
||||
@@ -282,6 +284,21 @@ void TIM1_BRK_TIM15_IRQHandler(void)
|
||||
/* 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.
|
||||
*/
|
||||
@@ -357,6 +374,20 @@ void TIM3_IRQHandler(void)
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
22
README.md
22
README.md
@@ -1,16 +1,16 @@
|
||||
Powered by HERLICSON 19/11/2025
|
||||
Powered by Herlic Components 30/03/2026
|
||||
|
||||
forked from 1.8.7 t06301.
|
||||
trying to make better general project without touching working one.
|
||||
Forked from 1.8.7.T06216
|
||||
|
||||
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
|
||||
85
hpsg5-controller_v2-stm32g4 Debug.launch
Normal file
85
hpsg5-controller_v2-stm32g4 Debug.launch
Normal 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="{"fItems":[{"fIsFromMainTab":true,"fPath":"Debug/hpsg5-controller_v2-stm32g4.elf","fProjectName":"hpsg5-controller_v2-stm32g4","fPerformBuild":true,"fDownload":true,"fLoadSymbols":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="{"fVersion":1,"fItems":[{"fDisplayName":"Reset","fIsSuppressible":false,"fResetAttribute":"Software system reset","fResetStrategies":[{"fDisplayName":"Software system reset","fLaunchAttribute":"system_reset","fGdbCommands":["monitor reset\r\n"],"fCmdOptions":["-g"]},{"fDisplayName":"Hardware reset","fLaunchAttribute":"hardware_reset","fGdbCommands":["monitor reset hardware\r\n"],"fCmdOptions":["-g"]},{"fDisplayName":"Core reset","fLaunchAttribute":"core_reset","fGdbCommands":["monitor reset core\r\n"],"fCmdOptions":["-g"]},{"fDisplayName":"None","fLaunchAttribute":"no_reset","fGdbCommands":[],"fCmdOptions":["-g"]}],"fGdbCommandGroup":{"name":"Additional commands","commands":[]},"fStartApplication":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="<?xml version="1.0" encoding="UTF-8" standalone="no"?><memoryBlockExpressionList context="reserved-for-future-use"/>"/>
|
||||
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
|
||||
</launchConfiguration>
|
||||
@@ -99,7 +99,8 @@ Mcu.IP18=TIM8
|
||||
Mcu.IP19=TIM15
|
||||
Mcu.IP2=COMP4
|
||||
Mcu.IP20=TIM16
|
||||
Mcu.IP21=USART1
|
||||
Mcu.IP21=TIM17
|
||||
Mcu.IP22=USART1
|
||||
Mcu.IP3=DAC1
|
||||
Mcu.IP4=DMA
|
||||
Mcu.IP5=FDCAN1
|
||||
@@ -107,7 +108,7 @@ Mcu.IP6=NVIC
|
||||
Mcu.IP7=OPAMP1
|
||||
Mcu.IP8=OPAMP2
|
||||
Mcu.IP9=RCC
|
||||
Mcu.IPNb=22
|
||||
Mcu.IPNb=23
|
||||
Mcu.Name=STM32G431K(6-8-B)Ux
|
||||
Mcu.Package=UFQFPN32
|
||||
Mcu.Pin0=PF0-OSC_IN
|
||||
@@ -147,12 +148,14 @@ Mcu.Pin39=VP_TIM8_VS_no_output1
|
||||
Mcu.Pin4=PA3
|
||||
Mcu.Pin40=VP_TIM15_VS_ClockSourceINT
|
||||
Mcu.Pin41=VP_TIM16_VS_ClockSourceINT
|
||||
Mcu.Pin42=VP_TIM17_VS_ClockSourceINT
|
||||
Mcu.Pin43=VP_TIM17_VS_OPM
|
||||
Mcu.Pin5=PA4
|
||||
Mcu.Pin6=PA5
|
||||
Mcu.Pin7=PA6
|
||||
Mcu.Pin8=PA7
|
||||
Mcu.Pin9=PB0
|
||||
Mcu.PinsNb=42
|
||||
Mcu.PinsNb=44
|
||||
Mcu.ThirdPartyNb=0
|
||||
Mcu.UserConstants=
|
||||
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.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_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.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.USART1_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true
|
||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||
PA0.Signal=S_TIM2_CH1
|
||||
PA10.Mode=Asynchronous
|
||||
@@ -265,8 +270,8 @@ ProjectManager.MainLocation=Core/Src
|
||||
ProjectManager.NoMain=false
|
||||
ProjectManager.PreviousToolchain=STM32CubeIDE
|
||||
ProjectManager.ProjectBuild=false
|
||||
ProjectManager.ProjectFileName=KBU6_1.8.7.T06216.ioc
|
||||
ProjectManager.ProjectName=KBU6_1.8.7.T06216
|
||||
ProjectManager.ProjectFileName=hpsg5-controller_v2-stm32g4.ioc
|
||||
ProjectManager.ProjectName=hpsg5-controller_v2-stm32g4
|
||||
ProjectManager.ProjectStructure=
|
||||
ProjectManager.RegisterCallBack=
|
||||
ProjectManager.StackSize=0x400
|
||||
@@ -275,7 +280,7 @@ ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UAScriptAfterPath=
|
||||
ProjectManager.UAScriptBeforePath=
|
||||
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.AHBFreq_Value=160000000
|
||||
RCC.APB1Freq_Value=160000000
|
||||
@@ -339,6 +344,9 @@ TIM15.Prescaler=160-1
|
||||
TIM15.TIM_MasterOutputTrigger=TIM_TRGO_UPDATE
|
||||
TIM16.IPParameters=Prescaler
|
||||
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_Capture3_from_TI3_Remap_TIM2=TIM_CHANNEL_3
|
||||
TIM2.ICFilter_CH1=15
|
||||
@@ -386,6 +394,10 @@ VP_TIM15_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT
|
||||
VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
|
||||
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.Signal=TIM1_VS_ClockSourceINT
|
||||
VP_TIM1_VS_OPM.Mode=OPM_bit
|
||||
|
||||
Reference in New Issue
Block a user