Compare commits
2 Commits
11abd39b4b
...
7de9180f80
Author | SHA1 | Date |
---|---|---|
benas-gavea | 7de9180f80 | |
benas-gavea | 0a5c96959c |
|
@ -68,7 +68,7 @@
|
|||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||
#define configMAX_PRIORITIES ( 56 )
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)64)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)28360)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)128360)
|
||||
#define configMAX_TASK_NAME_LEN ( 16 )
|
||||
#define configUSE_TRACE_FACILITY 1
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
|
|
|
@ -14,25 +14,16 @@ extern "C" {
|
|||
#include <Def/SCREEN_Def.h>
|
||||
|
||||
|
||||
#define BH1750_ENABLED 0
|
||||
#define GPS_ENABLED 0
|
||||
#define CAN_ENABLED 1
|
||||
#define RGB_ENABLED 1
|
||||
#define UART_ENABLED 0
|
||||
#define IND_ENABLED 0
|
||||
#define ALERT_ENABLED 0
|
||||
#define DEMO 0
|
||||
|
||||
#define LED_NUMBER 24
|
||||
#define LED_DEFAULT_BRIGHTNESS 50
|
||||
#define CAN_SETUP_ID 0x580
|
||||
|
||||
#define LED_DEFAULT_BRIGHTNESS 50
|
||||
#define LCD_DEFAULT_BRIGHTNESS 400
|
||||
|
||||
#define LCD_RPM_HIGH 8000
|
||||
|
||||
#define PROTECTION_RPM_LOW 6500
|
||||
#define PROTECTION_RPM_HIGH 7800
|
||||
|
||||
#define PROTECTION_RPM_HIGH 8000
|
||||
#define PROTECTION_RPM_LED 6
|
||||
|
||||
#define PROTECTION_OIL_LOW 40
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
* setupDash.h
|
||||
*
|
||||
* Created on: 4 Apr 2023
|
||||
* Author: Ben
|
||||
*/
|
||||
|
||||
#ifndef INC_SETUP_DASH_SETUPDASH_H_
|
||||
#define INC_SETUP_DASH_SETUPDASH_H_
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* INC_SETUP_DASH_SETUPDASH_H_ */
|
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
* setupField.h
|
||||
*
|
||||
* Created on: 4 Apr 2023
|
||||
* Author: Ben
|
||||
*/
|
||||
|
||||
#ifndef INC_SETUP_FIELD_SETUPFIELD_H_
|
||||
#define INC_SETUP_FIELD_SETUPFIELD_H_
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* INC_SETUP_FIELD_SETUPFIELD_H_ */
|
|
@ -1,43 +0,0 @@
|
|||
#ifndef __WS2812_H
|
||||
#define __WS2812_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "extern.h"
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
TIM_HandleTypeDef htim2;
|
||||
|
||||
#define WS2812_NUM_LEDS_CH1 LED_NUMBER
|
||||
|
||||
#define WS2812_TIM_PERIODE htim2.Instance->ARR //52 // F_PWM 84000000/800000 = 225 -> 800 kHz (1.25us)
|
||||
|
||||
#define WS2812_LO_TIME (WS2812_TIM_PERIODE / (1.25 / 0.22)) - 1 //(1.25 / 0.22) 0.220us - 0.380us
|
||||
#define WS2812_HI_TIME (WS2812_TIM_PERIODE / (1.25 / 0.58)) - 1 //(1.25 / 0.58) 0.580us - 1us
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// RGB LED Farbdefinition (3 x 8bit)
|
||||
//--------------------------------------------------------------
|
||||
typedef struct {
|
||||
uint8_t red; // 0...255 (als PWM-Wert)
|
||||
uint8_t green; // 0...255 (als PWM-Wert)
|
||||
uint8_t blue; // 0...255 (als PWM-Wert)
|
||||
}WS2812_RGB_t;
|
||||
|
||||
WS2812_RGB_t WS2812_LED_BUF_CH1[WS2812_NUM_LEDS_CH1];
|
||||
|
||||
#define WS2812_BUFLEN (WS2812_NUM_LEDS_CH1+2)*24
|
||||
|
||||
//Interrupt Callback
|
||||
void DMA_Callback(void);
|
||||
|
||||
//Library Interface
|
||||
void WS2812_Refresh(void);
|
||||
void WS2812_Clear(uint8_t refresh);
|
||||
void WS2812_One_RGB(uint32_t nr, WS2812_RGB_t rgb_col, uint8_t refresh);
|
||||
void WS2812_All_RGB(WS2812_RGB_t rgb_col, uint8_t refresh);
|
||||
|
||||
|
||||
#endif // __WS2812_H
|
||||
|
||||
|
|
@ -14,6 +14,8 @@ extern Statuses Current_Status;
|
|||
extern FILE *FileBuffer;
|
||||
extern uint8_t BufferIsSet;
|
||||
|
||||
extern uint8_t uartTransmitBufferSize;
|
||||
extern uint8_t uartTransmitBuffer[128];
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -109,10 +109,6 @@ void show_neopixels();
|
|||
#define HALL_OUT_GPIO_Port GPIOC
|
||||
#define BRV_CPU_Pin GPIO_PIN_0
|
||||
#define BRV_CPU_GPIO_Port GPIOA
|
||||
#define LED_TIM2_CH2_PA1_Pin GPIO_PIN_1
|
||||
#define LED_TIM2_CH2_PA1_GPIO_Port GPIOA
|
||||
#define LED_TIM2_CH3_PA2_Pin GPIO_PIN_2
|
||||
#define LED_TIM2_CH3_PA2_GPIO_Port GPIOA
|
||||
#define I2C2_SCL_PH4_Pin GPIO_PIN_4
|
||||
#define I2C2_SCL_PH4_GPIO_Port GPIOH
|
||||
#define I2C2_SDA_PH5_Pin GPIO_PIN_5
|
||||
|
|
|
@ -52,7 +52,6 @@ void MemManage_Handler(void);
|
|||
void BusFault_Handler(void);
|
||||
void UsageFault_Handler(void);
|
||||
void DebugMon_Handler(void);
|
||||
void DMA1_Stream6_IRQHandler(void);
|
||||
void CAN1_RX0_IRQHandler(void);
|
||||
void FMC_IRQHandler(void);
|
||||
void TIM6_DAC_IRQHandler(void);
|
||||
|
|
|
@ -0,0 +1,282 @@
|
|||
/**
|
||||
* @file WS2812.cpp
|
||||
* @brief WS2812 RGB LED driver
|
||||
*
|
||||
* @date 25.03.2023
|
||||
* @author Benas Brazdziunas
|
||||
*/
|
||||
|
||||
#include "WS2812.hpp"
|
||||
|
||||
|
||||
static WS2812_RGB_t WS2812_LED_BUF[WS2812_LED_N];
|
||||
static uint32_t WS2812_TIM_BUF[WS2812_BUFLEN];
|
||||
static uint8_t WS2812_BRIGHTNESS = 5;
|
||||
static bool WS2812_INVERT_ORDER = true;
|
||||
static bool WS2812_DMA_READY = false;
|
||||
|
||||
TIM_HandleTypeDef WS2812_PWM_DRIVER;
|
||||
DMA_HandleTypeDef WS2812_PWM_DMA;
|
||||
|
||||
extern void DMA1_Stream1_IRQHandler(void);
|
||||
|
||||
void initWS2812()
|
||||
{
|
||||
|
||||
uint32_t freq = HAL_RCC_GetHCLKFreq();
|
||||
ConfigureTimerGPIO();
|
||||
ConfigureTimerPeripheral();
|
||||
ConfigureDMA();
|
||||
ConfigureTimerChannel();
|
||||
//HAL_TIM_PWM_Start(&WS2812_PWM_DRIVER, WS2812_PWM_TIM_CH);
|
||||
HAL_TIM_PWM_Start_DMA(&WS2812_PWM_DRIVER, WS2812_PWM_TIM_CH, (uint32_t *)WS2812_TIM_BUF, WS2812_BUFLEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set one LEDs to 0 (off)
|
||||
*/
|
||||
void clearWS2812One(uint32_t num)
|
||||
{
|
||||
if (num < WS2812_LED_N)
|
||||
{
|
||||
WS2812_LED_BUF[num] = (WS2812_RGB_t){0, 0, 0};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all LEDs to 0 (off)
|
||||
*/
|
||||
void clearWS2812All()
|
||||
{
|
||||
for (uint16_t num = 0; num < WS2812_LED_N; num++)
|
||||
{
|
||||
WS2812_LED_BUF[num] = (WS2812_RGB_t){0, 0, 0};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set one LED (R, G, B values).
|
||||
*/
|
||||
void setWS2812One(uint32_t num, WS2812_RGB_t rgb_col)
|
||||
{
|
||||
if (num < WS2812_LED_N)
|
||||
{
|
||||
WS2812_LED_BUF[num] = rgb_col;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all LEDs (R, G, B values).
|
||||
*/
|
||||
void setWS2812All(WS2812_RGB_t rgb_col)
|
||||
{
|
||||
for (uint16_t num = 0; num < WS2812_LED_N; num++)
|
||||
{
|
||||
WS2812_LED_BUF[num] = rgb_col;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all LEDs Brightness.
|
||||
*/
|
||||
void setWS2812Brightness(uint8_t num)
|
||||
{
|
||||
num = num >= 100 ? 100 : num;
|
||||
num = num <= 0 ? 0 : num;
|
||||
WS2812_BRIGHTNESS = num;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate Timer DMA buffer
|
||||
*/
|
||||
void updateWS2812()
|
||||
{
|
||||
while(!WS2812_DMA_READY);
|
||||
|
||||
uint32_t pos = WS2812_INVERT_ORDER ? (WS2812_LED_N * 24) : 0;
|
||||
|
||||
for (uint32_t num = 0; num < WS2812_LED_N; num++)
|
||||
{
|
||||
WS2812_RGB_t led = WS2812_LED_BUF[num];
|
||||
float brightness = WS2812_BRIGHTNESS / 100.0;
|
||||
|
||||
led.red = (uint8_t)(led.red * brightness);
|
||||
led.green = (uint8_t)(led.green * brightness);
|
||||
led.blue = (uint8_t)(led.blue * brightness);
|
||||
|
||||
if(WS2812_INVERT_ORDER)
|
||||
{
|
||||
// Col:Blue , Bit:7..0
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x80) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x40) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x20) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x10) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x08) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x04) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x02) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.blue & 0x01) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
|
||||
// Col:Red , Bit:7..0
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x80) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x40) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x20) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x10) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x08) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x04) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x02) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.red & 0x01) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
|
||||
// Col:Green , Bit:7..0
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x80) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x40) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x20) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x10) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x08) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x04) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x02) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos--] = ((led.green & 0x01) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
|
||||
} else {
|
||||
|
||||
// Col:Green , Bit:7..0
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x80) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x40) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x20) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x10) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x08) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x04) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x02) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.green & 0x01) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
|
||||
// Col:Red , Bit:7..0
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x80) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x40) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x20) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x10) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x08) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x04) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x02) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.red & 0x01) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
|
||||
// Col:Blue , Bit:7..0
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x80) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x40) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x20) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x10) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x08) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x04) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x02) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
WS2812_TIM_BUF[pos++] = ((led.blue & 0x01) != 0) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
|
||||
}
|
||||
}
|
||||
HAL_TIM_PWM_Start_DMA(&WS2812_PWM_DRIVER, WS2812_PWM_TIM_CH, (uint32_t *)WS2812_TIM_BUF, WS2812_BUFLEN);
|
||||
WS2812_DMA_READY = false;
|
||||
}
|
||||
|
||||
void ConfigureTimerPeripheral()
|
||||
{
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
|
||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||
|
||||
WS2812_PWM_DRIVER.Instance = WS2812_PWM_TIMER;
|
||||
WS2812_PWM_DRIVER.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
WS2812_PWM_DRIVER.Init.RepetitionCounter = 0;
|
||||
WS2812_PWM_DRIVER.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
WS2812_PWM_DRIVER.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
WS2812_PWM_DRIVER.Init.Period = WS2812_PWM_PERIOD - 1;
|
||||
WS2812_PWM_DRIVER.Init.Prescaler = 0;
|
||||
|
||||
if (HAL_TIM_Base_Init(&WS2812_PWM_DRIVER) != HAL_OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&WS2812_PWM_DRIVER, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ConfigureDMA();
|
||||
|
||||
if (HAL_TIM_PWM_Init(&WS2812_PWM_DRIVER) != HAL_OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigureTimerGPIO(void)
|
||||
{
|
||||
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
GPIO_InitStruct.Pin = WS2812_PWM_PIN;
|
||||
|
||||
HAL_GPIO_Init(WS2812_PORT, &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
void ConfigureTimerChannel(void)
|
||||
{
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;//WS2812_PWM_PERIOD / 2;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
|
||||
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
|
||||
|
||||
// Configure channel
|
||||
if (HAL_TIM_PWM_ConfigChannel(&WS2812_PWM_DRIVER, &sConfigOC, WS2812_PWM_TIM_CH) != HAL_OK)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigureDMA(void)
|
||||
{
|
||||
// See DMA mapping on page 226 in Reference Manual
|
||||
|
||||
/* Enable DMA clock */
|
||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||
/*##- 3- Configure DMA #####################################################*/
|
||||
/*********************** Configure DMA parameters ***************************/
|
||||
WS2812_PWM_DMA.Instance = DMA1_Stream1;
|
||||
WS2812_PWM_DMA.Init.Channel = DMA_CHANNEL_3;
|
||||
|
||||
WS2812_PWM_DMA.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||
WS2812_PWM_DMA.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
WS2812_PWM_DMA.Init.MemInc = DMA_MINC_ENABLE;
|
||||
WS2812_PWM_DMA.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
|
||||
WS2812_PWM_DMA.Init.MemDataAlignment = DMA_PDATAALIGN_WORD;
|
||||
WS2812_PWM_DMA.Init.Mode = DMA_NORMAL;
|
||||
WS2812_PWM_DMA.Init.Priority = DMA_PRIORITY_LOW;
|
||||
WS2812_PWM_DMA.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
|
||||
|
||||
/* Associate the DMA handle */
|
||||
__HAL_LINKDMA(&WS2812_PWM_DRIVER, hdma[TIM_DMA_ID_CC3], WS2812_PWM_DMA);
|
||||
//
|
||||
// /* Initialize DMA handle */
|
||||
HAL_DMA_Init(WS2812_PWM_DRIVER.hdma[TIM_DMA_ID_CC3]);
|
||||
//
|
||||
// /* NVIC configuration for DMA transfer complete interrupt */
|
||||
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
|
||||
//
|
||||
}
|
||||
|
||||
void DMA1_Stream1_IRQHandler(void)
|
||||
{
|
||||
WS2812_DMA_READY = true;
|
||||
HAL_DMA_IRQHandler(WS2812_PWM_DRIVER.hdma[TIM_DMA_ID_CC3]);
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
/**
|
||||
* @file ws2812.h
|
||||
*
|
||||
* @date 25.03.2025
|
||||
* @author Benas Brazdziunas
|
||||
*/
|
||||
|
||||
#ifndef WS2812_HPP_
|
||||
#define WS2812_HPP_
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
|
||||
#define CONCAT_SYMBOLS(s1, s2) s1##s2
|
||||
#define CONCAT_EXPANDED_SYMBOLS(s1, s2) CONCAT_SYMBOLS(s1, s2)
|
||||
|
||||
#define WS2812_LED_N 22 // Number of LEDs
|
||||
#define WS2812_PORT GPIOA
|
||||
#define WS2812_PIN 2
|
||||
#define WS2812_TIM_N 2 // timer, 1-11
|
||||
#define WS2812_TIM_CH 3 // timer channel, 0-3
|
||||
|
||||
#define WS2812_PWM_TIMER CONCAT_EXPANDED_SYMBOLS(TIM, WS2812_TIM_N)
|
||||
#define WS2812_PWM_TIM_CH CONCAT_EXPANDED_SYMBOLS(TIM_CHANNEL_, WS2812_TIM_CH)
|
||||
#define WS2812_PWM_DRIVER CONCAT_EXPANDED_SYMBOLS(htim, WS2812_TIM_N)
|
||||
#define WS2812_PWM_PIN CONCAT_EXPANDED_SYMBOLS(GPIO_PIN_, WS2812_PIN)
|
||||
|
||||
#define WS2812_BUFLEN ((WS2812_LED_N + 4) * 24)
|
||||
|
||||
#define WS2812_PWM_FREQUENCY (HAL_RCC_GetHCLKFreq() / 2)
|
||||
#define WS2812_PWM_PERIOD (WS2812_PWM_FREQUENCY / 800000)
|
||||
|
||||
#define WS2812_DUTYCYCLE_0 (WS2812_PWM_FREQUENCY / (1000000000 / 300))
|
||||
#define WS2812_DUTYCYCLE_1 (WS2812_PWM_FREQUENCY / (1000000000 / 700))
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t red;
|
||||
uint8_t green;
|
||||
uint8_t blue;
|
||||
} WS2812_RGB_t;
|
||||
|
||||
void initWS2812();
|
||||
|
||||
void clearWS2812One(uint32_t num);
|
||||
void clearWS2812All();
|
||||
void setWS2812One(uint32_t num, WS2812_RGB_t rgb_col);
|
||||
void setWS2812All(WS2812_RGB_t rgb_col);
|
||||
void setWS2812Brightness(uint8_t num);
|
||||
|
||||
void DMA1_Stream1_IRQHandler(void);
|
||||
|
||||
void updateWS2812();
|
||||
|
||||
void ConfigureTimerPeripheral();
|
||||
void ConfigureTimerGPIO(void);
|
||||
void ConfigureTimerChannel(void);
|
||||
void ConfigureDMA(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* WS2812_HPP_ */
|
||||
|
|
@ -1,126 +0,0 @@
|
|||
/**
|
||||
* WS2812 Neopixel LED driver for STM32
|
||||
* Based upon the WS2812 Library for STM32F4 from Uwe Becker, http://mikrocontroller.bplaced.net/wordpress/?page_id=3665
|
||||
*
|
||||
* @Author: Nicolas Dammin, 2016
|
||||
*/
|
||||
#include "WS2812_Lib.h"
|
||||
|
||||
uint16_t WS2812_TIM_BUF[WS2812_BUFLEN];
|
||||
uint8_t dma_ready = 1;
|
||||
|
||||
void DMA_Callback(void) {
|
||||
dma_ready = 1;
|
||||
}
|
||||
/**
|
||||
* Internal function, calculates the HI or LO values for the 800 kHz WS2812 signal and puts them into a buffer for the Timer-DMA
|
||||
*
|
||||
*/
|
||||
void calcBuf(void)
|
||||
{
|
||||
uint32_t n;
|
||||
uint32_t pos;
|
||||
|
||||
pos=0;
|
||||
// set timings for all LEDs
|
||||
for(n=0;n<WS2812_NUM_LEDS_CH1;n++) {
|
||||
|
||||
WS2812_RGB_t led = WS2812_LED_BUF_CH1[n];
|
||||
float brightness = Current_Status.LED_BRIGHTNESS / 100.0;
|
||||
|
||||
led.red = (uint8_t)(led.red * brightness);
|
||||
led.green = (uint8_t)(led.green * brightness);
|
||||
led.blue = (uint8_t)(led.blue * brightness);
|
||||
|
||||
// Col:Red , Bit:7..0
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x80) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x40) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x20) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x10) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x08) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x04) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x02) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.red&0x01) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
|
||||
// Col:Green , Bit:7..0
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x80) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x40) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x20) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x10) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x08) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x04) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x02) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.green&0x01) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
|
||||
// Col:Blue , Bit:7..0
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x80) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x40) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x20) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x10) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x08) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x04) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x02) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
WS2812_TIM_BUF[pos++]=((led.blue&0x01) != 0)?WS2812_HI_TIME:WS2812_LO_TIME;
|
||||
}
|
||||
|
||||
// short pause after all LEDs have been updated
|
||||
// for(n=0;n<(WS2812_NUM_LEDS_CH1+2);n++) {
|
||||
// WS2812_TIM_BUF[pos++]=0;
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function; start DMA transfer
|
||||
*/
|
||||
void startDMA(void) {
|
||||
dma_ready = 0;
|
||||
if (HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_2, (uint32_t *)WS2812_TIM_BUF, WS2812_BUFLEN) != HAL_OK)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void WS2812_Refresh(void) {
|
||||
while(!dma_ready);
|
||||
calcBuf();
|
||||
startDMA();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all LEDs to 0 (off) and update
|
||||
*/
|
||||
void WS2812_Clear(uint8_t refresh) {
|
||||
uint16_t num;
|
||||
|
||||
for(num = 0; num < WS2812_NUM_LEDS_CH1; num++) {
|
||||
WS2812_LED_BUF_CH1[num] = (WS2812_RGB_t){0,0,0};
|
||||
}
|
||||
|
||||
if(refresh==1) WS2812_Refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set one LED (R, G, B values). If refresh == 1, update LEDs, otherwise just update buffer (if several function calls are to be done before refresh)
|
||||
*/
|
||||
void WS2812_One_RGB(uint32_t nr, WS2812_RGB_t rgb_col, uint8_t refresh)
|
||||
{
|
||||
if(nr<WS2812_NUM_LEDS_CH1) {
|
||||
WS2812_LED_BUF_CH1[nr]=rgb_col;
|
||||
|
||||
if(refresh==1) WS2812_Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set all LEDs (R, G, B values). If refresh == 1, update LEDs, otherwise just update buffer (if several function calls are to be done before refresh)
|
||||
*/
|
||||
void WS2812_All_RGB(WS2812_RGB_t rgb_col, uint8_t refresh)
|
||||
{
|
||||
uint32_t n;
|
||||
|
||||
for(n=0;n<WS2812_NUM_LEDS_CH1;n++) {
|
||||
WS2812_LED_BUF_CH1[n]=rgb_col;
|
||||
}
|
||||
if(refresh==1) WS2812_Refresh();
|
||||
}
|
||||
|
|
@ -30,7 +30,11 @@
|
|||
#include "Globals.h"
|
||||
#include "extern.h"
|
||||
#include "sdram.h"
|
||||
#include "WS2812_Lib.h"
|
||||
#include "WS2812/WS2812.hpp"
|
||||
|
||||
//Setup
|
||||
#include "Setup/Dash/setupDash.h"
|
||||
#include "Setup/Field/setupField.h"
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
|
@ -61,9 +65,7 @@ DMA2D_HandleTypeDef hdma2d;
|
|||
LTDC_HandleTypeDef hltdc;
|
||||
|
||||
TIM_HandleTypeDef htim1;
|
||||
TIM_HandleTypeDef htim2;
|
||||
TIM_HandleTypeDef htim13;
|
||||
DMA_HandleTypeDef hdma_tim2_ch2_ch4;
|
||||
|
||||
SDRAM_HandleTypeDef hsdram1;
|
||||
|
||||
|
@ -106,7 +108,7 @@ const osThreadAttr_t ALERT_Task_attributes = {
|
|||
osThreadId_t RGB_TaskHandle;
|
||||
const osThreadAttr_t RGB_Task_attributes = {
|
||||
.name = "RGB_Task",
|
||||
.stack_size = 128 * 4,
|
||||
.stack_size = 512 * 4,
|
||||
.priority = (osPriority_t) osPriorityLow,
|
||||
};
|
||||
/* USER CODE BEGIN PV */
|
||||
|
@ -119,12 +121,14 @@ CAN_RxHeaderTypeDef RxHeader;
|
|||
uint8_t TxData[8];
|
||||
uint8_t RxData[8];
|
||||
|
||||
uint8_t uartTransmitBufferSize;
|
||||
uint8_t uartTransmitBuffer[128];
|
||||
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
void SystemClock_Config(void);
|
||||
static void MX_GPIO_Init(void);
|
||||
static void MX_DMA_Init(void);
|
||||
static void MX_LTDC_Init(void);
|
||||
static void MX_DMA2D_Init(void);
|
||||
static void MX_FMC_Init(void);
|
||||
|
@ -133,7 +137,6 @@ static void MX_TIM13_Init(void);
|
|||
static void MX_CAN1_Init(void);
|
||||
static void MX_ADC1_Init(void);
|
||||
static void MX_TIM1_Init(void);
|
||||
static void MX_TIM2_Init(void);
|
||||
void Start_START_Task(void *argument);
|
||||
void TouchGFX_Task(void *argument);
|
||||
void Start_LED_Task(void *argument);
|
||||
|
@ -176,7 +179,6 @@ int main(void)
|
|||
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_DMA_Init();
|
||||
MX_LTDC_Init();
|
||||
MX_DMA2D_Init();
|
||||
MX_FMC_Init();
|
||||
|
@ -185,18 +187,13 @@ int main(void)
|
|||
MX_CAN1_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_TIM1_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_TouchGFX_Init();
|
||||
/* Call PreOsInit function */
|
||||
MX_TouchGFX_PreOSInit();
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
||||
HAL_TIM_PWM_Start(&htim13, TIM_CHANNEL_1);
|
||||
|
||||
//BH1750_sensor = BH1750_init_dev_struct(&hi2c2, "BH1750 device", true);
|
||||
|
||||
//BH1750_init_dev(BH1750_sensor);
|
||||
|
||||
HAL_TIM_PWM_Start(&htim13, TIM_CHANNEL_1);
|
||||
initWS2812();
|
||||
|
||||
/* USER CODE END 2 */
|
||||
|
||||
|
@ -599,65 +596,6 @@ static void MX_TIM1_Init(void)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM2 Initialization Function
|
||||
* @param None
|
||||
* @retval None
|
||||
*/
|
||||
static void MX_TIM2_Init(void)
|
||||
{
|
||||
|
||||
/* USER CODE BEGIN TIM2_Init 0 */
|
||||
|
||||
/* USER CODE END TIM2_Init 0 */
|
||||
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
||||
TIM_MasterConfigTypeDef sMasterConfig = {0};
|
||||
TIM_OC_InitTypeDef sConfigOC = {0};
|
||||
|
||||
/* USER CODE BEGIN TIM2_Init 1 */
|
||||
|
||||
/* USER CODE END TIM2_Init 1 */
|
||||
htim2.Instance = TIM2;
|
||||
htim2.Init.Prescaler = 0;
|
||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim2.Init.Period = 210;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
||||
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
||||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 0;
|
||||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
||||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
||||
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
/* USER CODE BEGIN TIM2_Init 2 */
|
||||
|
||||
/* USER CODE END TIM2_Init 2 */
|
||||
HAL_TIM_MspPostInit(&htim2);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief TIM13 Initialization Function
|
||||
* @param None
|
||||
|
@ -704,22 +642,6 @@ static void MX_TIM13_Init(void)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable DMA controller clock
|
||||
*/
|
||||
static void MX_DMA_Init(void)
|
||||
{
|
||||
|
||||
/* DMA controller clock enable */
|
||||
__HAL_RCC_DMA1_CLK_ENABLE();
|
||||
|
||||
/* DMA interrupt init */
|
||||
/* DMA1_Stream6_IRQn interrupt configuration */
|
||||
HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0);
|
||||
HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn);
|
||||
|
||||
}
|
||||
|
||||
/* FMC initialization function */
|
||||
static void MX_FMC_Init(void)
|
||||
{
|
||||
|
@ -1024,8 +946,8 @@ void Start_CAN_Task(void *argument)
|
|||
Current_Status.PRES_UNIT = kPa;
|
||||
Current_Status.TEMP_UNIT = C;
|
||||
Current_Status.SPEED_UNIT = Kmh;
|
||||
HAL_GPIO_WritePin(CAN1_S0_GPIO_Port, CAN1_S0_Pin, SET);
|
||||
HAL_GPIO_WritePin(CAN2_S0_GPIO_Port, CAN2_S0_Pin, SET);
|
||||
//HAL_GPIO_WritePin(CAN1_S0_GPIO_Port, CAN1_S0_Pin, SET);
|
||||
//HAL_GPIO_WritePin(CAN2_S0_GPIO_Port, CAN2_S0_Pin, SET);
|
||||
|
||||
//HAL_GPIO_WritePin(LED_CAN1_GPIO_Port, LED_CAN1_Pin, SET);
|
||||
|
||||
|
@ -1255,28 +1177,50 @@ void Start_CAN_Task(void *argument)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(RxHeader.StdId == CAN_SETUP_ID)
|
||||
{
|
||||
switch (RxData[0]) {
|
||||
case 0x00: //READ START
|
||||
|
||||
break;
|
||||
case 0xA0: //SETUP DEVICE
|
||||
|
||||
break;
|
||||
case 0xB0: //SETUP FIELD
|
||||
//setAllFields(&RxData);
|
||||
break;
|
||||
case 0xC0: //SETUP CHANNEL
|
||||
|
||||
break;
|
||||
case 0xD0: //SETUP ERROR
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Current_Status.RPM_100 = mapInt(Current_Status.RPM, 0,
|
||||
LCD_RPM_HIGH, 0, 100);
|
||||
PROTECTION_RPM_HIGH, 0, 100);
|
||||
Current_Status.RPM_100 =
|
||||
Current_Status.RPM_100 >= 100 ?
|
||||
100 : Current_Status.RPM_100;
|
||||
Current_Status.RPM_180 = mapInt(Current_Status.RPM, 0,
|
||||
LCD_RPM_HIGH, 0, 180);
|
||||
PROTECTION_RPM_HIGH, 0, 180);
|
||||
Current_Status.RPM_180 =
|
||||
Current_Status.RPM_180 >= 180 ?
|
||||
810 : Current_Status.RPM_180;
|
||||
Current_Status.RPM_270 = mapInt(Current_Status.RPM, 0,
|
||||
LCD_RPM_HIGH, 0, 270);
|
||||
PROTECTION_RPM_HIGH, 0, 270);
|
||||
Current_Status.RPM_270 =
|
||||
Current_Status.RPM_270 >= 270 ?
|
||||
270 : Current_Status.RPM_270;
|
||||
Current_Status.RPM_240 = mapInt(Current_Status.RPM, 0,
|
||||
LCD_RPM_HIGH, 0, 240);
|
||||
PROTECTION_RPM_HIGH, 0, 240);
|
||||
Current_Status.RPM_240 =
|
||||
Current_Status.RPM_240 >= 240 ?
|
||||
240 : Current_Status.RPM_240;
|
||||
Current_Status.RPM_360 = mapInt(Current_Status.RPM, 0,
|
||||
LCD_RPM_HIGH, 0, 360);
|
||||
PROTECTION_RPM_HIGH, 0, 360);
|
||||
Current_Status.RPM_360 =
|
||||
Current_Status.RPM_360 >= 360 ?
|
||||
360 : Current_Status.RPM_360;
|
||||
|
@ -1585,16 +1529,18 @@ void Start_RGB_Task(void *argument)
|
|||
{
|
||||
/* USER CODE BEGIN Start_RGB_Task */
|
||||
|
||||
Current_Status.LED_BRIGHTNESS = LED_DEFAULT_BRIGHTNESS;
|
||||
|
||||
setWS2812Brightness(5);
|
||||
/* Infinite loop */
|
||||
for (;;) {
|
||||
Current_Status.ENGINE_PROTECTION = Current_Status.RPM >= PROTECTION_RPM_HIGH ? 1 : 0;
|
||||
|
||||
if (RGB_ENABLED) {
|
||||
//Current_Status.RPM = Current_Status.RPM >= PROTECTION_RPM_HIGH ? 0 : Current_Status.RPM;
|
||||
//Current_Status.RPM = Current_Status.RPM + 100;
|
||||
|
||||
WS2812_Clear(0);
|
||||
uint8_t RPMLED = LED_NUMBER;
|
||||
Current_Status.ENGINE_PROTECTION = Current_Status.RPM >= PROTECTION_RPM_HIGH ? 1 : 0;
|
||||
|
||||
|
||||
clearWS2812All();
|
||||
uint8_t RPMLED = WS2812_LED_N;
|
||||
|
||||
uint16_t lowRange = mapInt(Current_Status.RPM, PROTECTION_RPM_LOW, 0, RPMLED - PROTECTION_RPM_LED, 1);
|
||||
lowRange = lowRange > RPMLED - PROTECTION_RPM_LED ? RPMLED - PROTECTION_RPM_LED : lowRange;
|
||||
|
@ -1611,7 +1557,7 @@ void Start_RGB_Task(void *argument)
|
|||
color.green = 255;
|
||||
color.blue = 0;
|
||||
}
|
||||
WS2812_One_RGB((RPMLED - i) + (LED_NUMBER - RPMLED), color, 0);
|
||||
setWS2812One((RPMLED - i) + (WS2812_LED_N - RPMLED), color);
|
||||
}
|
||||
|
||||
if (Current_Status.RPM > PROTECTION_RPM_LOW) {
|
||||
|
@ -1622,10 +1568,10 @@ void Start_RGB_Task(void *argument)
|
|||
color.green = 0;
|
||||
color.blue = 0;
|
||||
|
||||
WS2812_One_RGB((PROTECTION_RPM_LED - i) + (LED_NUMBER - RPMLED), color, 0);
|
||||
setWS2812One((PROTECTION_RPM_LED - i) + (WS2812_LED_N - RPMLED), color);
|
||||
}
|
||||
|
||||
WS2812_Refresh();
|
||||
updateWS2812();
|
||||
osDelay(50);
|
||||
|
||||
for (int i = 1; i <= highRange; i++) {
|
||||
|
@ -1634,11 +1580,12 @@ void Start_RGB_Task(void *argument)
|
|||
color.green = 0;
|
||||
color.blue = 0;
|
||||
|
||||
WS2812_One_RGB((PROTECTION_RPM_LED - i) + (LED_NUMBER - RPMLED), color, 0);
|
||||
setWS2812One((PROTECTION_RPM_LED - i) + (WS2812_LED_N - RPMLED), color);
|
||||
}
|
||||
}
|
||||
|
||||
WS2812_Refresh();
|
||||
|
||||
updateWS2812();
|
||||
osDelay(100);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
extern DMA_HandleTypeDef hdma_tim2_ch2_ch4;
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN TD */
|
||||
|
@ -60,7 +59,7 @@ extern DMA_HandleTypeDef hdma_tim2_ch2_ch4;
|
|||
/* USER CODE END 0 */
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
/**
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void)
|
||||
|
@ -510,7 +509,6 @@ void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc)
|
|||
*/
|
||||
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(htim_base->Instance==TIM1)
|
||||
{
|
||||
/* USER CODE BEGIN TIM1_MspInit 0 */
|
||||
|
@ -522,54 +520,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
|||
|
||||
/* USER CODE END TIM1_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 0 */
|
||||
/* Peripheral clock enable */
|
||||
__HAL_RCC_TIM2_CLK_ENABLE();
|
||||
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**TIM2 GPIO Configuration
|
||||
PA2 ------> TIM2_CH3
|
||||
*/
|
||||
GPIO_InitStruct.Pin = LED_TIM2_CH3_PA2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||
HAL_GPIO_Init(LED_TIM2_CH3_PA2_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/* TIM2 DMA Init */
|
||||
/* TIM2_CH2_CH4 Init */
|
||||
hdma_tim2_ch2_ch4.Instance = DMA1_Stream6;
|
||||
hdma_tim2_ch2_ch4.Init.Channel = DMA_CHANNEL_3;
|
||||
hdma_tim2_ch2_ch4.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
||||
hdma_tim2_ch2_ch4.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
hdma_tim2_ch2_ch4.Init.MemInc = DMA_MINC_ENABLE;
|
||||
hdma_tim2_ch2_ch4.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
||||
hdma_tim2_ch2_ch4.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||
hdma_tim2_ch2_ch4.Init.Mode = DMA_NORMAL;
|
||||
hdma_tim2_ch2_ch4.Init.Priority = DMA_PRIORITY_LOW;
|
||||
hdma_tim2_ch2_ch4.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
|
||||
hdma_tim2_ch2_ch4.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
|
||||
hdma_tim2_ch2_ch4.Init.MemBurst = DMA_MBURST_SINGLE;
|
||||
hdma_tim2_ch2_ch4.Init.PeriphBurst = DMA_PBURST_SINGLE;
|
||||
if (HAL_DMA_Init(&hdma_tim2_ch2_ch4) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
/* Several peripheral DMA handle pointers point to the same DMA handle.
|
||||
Be aware that there is only one stream to perform all the requested DMAs. */
|
||||
__HAL_LINKDMA(htim_base,hdma[TIM_DMA_ID_CC2],hdma_tim2_ch2_ch4);
|
||||
__HAL_LINKDMA(htim_base,hdma[TIM_DMA_ID_CC4],hdma_tim2_ch2_ch4);
|
||||
|
||||
/* USER CODE BEGIN TIM2_MspInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM13)
|
||||
{
|
||||
/* USER CODE BEGIN TIM13_MspInit 0 */
|
||||
|
@ -587,27 +537,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
|||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(htim->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 0 */
|
||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||
/**TIM2 GPIO Configuration
|
||||
PA1 ------> TIM2_CH2
|
||||
*/
|
||||
GPIO_InitStruct.Pin = LED_TIM2_CH2_PA1_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||
HAL_GPIO_Init(LED_TIM2_CH2_PA1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/* USER CODE BEGIN TIM2_MspPostInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspPostInit 1 */
|
||||
}
|
||||
else if(htim->Instance==TIM13)
|
||||
if(htim->Instance==TIM13)
|
||||
{
|
||||
/* USER CODE BEGIN TIM13_MspPostInit 0 */
|
||||
|
||||
|
@ -649,27 +579,6 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
|||
|
||||
/* USER CODE END TIM1_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM2)
|
||||
{
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 0 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 0 */
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_TIM2_CLK_DISABLE();
|
||||
|
||||
/**TIM2 GPIO Configuration
|
||||
PA1 ------> TIM2_CH2
|
||||
PA2 ------> TIM2_CH3
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOA, LED_TIM2_CH2_PA1_Pin|LED_TIM2_CH3_PA2_Pin);
|
||||
|
||||
/* TIM2 DMA DeInit */
|
||||
HAL_DMA_DeInit(htim_base->hdma[TIM_DMA_ID_CC2]);
|
||||
HAL_DMA_DeInit(htim_base->hdma[TIM_DMA_ID_CC4]);
|
||||
/* USER CODE BEGIN TIM2_MspDeInit 1 */
|
||||
|
||||
/* USER CODE END TIM2_MspDeInit 1 */
|
||||
}
|
||||
else if(htim_base->Instance==TIM13)
|
||||
{
|
||||
/* USER CODE BEGIN TIM13_MspDeInit 0 */
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#include "stm32f4xx_it.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "WS2812_Lib.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
@ -61,7 +60,6 @@ extern CAN_HandleTypeDef hcan1;
|
|||
extern DMA2D_HandleTypeDef hdma2d;
|
||||
extern SDRAM_HandleTypeDef hsdram1;
|
||||
extern LTDC_HandleTypeDef hltdc;
|
||||
extern DMA_HandleTypeDef hdma_tim2_ch2_ch4;
|
||||
extern TIM_HandleTypeDef htim6;
|
||||
|
||||
/* USER CODE BEGIN EV */
|
||||
|
@ -166,20 +164,6 @@ void DebugMon_Handler(void)
|
|||
/* please refer to the startup file (startup_stm32f4xx.s). */
|
||||
/******************************************************************************/
|
||||
|
||||
/**
|
||||
* @brief This function handles DMA1 stream6 global interrupt.
|
||||
*/
|
||||
void DMA1_Stream6_IRQHandler(void)
|
||||
{
|
||||
/* USER CODE BEGIN DMA1_Stream6_IRQn 0 */
|
||||
DMA_Callback();
|
||||
/* USER CODE END DMA1_Stream6_IRQn 0 */
|
||||
HAL_DMA_IRQHandler(&hdma_tim2_ch2_ch4);
|
||||
/* USER CODE BEGIN DMA1_Stream6_IRQn 1 */
|
||||
|
||||
/* USER CODE END DMA1_Stream6_IRQn 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function handles CAN1 RX0 interrupts.
|
||||
*/
|
||||
|
|
|
@ -20,21 +20,6 @@ DMA2D.IPParameters=ColorMode,Mode,InputColorModeForeground,InputColorModeBackgro
|
|||
DMA2D.InputColorModeBackground=DMA2D_INPUT_RGB565
|
||||
DMA2D.InputColorModeForeground=DMA2D_INPUT_RGB565
|
||||
DMA2D.Mode=DMA2D_M2M_BLEND
|
||||
Dma.Request0=TIM2_CH2/CH4
|
||||
Dma.RequestsNb=1
|
||||
Dma.TIM2_CH2/CH4.0.Direction=DMA_MEMORY_TO_PERIPH
|
||||
Dma.TIM2_CH2/CH4.0.FIFOMode=DMA_FIFOMODE_ENABLE
|
||||
Dma.TIM2_CH2/CH4.0.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL
|
||||
Dma.TIM2_CH2/CH4.0.Instance=DMA1_Stream6
|
||||
Dma.TIM2_CH2/CH4.0.MemBurst=DMA_MBURST_SINGLE
|
||||
Dma.TIM2_CH2/CH4.0.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
||||
Dma.TIM2_CH2/CH4.0.MemInc=DMA_MINC_ENABLE
|
||||
Dma.TIM2_CH2/CH4.0.Mode=DMA_NORMAL
|
||||
Dma.TIM2_CH2/CH4.0.PeriphBurst=DMA_PBURST_SINGLE
|
||||
Dma.TIM2_CH2/CH4.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
||||
Dma.TIM2_CH2/CH4.0.PeriphInc=DMA_PINC_DISABLE
|
||||
Dma.TIM2_CH2/CH4.0.Priority=DMA_PRIORITY_LOW
|
||||
Dma.TIM2_CH2/CH4.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,FIFOThreshold,MemBurst,PeriphBurst
|
||||
FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_3
|
||||
FMC.ColumnBitsNumber1=FMC_SDRAM_COLUMN_BITS_NUM_9
|
||||
FMC.ExitSelfRefreshDelay1=8
|
||||
|
@ -51,12 +36,12 @@ FMC.SelfRefreshTime1=6
|
|||
FMC.WriteRecoveryTime1=5
|
||||
FREERTOS.FootprintOK=true
|
||||
FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_NEWLIB_REENTRANT,configPRIO_BITS,configASSERT( x ),configTIMER_QUEUE_LENGTH,configMINIMAL_STACK_SIZE,configTOTAL_HEAP_SIZE
|
||||
FREERTOS.Tasks01=START_Task,24,128,Start_START_Task,Default,NULL,Dynamic,NULL,NULL;TouchGFXTask,40,2048,TouchGFX_Task,As weak,NULL,Dynamic,NULL,NULL;LED_Task,8,128,Start_LED_Task,Default,NULL,Dynamic,NULL,NULL;CAN_Task,8,128,Start_CAN_Task,Default,NULL,Dynamic,NULL,NULL;ALERT_Task,8,128,Start_ALERT_Task,Default,NULL,Dynamic,NULL,NULL;RGB_Task,8,128,Start_RGB_Task,Default,NULL,Dynamic,NULL,NULL
|
||||
FREERTOS.Tasks01=START_Task,24,128,Start_START_Task,Default,NULL,Dynamic,NULL,NULL;TouchGFXTask,40,2048,TouchGFX_Task,As weak,NULL,Dynamic,NULL,NULL;LED_Task,8,128,Start_LED_Task,Default,NULL,Dynamic,NULL,NULL;CAN_Task,8,128,Start_CAN_Task,Default,NULL,Dynamic,NULL,NULL;ALERT_Task,8,128,Start_ALERT_Task,Default,NULL,Dynamic,NULL,NULL;RGB_Task,8,512,Start_RGB_Task,Default,NULL,Dynamic,NULL,NULL
|
||||
FREERTOS.configASSERT(\ x\ )=if ((x) \=\= 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
|
||||
FREERTOS.configMINIMAL_STACK_SIZE=64
|
||||
FREERTOS.configPRIO_BITS=4
|
||||
FREERTOS.configTIMER_QUEUE_LENGTH=10
|
||||
FREERTOS.configTOTAL_HEAP_SIZE=28360
|
||||
FREERTOS.configTOTAL_HEAP_SIZE=128360
|
||||
FREERTOS.configUSE_NEWLIB_REENTRANT=1
|
||||
File.Version=6
|
||||
GPIO.groupedBy=Show All
|
||||
|
@ -102,49 +87,44 @@ Mcu.CPN=STM32F429IIT6
|
|||
Mcu.Family=STM32F4
|
||||
Mcu.IP0=ADC1
|
||||
Mcu.IP1=CAN1
|
||||
Mcu.IP10=SYS
|
||||
Mcu.IP11=TIM1
|
||||
Mcu.IP12=TIM2
|
||||
Mcu.IP13=TIM13
|
||||
Mcu.IP14=USB_DEVICE
|
||||
Mcu.IP15=USB_OTG_FS
|
||||
Mcu.IP10=TIM1
|
||||
Mcu.IP11=TIM13
|
||||
Mcu.IP12=USB_DEVICE
|
||||
Mcu.IP13=USB_OTG_FS
|
||||
Mcu.IP2=CRC
|
||||
Mcu.IP3=DMA
|
||||
Mcu.IP4=DMA2D
|
||||
Mcu.IP5=FMC
|
||||
Mcu.IP6=FREERTOS
|
||||
Mcu.IP7=LTDC
|
||||
Mcu.IP8=NVIC
|
||||
Mcu.IP9=RCC
|
||||
Mcu.IPNb=16
|
||||
Mcu.IP3=DMA2D
|
||||
Mcu.IP4=FMC
|
||||
Mcu.IP5=FREERTOS
|
||||
Mcu.IP6=LTDC
|
||||
Mcu.IP7=NVIC
|
||||
Mcu.IP8=RCC
|
||||
Mcu.IP9=SYS
|
||||
Mcu.IPNb=14
|
||||
Mcu.Name=STM32F429IITx
|
||||
Mcu.Package=LQFP176
|
||||
Mcu.Pin0=PE2
|
||||
Mcu.Pin1=PE3
|
||||
Mcu.Pin10=PF2
|
||||
Mcu.Pin100=PB3
|
||||
Mcu.Pin101=PB4
|
||||
Mcu.Pin102=PB5
|
||||
Mcu.Pin103=PB7
|
||||
Mcu.Pin104=PB8
|
||||
Mcu.Pin105=PB9
|
||||
Mcu.Pin106=PE0
|
||||
Mcu.Pin107=PE1
|
||||
Mcu.Pin108=PI4
|
||||
Mcu.Pin109=PI5
|
||||
Mcu.Pin100=PB5
|
||||
Mcu.Pin101=PB7
|
||||
Mcu.Pin102=PB8
|
||||
Mcu.Pin103=PB9
|
||||
Mcu.Pin104=PE0
|
||||
Mcu.Pin105=PE1
|
||||
Mcu.Pin106=PI4
|
||||
Mcu.Pin107=PI5
|
||||
Mcu.Pin108=PI6
|
||||
Mcu.Pin109=PI7
|
||||
Mcu.Pin11=PF3
|
||||
Mcu.Pin110=PI6
|
||||
Mcu.Pin111=PI7
|
||||
Mcu.Pin112=VP_CRC_VS_CRC
|
||||
Mcu.Pin113=VP_DMA2D_VS_DMA2D
|
||||
Mcu.Pin114=VP_FREERTOS_VS_CMSIS_V2
|
||||
Mcu.Pin115=VP_SYS_VS_tim6
|
||||
Mcu.Pin116=VP_TIM1_VS_ClockSourceINT
|
||||
Mcu.Pin117=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin118=VP_TIM13_VS_ClockSourceINT
|
||||
Mcu.Pin119=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
Mcu.Pin110=VP_CRC_VS_CRC
|
||||
Mcu.Pin111=VP_DMA2D_VS_DMA2D
|
||||
Mcu.Pin112=VP_FREERTOS_VS_CMSIS_V2
|
||||
Mcu.Pin113=VP_SYS_VS_tim6
|
||||
Mcu.Pin114=VP_TIM1_VS_ClockSourceINT
|
||||
Mcu.Pin115=VP_TIM13_VS_ClockSourceINT
|
||||
Mcu.Pin116=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
Mcu.Pin117=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.1
|
||||
Mcu.Pin12=PF4
|
||||
Mcu.Pin120=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.1
|
||||
Mcu.Pin13=PF5
|
||||
Mcu.Pin14=PF6
|
||||
Mcu.Pin15=PF7
|
||||
|
@ -157,90 +137,90 @@ Mcu.Pin20=PC0
|
|||
Mcu.Pin21=PC1
|
||||
Mcu.Pin22=PC2
|
||||
Mcu.Pin23=PA0/WKUP
|
||||
Mcu.Pin24=PA1
|
||||
Mcu.Pin25=PA2
|
||||
Mcu.Pin26=PH4
|
||||
Mcu.Pin27=PH5
|
||||
Mcu.Pin28=PB1
|
||||
Mcu.Pin29=PB2/BOOT1
|
||||
Mcu.Pin24=PH4
|
||||
Mcu.Pin25=PH5
|
||||
Mcu.Pin26=PB1
|
||||
Mcu.Pin27=PB2/BOOT1
|
||||
Mcu.Pin28=PF11
|
||||
Mcu.Pin29=PF12
|
||||
Mcu.Pin3=PE5
|
||||
Mcu.Pin30=PF11
|
||||
Mcu.Pin31=PF12
|
||||
Mcu.Pin32=PF13
|
||||
Mcu.Pin33=PF14
|
||||
Mcu.Pin34=PF15
|
||||
Mcu.Pin35=PG0
|
||||
Mcu.Pin36=PG1
|
||||
Mcu.Pin37=PE7
|
||||
Mcu.Pin38=PE8
|
||||
Mcu.Pin39=PE9
|
||||
Mcu.Pin30=PF13
|
||||
Mcu.Pin31=PF14
|
||||
Mcu.Pin32=PF15
|
||||
Mcu.Pin33=PG0
|
||||
Mcu.Pin34=PG1
|
||||
Mcu.Pin35=PE7
|
||||
Mcu.Pin36=PE8
|
||||
Mcu.Pin37=PE9
|
||||
Mcu.Pin38=PE10
|
||||
Mcu.Pin39=PE11
|
||||
Mcu.Pin4=PC13
|
||||
Mcu.Pin40=PE10
|
||||
Mcu.Pin41=PE11
|
||||
Mcu.Pin42=PE12
|
||||
Mcu.Pin43=PE13
|
||||
Mcu.Pin44=PE14
|
||||
Mcu.Pin45=PE15
|
||||
Mcu.Pin46=PB10
|
||||
Mcu.Pin47=PB11
|
||||
Mcu.Pin48=PH6
|
||||
Mcu.Pin49=PH7
|
||||
Mcu.Pin40=PE12
|
||||
Mcu.Pin41=PE13
|
||||
Mcu.Pin42=PE14
|
||||
Mcu.Pin43=PE15
|
||||
Mcu.Pin44=PB10
|
||||
Mcu.Pin45=PB11
|
||||
Mcu.Pin46=PH6
|
||||
Mcu.Pin47=PH7
|
||||
Mcu.Pin48=PH8
|
||||
Mcu.Pin49=PH9
|
||||
Mcu.Pin5=PI9
|
||||
Mcu.Pin50=PH8
|
||||
Mcu.Pin51=PH9
|
||||
Mcu.Pin52=PH10
|
||||
Mcu.Pin53=PH11
|
||||
Mcu.Pin54=PB12
|
||||
Mcu.Pin55=PB13
|
||||
Mcu.Pin56=PD8
|
||||
Mcu.Pin57=PD9
|
||||
Mcu.Pin58=PD10
|
||||
Mcu.Pin59=PD14
|
||||
Mcu.Pin50=PH10
|
||||
Mcu.Pin51=PH11
|
||||
Mcu.Pin52=PB12
|
||||
Mcu.Pin53=PB13
|
||||
Mcu.Pin54=PD8
|
||||
Mcu.Pin55=PD9
|
||||
Mcu.Pin56=PD10
|
||||
Mcu.Pin57=PD14
|
||||
Mcu.Pin58=PD15
|
||||
Mcu.Pin59=PG2
|
||||
Mcu.Pin6=PI10
|
||||
Mcu.Pin60=PD15
|
||||
Mcu.Pin61=PG2
|
||||
Mcu.Pin62=PG4
|
||||
Mcu.Pin63=PG5
|
||||
Mcu.Pin64=PG6
|
||||
Mcu.Pin65=PG7
|
||||
Mcu.Pin66=PG8
|
||||
Mcu.Pin67=PC6
|
||||
Mcu.Pin68=PC7
|
||||
Mcu.Pin69=PC8
|
||||
Mcu.Pin60=PG4
|
||||
Mcu.Pin61=PG5
|
||||
Mcu.Pin62=PG6
|
||||
Mcu.Pin63=PG7
|
||||
Mcu.Pin64=PG8
|
||||
Mcu.Pin65=PC6
|
||||
Mcu.Pin66=PC7
|
||||
Mcu.Pin67=PC8
|
||||
Mcu.Pin68=PC9
|
||||
Mcu.Pin69=PA8
|
||||
Mcu.Pin7=PI11
|
||||
Mcu.Pin70=PC9
|
||||
Mcu.Pin71=PA8
|
||||
Mcu.Pin72=PA11
|
||||
Mcu.Pin73=PA12
|
||||
Mcu.Pin74=PA13
|
||||
Mcu.Pin75=PH13
|
||||
Mcu.Pin76=PH14
|
||||
Mcu.Pin77=PH15
|
||||
Mcu.Pin78=PI0
|
||||
Mcu.Pin79=PI1
|
||||
Mcu.Pin70=PA11
|
||||
Mcu.Pin71=PA12
|
||||
Mcu.Pin72=PA13
|
||||
Mcu.Pin73=PH13
|
||||
Mcu.Pin74=PH14
|
||||
Mcu.Pin75=PH15
|
||||
Mcu.Pin76=PI0
|
||||
Mcu.Pin77=PI1
|
||||
Mcu.Pin78=PI2
|
||||
Mcu.Pin79=PI3
|
||||
Mcu.Pin8=PF0
|
||||
Mcu.Pin80=PI2
|
||||
Mcu.Pin81=PI3
|
||||
Mcu.Pin82=PA14
|
||||
Mcu.Pin83=PC10
|
||||
Mcu.Pin84=PC11
|
||||
Mcu.Pin85=PC12
|
||||
Mcu.Pin86=PD0
|
||||
Mcu.Pin87=PD1
|
||||
Mcu.Pin88=PD2
|
||||
Mcu.Pin89=PD3
|
||||
Mcu.Pin80=PA14
|
||||
Mcu.Pin81=PC10
|
||||
Mcu.Pin82=PC11
|
||||
Mcu.Pin83=PC12
|
||||
Mcu.Pin84=PD0
|
||||
Mcu.Pin85=PD1
|
||||
Mcu.Pin86=PD2
|
||||
Mcu.Pin87=PD3
|
||||
Mcu.Pin88=PD4
|
||||
Mcu.Pin89=PD6
|
||||
Mcu.Pin9=PF1
|
||||
Mcu.Pin90=PD4
|
||||
Mcu.Pin91=PD6
|
||||
Mcu.Pin92=PD7
|
||||
Mcu.Pin93=PG9
|
||||
Mcu.Pin94=PG10
|
||||
Mcu.Pin95=PG11
|
||||
Mcu.Pin96=PG12
|
||||
Mcu.Pin97=PG13
|
||||
Mcu.Pin98=PG14
|
||||
Mcu.Pin99=PG15
|
||||
Mcu.PinsNb=121
|
||||
Mcu.Pin90=PD7
|
||||
Mcu.Pin91=PG9
|
||||
Mcu.Pin92=PG10
|
||||
Mcu.Pin93=PG11
|
||||
Mcu.Pin94=PG12
|
||||
Mcu.Pin95=PG13
|
||||
Mcu.Pin96=PG14
|
||||
Mcu.Pin97=PG15
|
||||
Mcu.Pin98=PB3
|
||||
Mcu.Pin99=PB4
|
||||
Mcu.PinsNb=118
|
||||
Mcu.ThirdParty0=STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1
|
||||
Mcu.ThirdPartyNb=1
|
||||
Mcu.UserConstants=
|
||||
|
@ -249,7 +229,6 @@ MxCube.Version=6.6.1
|
|||
MxDb.Version=DB.6.0.60
|
||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||
NVIC.CAN1_RX0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
|
||||
NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
|
||||
NVIC.DMA2D_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
|
||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
|
||||
NVIC.FMC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
|
||||
|
@ -274,11 +253,6 @@ PA0/WKUP.GPIOParameters=GPIO_Label
|
|||
PA0/WKUP.GPIO_Label=BRV_CPU
|
||||
PA0/WKUP.Locked=true
|
||||
PA0/WKUP.Signal=ADCx_IN0
|
||||
PA1.GPIOParameters=GPIO_Speed,GPIO_Label
|
||||
PA1.GPIO_Label=LED_TIM2_CH2_PA1
|
||||
PA1.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
|
||||
PA1.Locked=true
|
||||
PA1.Signal=S_TIM2_CH2
|
||||
PA11.GPIOParameters=GPIO_Label
|
||||
PA11.GPIO_Label=USB_OTG-
|
||||
PA11.Locked=true
|
||||
|
@ -299,11 +273,6 @@ PA14.GPIO_Label=SWCLK
|
|||
PA14.Locked=true
|
||||
PA14.Mode=Serial_Wire
|
||||
PA14.Signal=SYS_JTCK-SWCLK
|
||||
PA2.GPIOParameters=GPIO_Speed,GPIO_Label
|
||||
PA2.GPIO_Label=LED_TIM2_CH3_PA2
|
||||
PA2.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH
|
||||
PA2.Locked=true
|
||||
PA2.Signal=S_TIM2_CH3
|
||||
PA8.Locked=true
|
||||
PA8.Signal=GPIO_Input
|
||||
PB1.GPIOParameters=GPIO_Speed,GPIO_PuPd,GPIO_Label,GPIO_Mode
|
||||
|
@ -816,7 +785,7 @@ ProjectManager.StackSize=0x800
|
|||
ProjectManager.TargetToolchain=STM32CubeIDE
|
||||
ProjectManager.ToolChainLocation=
|
||||
ProjectManager.UnderRoot=true
|
||||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_LTDC_Init-LTDC-false-HAL-true,5-MX_DMA2D_Init-DMA2D-false-HAL-true,6-MX_FMC_Init-FMC-false-HAL-true,7-MX_CRC_Init-CRC-false-HAL-true,8-MX_TIM13_Init-TIM13-false-HAL-true,9-MX_CAN1_Init-CAN1-false-HAL-true,10-MX_ADC1_Init-ADC1-false-HAL-true,11-MX_TIM1_Init-TIM1-false-HAL-true,12-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,13-MX_TIM2_Init-TIM2-false-HAL-true,14-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1-false-HAL-false,15-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1-false-HAL-false
|
||||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_LTDC_Init-LTDC-false-HAL-true,4-MX_DMA2D_Init-DMA2D-false-HAL-true,5-MX_FMC_Init-FMC-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_TIM13_Init-TIM13-false-HAL-true,8-MX_CAN1_Init-CAN1-false-HAL-true,9-MX_ADC1_Init-ADC1-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,12-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1-false-HAL-false,13-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1-false-HAL-false
|
||||
RCC.48MHZClocksFreq_Value=48000000
|
||||
RCC.AHBFreq_Value=168000000
|
||||
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
||||
|
@ -950,10 +919,6 @@ SH.FMC_SDNWE.0=FMC_SDNWE,13b-sda1
|
|||
SH.FMC_SDNWE.ConfNb=1
|
||||
SH.S_TIM13_CH1.0=TIM13_CH1,PWM Generation1 CH1
|
||||
SH.S_TIM13_CH1.ConfNb=1
|
||||
SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2
|
||||
SH.S_TIM2_CH2.ConfNb=1
|
||||
SH.S_TIM2_CH3.0=TIM2_CH3
|
||||
SH.S_TIM2_CH3.ConfNb=1
|
||||
STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1.ApplicationCcGraphicsJjApplication=TouchGFXOoGenerator
|
||||
STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1.GraphicsJjApplication_Checked=true
|
||||
STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1.IPParameters=tgfx_display_interface,tgfx_vsync,tgfx_hardware_accelerator,tgfx_buffering_strategy,tgfx_location,tgfx_address1,tgfx_address2,ApplicationCcGraphicsJjApplication
|
||||
|
@ -974,10 +939,6 @@ TIM13.Channel=TIM_CHANNEL_1
|
|||
TIM13.IPParameters=Prescaler,Period,AutoReloadPreload,Channel
|
||||
TIM13.Period=1000-1
|
||||
TIM13.Prescaler=90-1
|
||||
TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
|
||||
TIM2.IPParameters=Channel-PWM Generation2 CH2,Period,OCFastMode_PWM-PWM Generation2 CH2
|
||||
TIM2.OCFastMode_PWM-PWM\ Generation2\ CH2=TIM_OCFAST_DISABLE
|
||||
TIM2.Period=210
|
||||
USB_DEVICE.CLASS_NAME_FS=CDC
|
||||
USB_DEVICE.IPParameters=VirtualModeFS,CLASS_NAME_FS,VirtualMode-CDC_FS,PID_CDC_FS,PRODUCT_STRING_CDC_FS
|
||||
USB_DEVICE.PID_CDC_FS=57701
|
||||
|
@ -1000,8 +961,6 @@ VP_TIM13_VS_ClockSourceINT.Mode=Enable_Timer
|
|||
VP_TIM13_VS_ClockSourceINT.Signal=TIM13_VS_ClockSourceINT
|
||||
VP_TIM1_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
|
||||
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS
|
||||
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
board=custom
|
||||
|
|
Loading…
Reference in New Issue