feat: KT mBMS 펌웨어 3종(HW1/2/3) 및 통합 빌드 환경 초기 커밋 (V4.0.0.1)

This commit is contained in:
2026-11-05 14:31:31 +09:00
commit c52dc2f348
10803 changed files with 4642514 additions and 0 deletions

View File

@@ -0,0 +1,215 @@
#include "sys.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//If you are using ucos, include the following header file.
#if SYSTEM_SUPPORT_OS
#include "includes.h" //ucos Use
#endif
/////////////////////////////////////////////////////////////////////////////////
//This program is for educational purposes only, without the author's permission, may not be used for any other purpose
//ALIENTEK STM32F4 Explorer Board
//Initialize serial port 1
//Hot Atomic @ALIENTEK
//Forum: www.openedv.com
//Date modified: 2014/6/10
//Version: V1.5
//All rights reserved pirated reserved.
//Copyright(C) Guangzhou wing electronic technology limited company 2009-2019
//All rights reserved
//********************************************************************************
//V1.3 changes description
// Supports serial port baud rate setting at different frequencies.
// Added support for printf
// Serial port receive command features have been added.
// Fixed printf first character missing bug
//V1.4 amended description
// 1, modify the initialize serial IO bug
// 2, modify the USART_RX_STA makes serial port maximum bytes received 2 of 14
// 3, USART_REC_LEN, defines the serial port the maximum allowable number of bytes received (not more than 2 of 14)
// 4, the modified EN_USART1_RX method
//V1.5 modify the description
// 1, added support for UCOSII
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//Add the following code, support for printf function and do not need to select use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//Standard library required support function
struct __FILE
{
int handle;
};
FILE __stdout;
//Define _sys_exit () to avoid using host model
void _sys_exit(int x)
{
x = x;
}
//Fputc function is defined
int fputc(int ch, FILE *f)
{
#ifdef CONSOLE_DEBUG
UART1_PutChar(ch);
#endif // #ifdef CONSOLE_DEBUG
return ch;
}
#endif
#ifdef CONSOLE_DEBUG
UART1_Info Uart1;
//Initializes IO serial port 1
//Bound: baud rate
void uart1_init(u32 bound)
{
//GPIO port settings
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //Enables GPIOA clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//Enable USART1
//Serial port 1 pins reuse maps
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9 multiplex USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10 multiplex USART1
//USART1 port configuration
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9 and GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//Multiplexing function
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //Speed 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //Push-pull multiplexed output
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //Pull-up
GPIO_Init(GPIOA,&GPIO_InitStructure); //Initialize PA9,PA10
//USART1 Initialization settings
USART_InitStructure.USART_BaudRate = bound;//Baud rate setting
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//Word is 8-bit data format
USART_InitStructure.USART_StopBits = USART_StopBits_1;//One stop bit
USART_InitStructure.USART_Parity = USART_Parity_No;//No parity bit
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//No hardware flow control
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //Send and receive mode
USART_Init(USART1, &USART_InitStructure); //Initialize serial port 1
USART_Cmd(USART1, ENABLE); //Enabling serial port 1
USART_ClearFlag(USART1, USART_FLAG_TC);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//Open break
}
void USART1_IRQHandler(void) //Serial port 1 interrupt service routine
{
USART_TypeDef *usart;
CPU_INT08U rx_data;
#if SYSTEM_SUPPORT_OS //Use operating system UCOS
OSIntEnter();
#endif
usart = USART1;
if (USART_GetITStatus(usart, USART_IT_RXNE) != RESET)
{
rx_data = USART_ReceiveData(usart) & 0xFF; /* Read one byte from the receive data register. */
Uart1.RxBuf[Uart1.RxInPos++] = rx_data;
Uart1.RxInPos %= UART1_RX_BUFFER_SIZE;
if (Uart1.RxInPos == Uart1.RxOutPos)
{
Uart1.RxOutPos++;
Uart1.RxOutPos %= UART1_RX_BUFFER_SIZE;
}
USART_ClearITPendingBit(usart, USART_IT_RXNE); /* Clear the USART1 receive interrupt. */
}
if (USART_GetITStatus(usart, USART_IT_TXE) != RESET)
{
/* Write one byte to the transmit data register */
USART_SendData(usart, Uart1.TxBuf[Uart1.TxOutPos++]);
Uart1.TxOutPos %= UART1_TX_BUFFER_SIZE;
if (Uart1.TxOutPos == Uart1.TxInPos)
{
/* Disable the USART1 Transmit interrupt */
USART_ITConfig(usart, USART_IT_TXE, DISABLE);
}
}
#if SYSTEM_SUPPORT_OS
OSIntExit(); //Exit interrupt
#endif
}
/*******************************************************************************
* Function Name : void UART1_PutChar(char data)
* Description : UART1 1문자 출력
* Parameters : 아스키코드
* Return : None
*******************************************************************************/
void UART1_PutChar(const u8 ascii)
{
CPU_SR_ALLOC();
while (((Uart1.TxInPos + 1)% UART1_TX_BUFFER_SIZE) == (Uart1.TxOutPos % UART1_TX_BUFFER_SIZE))
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
CPU_CRITICAL_ENTER();
Uart1.TxBuf[Uart1.TxInPos++] = ascii;
Uart1.TxInPos %= UART1_TX_BUFFER_SIZE;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
CPU_CRITICAL_EXIT();
}
/*******************************************************************************
* Function Name : u8 UART1_GetChar(char *data)
* Description : UART1로 수신버퍼에서 데이타(1byte) 가져오기
* Parameters : none
* Return : 데이타 수신 여부(0: 수신버퍼가 비었음, 1: 수신버퍼에 데이타가 있음)
*******************************************************************************/
ErrorStatus UART1_GetChar(u8 *data)
{
if (Uart1.RxInPos != Uart1.RxOutPos)
{
data[0] = Uart1.RxBuf[Uart1.RxOutPos];
Uart1.RxOutPos++;
Uart1.RxOutPos %= UART1_RX_BUFFER_SIZE;
return SUCCESS;
}
else
return ERROR;
}
/*******************************************************************************
* Function Name : u8 UART1_GetChar(char *data)
* Description : UART1로 수신버퍼에서 데이타(1byte) 가져오기
* Parameters : none
* Return : 데이타 수신 여부(0: 수신버퍼가 비었음, 1: 수신버퍼에 데이타가 있음)
*******************************************************************************/
u8 UART1_GC(void)
{
u8 result = 0;
if (Uart1.RxInPos != Uart1.RxOutPos)
{
result = Uart1.RxBuf[Uart1.RxOutPos];
Uart1.RxOutPos++;
Uart1.RxOutPos %= UART1_RX_BUFFER_SIZE;
}
return result;
}
#endif // #ifdef CONSOLE_DEBUG

