Read switch & encoder

This commit is contained in:
Jasper Blanckenburg 2023-04-11 19:56:38 +02:00
parent 5014142b80
commit b672a3e930
10 changed files with 428 additions and 108 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,10 @@
#ifndef INC_DISPLAY_H
#define INC_DISPLAY_H
#include <stdint.h>
void display_init();
void display_update_voltage();
void display_update_voltage(int32_t v);
void display_update_state();
void display_update();

View File

@ -44,17 +44,33 @@ typedef enum {
STATE_ERR_CHARGE,
STATE_ERR_DISCHARGE
} VPState;
typedef enum {
ERR_NONE,
ERR_BAT_GT_CHARGE,
ERR_BAT_LT_DISCHARGE,
ERR_VBAT_TOO_LOW,
ERR_VCDC_TOO_LOW,
ERR_OVERVOLTAGE,
ERR_UNDERVOLTAGE,
} ErrReason;
/* USER CODE END ET */
/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
extern float voltage;
extern int32_t v_bat;
extern int32_t v_charge_discharge;
extern int32_t v_thresh;
extern VPState state;
extern ErrReason error;
/* USER CODE END EC */
/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
#define V_MIN_VOLT 1.0
#define V_MIN (V_MIN_VOLT * 100) // 0.01V resolution
#define V_MAX 11000 // 0.01V resolution
#define DEBOUNCE_TIME 100
/* USER CODE END EM */
/* Exported functions prototypes ---------------------------------------------*/
@ -71,12 +87,8 @@ void Error_Handler(void);
#define C_D_SEL_GPIO_Port GPIOB
#define ENC_S_Pin GPIO_PIN_3
#define ENC_S_GPIO_Port GPIOB
#define ENC_A_Pin GPIO_PIN_4
#define ENC_A_GPIO_Port GPIOB
#define ENC_B_Pin GPIO_PIN_5
#define ENC_B_GPIO_Port GPIOB
#define UV_LED_Pin GPIO_PIN_7
#define UV_LED_GPIO_Port GPIOB
#define ERR_LED_Pin GPIO_PIN_7
#define ERR_LED_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */

View File

@ -49,7 +49,7 @@
/*#define HAL_RNG_MODULE_ENABLED */
/*#define HAL_RTC_MODULE_ENABLED */
/*#define HAL_SPI_MODULE_ENABLED */
/*#define HAL_TIM_MODULE_ENABLED */
#define HAL_TIM_MODULE_ENABLED
/*#define HAL_UART_MODULE_ENABLED */
/*#define HAL_USART_MODULE_ENABLED */
/*#define HAL_IRDA_MODULE_ENABLED */

View File