View File

@@ -0,0 +1,55 @@
#ifndef __USART_H
#define __USART_H
#include "stdio.h"
#include "stm32f4xx_conf.h"
#include "sys.h"
//////////////////////////////////////////////////////////////////////////////////
//This program is for educational purposes only, without the author's permission, may not be used for any other purpose
//ALIENTEK STM32F4 Explorer Board
//Initialize serial port 1
//Hot Atomic @ALIENTEK
//Forum: www.openedv.com
//Date modified: 2014/6/10
//Version: V1.4
//All rights reserved pirated reserved.
//Copyright(C) Guangzhou wing electronic technology limited company 2009-2019
//All rights reserved
//********************************************************************************
//V1.3 changes description
// Supports serial port baud rate setting at different frequencies.
// Added support for printf
// Serial port receive command features have been added.
// Fixed printf first character missing bug
//V1.4 amended description
// 1, modify the initialize serial IO bug
// 2, modify the USART_RX_STA makes serial port maximum bytes received 2 of 14
// 3, USART_REC_LEN, defines the serial port the maximum allowable number of bytes received (not more than 2 of 14)
// 4, the modified EN_USART1_RX method
//V1.5 modify the description
// 1, added support for UCOSII
//////////////////////////////////////////////////////////////////////////////////
#define DEBUG_PORT USART1
/* Defines -------------------------------------------------------------------*/
#define UART1_TX_BUFFER_SIZE 1024
#define UART1_RX_BUFFER_SIZE 128
/* Type declarations ---------------------------------------------------------*/
typedef struct{
u16 RxInPos, RxOutPos;
u16 TxInPos, TxOutPos;
u8 RxBuf[UART1_RX_BUFFER_SIZE];
u8 TxBuf[UART1_TX_BUFFER_SIZE];
} UART1_Info;
void uart1_init(u32 bound);
ErrorStatus UART1_GetChar(u8 *data);
void UART1_PutChar(const u8 ascii);
void UART1_PutStr(u8 *str, u16 len);
void UART1_printf(const char *fmt,...);
u8 UART1_GC(void);
#endif