@ -7,38 +7,47 @@
#include "ssd1306.h"
#include "ssd1306_conf.h"
// printf("%f", ...) doesn't work on STM
static int float_to_str(char *buf, size_t len, float val,
size_t decimal_digits) {
if (len < 2) {
return 0;
#define xstr(a) str(a)
#define str(a) #a
static const char *err_msg(ErrReason err) {
switch (err) {
case ERR_NONE:
return "UNKNOWN ERR";
case ERR_BAT_GT_CHARGE:
return "VBAT > VPSU";
case ERR_BAT_LT_DISCHARGE:
return "VBAT < VLOAD";
case ERR_VBAT_TOO_LOW:
return "VBAT < " xstr(V_MIN_VOLT);
case ERR_VCDC_TOO_LOW:
if (state == STATE_CHARGE || state == STATE_ERR_CHARGE ||
state == STATE_SETUP_CHARGE) {
return "VPSU < " xstr(V_MIN_VOLT);
} else {
return "VLOAD < " xstr(V_MIN_VOLT);
}
case ERR_OVERVOLTAGE:
return "OVERVOLTAGE";
case ERR_UNDERVOLTAGE:
return "UNDERVOLTAGE";
}
// len = NUL + decimal digits + . + integer digits
int int_digits = len - decimal_digits - 2;
int chars = snprintf(buf, len, "%*d", int_digits, (int)val);
buf[chars] = '.';
chars++;
val -= (int)val;
for (size_t i = 0; i < decimal_digits; i++) {
val *= 10;
}
return chars + snprintf(buf + chars, len - chars, "%d", (int)val);
return "UNKNOWN ERROR";
}
void display_init() {
ssd1306_Init();
display_update_voltage();
display_update_voltage(v_thresh);
ssd1306_WriteChar('V', Font_16x26, White);
display_update_state();
ssd1306_UpdateScreen();
}
void display_update_voltage() {
void display_update_voltage(int32_t v) {
char voltage_buf[7];
float_to_str(voltage_buf, sizeof(voltage_buf), voltage, 2);
char *ptr = voltage_buf;
ptr += snprintf(ptr, 4, "%3d", v / 100);
snprintf(ptr, 4, ".%02d", v % 100);
ssd1306_SetCursor(0, 38);
ssd1306_WriteString(voltage_buf, Font_16x26, White);
}
@ -46,6 +55,7 @@ void display_update_voltage() {
void display_update_state() {
switch (state) {
case STATE_SETUP_CHARGE:
display_update_voltage(v_thresh);
ssd1306_FillRectangle(0, 0, SSD1306_WIDTH - 1, 30, Black);
ssd1306_SetCursor(0, 0);
ssd1306_WriteString("Charge", Font_6x8, White);
@ -53,6 +63,7 @@ void display_update_state() {
ssd1306_WriteString("Press to close relay", Font_6x8, White);
break;
case STATE_SETUP_DISCHARGE:
display_update_voltage(v_thresh);
ssd1306_FillRectangle(0, 0, SSD1306_WIDTH - 1, 30, Black);
ssd1306_SetCursor(0, 0);
ssd1306_WriteString("Discharge", Font_6x8, White);
@ -60,34 +71,39 @@ void display_update_state() {
ssd1306_WriteString("Press to close relay", Font_6x8, White);
break;
case STATE_CHARGE:
display_update_voltage(v_bat);
ssd1306_FillRectangle(0, 0, SSD1306_WIDTH - 1, 30, Black);
ssd1306_SetCursor(0, 0);
ssd1306_WriteString("CHARGING", Font_11x18, White);
break;
case STATE_DISCHARGE:
display_update_voltage(v_bat);
ssd1306_FillRectangle(0, 0, SSD1306_WIDTH - 1, 30, Black);
ssd1306_SetCursor(0, 0);
ssd1306_WriteString("DISCHARGING", Font_11x18, White);
break;
case STATE_ERR_CHARGE:
display_update_voltage(v_bat);
ssd1306_FillRectangle(0, 0, SSD1306_WIDTH - 1, 30, White);
ssd1306_FillRectangle(3, 3, SSD1306_WIDTH - 1 - 3, 30 - 3, Black);
ssd1306_SetCursor(10, 5);
ssd1306_WriteString("OVERVOLTAGE", Font_6x8, White);
ssd1306_WriteString("ERROR:", Font_6x8, White);
ssd1306_SetCursor(10, 15);
ssd1306_WriteString("DETECTED", Font_6x8, White);
ssd1306_WriteString(err_msg(error), Font_6x8, White);
break;
case STATE_ERR_DISCHARGE:
display_update_voltage(v_bat);
ssd1306_FillRectangle(0, 0, SSD1306_WIDTH - 1, 30, White);
ssd1306_FillRectangle(3, 3, SSD1306_WIDTH - 1 - 3, 30 - 3, Black);
ssd1306_SetCursor(10, 5);
ssd1306_WriteString("UNDERVOLTAGE", Font_6x8, White);
ssd1306_WriteString("ERROR:", Font_6x8, White);
ssd1306_SetCursor(10, 15);
ssd1306_WriteString("DETECTED", Font_6x8, White);
ssd1306_WriteString(err_msg(error), Font_6x8, White);
break;
}
}
void display_update() {
display_update_voltage();
display_update_state();
ssd1306_UpdateScreen();
}

View File

@ -18,13 +18,15 @@
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "display.h"
#include "stm32f0xx_hal.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "display.h"
#include "ssd1306.h"
#include "stm32f0xx_hal_gpio.h"
#include "stm32f0xx_hal_tim.h"
#include <stdio.h>
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
@ -46,9 +48,14 @@ ADC_HandleTypeDef hadc;
I2C_HandleTypeDef hi2c1;
TIM_HandleTypeDef htim3;
/* USER CODE BEGIN PV */
float voltage = 11.5;
int32_t v_bat;
int32_t v_charge_discharge;
int32_t v_thresh = 1150;
VPState state = STATE_SETUP_CHARGE;
ErrReason error = ERR_NONE;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@ -56,13 +63,140 @@ void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC_Init(void);
static void MX_I2C1_Init(void);
static void MX_TIM3_Init(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int switch_pressed() {
static uint32_t last_press = 0;
if (HAL_GPIO_ReadPin(ENC_S_GPIO_Port, ENC_S_Pin) == GPIO_PIN_RESET) {
if (HAL_GetTick() - last_press > DEBOUNCE_TIME) {
last_press = HAL_GetTick();
return 1;
}
}
return 0;
}
void update_thresh() {
int16_t delta = htim3.Instance->CNT - 0x8000;
delta /= 4;
if (delta != 0) {
// Clockwise should increase, so invert the sign here
v_thresh -= delta * 10;
if (v_thresh < V_MIN) {
v_thresh = V_MIN;
} else if (v_thresh > V_MAX) {
v_thresh = V_MAX;
}
htim3.Instance->CNT -= delta * 4;
}
}
VPState update_setup_charge() {
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_RESET);
update_thresh();
if (HAL_GPIO_ReadPin(C_D_SEL_GPIO_Port, C_D_SEL_Pin) == GPIO_PIN_RESET) {
return STATE_SETUP_DISCHARGE;
}
if (switch_pressed()) {
if (v_bat > v_charge_discharge) {
error = ERR_BAT_GT_CHARGE;
return STATE_ERR_CHARGE;
} else if (v_bat < V_MIN) {
error = ERR_VBAT_TOO_LOW;
return STATE_ERR_CHARGE;
} else if (v_charge_discharge < V_MIN) {
error = ERR_VCDC_TOO_LOW;
return STATE_ERR_CHARGE;
}
return STATE_CHARGE;
}
return STATE_SETUP_CHARGE;
}
VPState update_setup_discharge() {
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_RESET);
update_thresh();
if (HAL_GPIO_ReadPin(C_D_SEL_GPIO_Port, C_D_SEL_Pin) == GPIO_PIN_SET) {
return STATE_SETUP_CHARGE;
}
if (switch_pressed()) {
if (v_bat < v_charge_discharge) {
error = ERR_BAT_LT_DISCHARGE;
return STATE_ERR_DISCHARGE;
} else if (v_bat < V_MIN) {
error = ERR_VBAT_TOO_LOW;
return STATE_ERR_DISCHARGE;
} else if (v_charge_discharge < V_MIN) {
error = ERR_VCDC_TOO_LOW;
return STATE_ERR_DISCHARGE;
}
return STATE_DISCHARGE;
}
return STATE_SETUP_DISCHARGE;
}
VPState update_charge() {
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_SET);
if (v_bat < V_MIN) {
error = ERR_VBAT_TOO_LOW;
return STATE_ERR_CHARGE;
} else if (v_bat > v_thresh) {
error = ERR_OVERVOLTAGE;
return STATE_ERR_CHARGE;
}
return STATE_CHARGE;
}
VPState update_discharge() {
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_SET);
if (v_bat < V_MIN) {
error = ERR_VBAT_TOO_LOW;
return STATE_ERR_DISCHARGE;
} else if (v_bat < v_thresh) {
error = ERR_UNDERVOLTAGE;
return STATE_ERR_DISCHARGE;
}
return STATE_DISCHARGE;
}
VPState update_err_charge() {
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_RESET);
if (switch_pressed()) {
error = ERR_NONE;
return STATE_SETUP_CHARGE;
}
return STATE_ERR_CHARGE;
}
VPState update_err_discharge() {
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_RESET);
if (switch_pressed()) {
error = ERR_NONE;
return STATE_SETUP_DISCHARGE;
}
return STATE_ERR_DISCHARGE;
}
/* USER CODE END 0 */
/**
@ -95,7 +229,10 @@ int main(void) {
MX_GPIO_Init();
MX_ADC_Init();
MX_I2C1_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
htim3.Instance->CNT = 0x8000;
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
display_init();
/* USER CODE END 2 */
@ -103,17 +240,30 @@ int main(void) {
/* USER CODE BEGIN WHILE */
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
voltage += 1;
if (HAL_GetTick() > 3000) {
state = STATE_DISCHARGE;
} else if (HAL_GetTick() > 2000) {
state = STATE_ERR_CHARGE;
} else if (HAL_GetTick() > 1000) {
state = STATE_CHARGE;
switch (state) {
case STATE_SETUP_CHARGE:
state = update_setup_charge();
break;
case STATE_SETUP_DISCHARGE:
state = update_setup_discharge();
break;
case STATE_CHARGE:
state = update_charge();
break;
case STATE_DISCHARGE:
state = update_discharge();
break;
case STATE_ERR_CHARGE:
state = update_err_charge();
break;
case STATE_ERR_DISCHARGE:
state = update_err_discharge();
break;
}
display_update();
HAL_Delay(100);
HAL_Delay(10);
}
/* USER CODE END 3 */
}
@ -262,6 +412,51 @@ static void MX_I2C1_Init(void) {
/* USER CODE END I2C1_Init 2 */
}
/**
* @brief TIM3 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM3_Init(void) {
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
TIM_Encoder_InitTypeDef sConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM3_Init 1 */
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 65535;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC1Prescaler = TIM_ICPSC_DIV2;
sConfig.IC1Filter = 10;
sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC2Prescaler = TIM_ICPSC_DIV2;
sConfig.IC2Filter = 10;
if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK) {
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
}
/**
* @brief GPIO Initialization Function
* @param None
@ -269,6 +464,8 @@ static void MX_I2C1_Init(void) {
*/
static void MX_GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOF_CLK_ENABLE();
@ -279,7 +476,7 @@ static void MX_GPIO_Init(void) {
HAL_GPIO_WritePin(RELAY_SET_GPIO_Port, RELAY_SET_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(UV_LED_GPIO_Port, UV_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(ERR_LED_GPIO_Port, ERR_LED_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : RELAY_SET_Pin */
GPIO_InitStruct.Pin = RELAY_SET_Pin;
@ -288,18 +485,21 @@ static void MX_GPIO_Init(void) {
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(RELAY_SET_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pins : C_D_SEL_Pin ENC_S_Pin ENC_A_Pin ENC_B_Pin */
GPIO_InitStruct.Pin = C_D_SEL_Pin | ENC_S_Pin | ENC_A_Pin | ENC_B_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
/*Configure GPIO pins : C_D_SEL_Pin ENC_S_Pin */
GPIO_InitStruct.Pin = C_D_SEL_Pin | ENC_S_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pin : UV_LED_Pin */
GPIO_InitStruct.Pin = UV_LED_Pin;
/*Configure GPIO pin : ERR_LED_Pin */
GPIO_InitStruct.Pin = ERR_LED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(UV_LED_GPIO_Port, &GPIO_InitStruct);
HAL_GPIO_Init(ERR_LED_GPIO_Port, &GPIO_InitStruct);
/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}
/* USER CODE BEGIN 4 */

View File

@ -206,6 +206,71 @@ void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c)
}
/**
* @brief TIM_Encoder MSP Initialization
* This function configures the hardware resources used in this example
* @param htim_encoder: TIM_Encoder handle pointer
* @retval None
*/
void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* htim_encoder)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim_encoder->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspInit 0 */
/* USER CODE END TIM3_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_TIM3_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**TIM3 GPIO Configuration
PB4 ------> TIM3_CH1
PB5 ------> TIM3_CH2
*/
GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */
}
}
/**
* @brief TIM_Encoder MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param htim_encoder: TIM_Encoder handle pointer
* @retval None
*/
void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* htim_encoder)
{
if(htim_encoder->Instance==TIM3)
{
/* USER CODE BEGIN TIM3_MspDeInit 0 */
/* USER CODE END TIM3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM3_CLK_DISABLE();
/**TIM3 GPIO Configuration
PB4 ------> TIM3_CH1
PB5 ------> TIM3_CH2
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_4|GPIO_PIN_5);
/* USER CODE BEGIN TIM3_MspDeInit 1 */
/* USER CODE END TIM3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

View File

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.18.0-B7] date: [Fri Mar 10 18:58:36 CET 2023]
# File automatically-generated by tool: [projectgenerator] version: [3.19.2] date: [Tue Apr 11 18:36:37 CEST 2023]
##########################################################################################################################
# ------------------------------------------------
@ -35,31 +35,31 @@ BUILD_DIR = build
# source
######################################
# C sources
C_SOURCES = \
Core/Src/main.c \
Core/Src/stm32f0xx_it.c \
Core/Src/stm32f0xx_hal_msp.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c \
Core/Src/system_stm32f0xx.c
C_SOURCES = \
Core/Src/main.c \
Core/Src/stm32f0xx_it.c \
Core/Src/stm32f0xx_hal_msp.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_adc_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_exti.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c \
Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c \
Core/Src/system_stm32f0xx.c
# ASM sources
ASM_SOURCES = \
ASM_SOURCES = \
startup_stm32f042x6.s
@ -103,8 +103,8 @@ MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)
AS_DEFS =
# C defines
C_DEFS = \
-DUSE_HAL_DRIVER \
C_DEFS = \
-DUSE_HAL_DRIVER \
-DSTM32F042x6
@ -112,11 +112,11 @@ C_DEFS = \
AS_INCLUDES =
# C includes
C_INCLUDES = \
-ICore/Inc \
-IDrivers/STM32F0xx_HAL_Driver/Inc \
-IDrivers/STM32F0xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F0xx/Include \
C_INCLUDES = \
-ICore/Inc \
-IDrivers/STM32F0xx_HAL_Driver/Inc \
-IDrivers/STM32F0xx_HAL_Driver/Inc/Legacy \
-IDrivers/CMSIS/Device/ST/STM32F0xx/Include \
-IDrivers/CMSIS/Include
@ -189,4 +189,4 @@ clean:
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)
# *** EOF ***
# *** EOF ***

View File

@ -191,8 +191,14 @@ vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
# list of C objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
# list of ASM program objects
UPPER_CASE_ASM_SOURCES = $(filter %.S,$(ASM_SOURCES))
LOWER_CASE_ASM_SOURCES = $(filter %.s,$(ASM_SOURCES))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(UPPER_CASE_ASM_SOURCES:.S=.o)))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(LOWER_CASE_ASM_SOURCES:.s=.o)))
vpath %.s $(sort $(dir $(ASM_SOURCES)))
$(BUILD_DIR)/%.o: %.cpp STM32Make.make | $(BUILD_DIR)
@ -207,6 +213,9 @@ $(BUILD_DIR)/%.o: %.c STM32Make.make | $(BUILD_DIR)
$(BUILD_DIR)/%.o: %.s STM32Make.make | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/%.o: %.S STM32Make.make | $(BUILD_DIR)
$(AS) -c $(CFLAGS) $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) STM32Make.make
$(CC) $(OBJECTS) $(LDFLAGS) -o $@
$(SZ) $@

View File

@ -12,7 +12,8 @@ Mcu.IP1=I2C1
Mcu.IP2=NVIC
Mcu.IP3=RCC
Mcu.IP4=SYS
Mcu.IPNb=5
Mcu.IP5=TIM3
Mcu.IPNb=6
Mcu.Name=STM32F042K(4-6)Tx
Mcu.Package=LQFP32
Mcu.Pin0=PF0-OSC_IN
@ -33,8 +34,8 @@ Mcu.PinsNb=14
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F042K6Tx
MxCube.Version=6.7.0
MxDb.Version=DB.6.0.70
MxCube.Version=6.8.0
MxDb.Version=DB.6.0.80
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
@ -56,21 +57,17 @@ PA2.Signal=GPIO_Output
PB0.GPIOParameters=GPIO_Label
PB0.GPIO_Label=C_D_SEL
PB0.Locked=true
PB0.Signal=GPIO_Input
PB0.Signal=GPXTI0
PB3.GPIOParameters=GPIO_Label
PB3.GPIO_Label=ENC_S
PB3.Locked=true
PB3.Signal=GPIO_Input
PB4.GPIOParameters=GPIO_Label
PB4.GPIO_Label=ENC_A
PB3.Signal=GPXTI3
PB4.Locked=true
PB4.Signal=GPIO_Input
PB5.GPIOParameters=GPIO_Label
PB5.GPIO_Label=ENC_B
PB4.Signal=S_TIM3_CH1
PB5.Locked=true
PB5.Signal=GPIO_Input
PB5.Signal=S_TIM3_CH2
PB7.GPIOParameters=GPIO_Label
PB7.GPIO_Label=UV_LED
PB7.GPIO_Label=ERR_LED
PB7.Locked=true
PB7.Signal=GPIO_Output
PB8.Locked=true
@ -101,12 +98,13 @@ ProjectManager.PreviousToolchain=
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=VoltageProtector.ioc
ProjectManager.ProjectName=VoltageProtector
ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_ADC_Init-ADC-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_ADC_Init-ADC-false-HAL-true,4-MX_I2C1_Init-I2C1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true
RCC.AHBFreq_Value=48000000
RCC.APB1Freq_Value=48000000
RCC.APB1TimFreq_Value=48000000
@ -125,6 +123,24 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_HSI48
RCC.TimSysFreq_Value=48000000
RCC.USART1Freq_Value=48000000
RCC.VCOOutput2Freq_Value=8000000
SH.GPXTI0.0=GPIO_EXTI0
SH.GPXTI0.ConfNb=1
SH.GPXTI3.0=GPIO_EXTI3
SH.GPXTI3.ConfNb=1
SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface
SH.S_TIM3_CH1.ConfNb=1
SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface
SH.S_TIM3_CH2.ConfNb=1
TIM3.ClockDivision=TIM_CLOCKDIVISION_DIV1
TIM3.EncoderMode=TIM_ENCODERMODE_TI12
TIM3.IC1Filter=10
TIM3.IC1Polarity=TIM_ICPOLARITY_RISING
TIM3.IC1Prescaler=TIM_ICPSC_DIV2
TIM3.IC2Filter=10
TIM3.IC2Polarity=TIM_ICPOLARITY_RISING
TIM3.IC2Prescaler=TIM_ICPSC_DIV2
TIM3.IPParameters=EncoderMode,IC1Polarity,IC2Polarity,IC1Filter,IC2Filter,ClockDivision,Prescaler,IC1Prescaler,IC2Prescaler
TIM3.Prescaler=0
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
board=custom