ws2812 rgb driver
This commit is contained in:
parent
e477f9694e
commit
da60f919ac
|
@ -24,7 +24,7 @@
|
|||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1645855301" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.583575672" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.299661417" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F429IITx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../USB_DEVICE/Target | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../TouchGFX/target/generated | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F | ../Drivers/CMSIS/Include | ../Core/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc | ../USB_DEVICE/App | ../TouchGFX/App | ../TouchGFX/target || || || USE_HAL_DRIVER | STM32F429xx || || Drivers | TouchGFX | Core/Startup | Middlewares | Core | USB_DEVICE || || || ${workspace_loc:/${ProjName}/STM32F429IITX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1562523366" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="120" valueType="string"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1562523366" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="168" valueType="string"/>
|
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1346822476" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||
<builder buildPath="${workspace_loc:/429IG_LCD}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.205742149" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1242849919" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
||||
|
@ -167,7 +167,7 @@
|
|||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1064435165" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.239568253" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.297494156" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F429IITx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../USB_DEVICE/Target | ../Drivers/STM32F4xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F4xx/Include | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc | ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy | ../TouchGFX/target/generated | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F | ../Drivers/CMSIS/Include | ../Core/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc | ../USB_DEVICE/App | ../TouchGFX/App | ../TouchGFX/target || || || USE_HAL_DRIVER | STM32F429xx || || Drivers | TouchGFX | Core/Startup | Middlewares | Core | USB_DEVICE || || || ${workspace_loc:/${ProjName}/STM32F429IITX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.929872597" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="120" valueType="string"/>
|
||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.929872597" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="168" valueType="string"/>
|
||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1225329587" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||
<builder buildPath="${workspace_loc:/429IG_LCD}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1637861446" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1093854374" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
||||
|
|
|
@ -15,7 +15,7 @@ extern "C" {
|
|||
|
||||
|
||||
#define BH1750_ENABLED 0
|
||||
#define GPS_ENABLED 1
|
||||
#define GPS_ENABLED 0
|
||||
#define CAN_ENABLED 1
|
||||
#define RGB_ENABLED 1
|
||||
#define UART_ENABLED 0
|
||||
|
@ -24,7 +24,7 @@ extern "C" {
|
|||
#define DEMO 0
|
||||
|
||||
#define LED_NUMBER 24
|
||||
#define LED_DEFAULT_BRIGHTNESS 2
|
||||
#define LED_DEFAULT_BRIGHTNESS 50
|
||||
|
||||
#define LCD_DEFAULT_BRIGHTNESS 400
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
#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
|
||||
|
||||
|
|
@ -52,6 +52,7 @@ 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,126 @@
|
|||
/**
|
||||
* 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,6 +30,7 @@
|
|||
#include "Globals.h"
|
||||
#include "extern.h"
|
||||
#include "sdram.h"
|
||||
#include "WS2812_Lib.h"
|
||||
|
||||
/* USER CODE END Includes */
|
||||
|
||||
|
@ -60,7 +61,9 @@ DMA2D_HandleTypeDef hdma2d;
|
|||
LTDC_HandleTypeDef hltdc;
|
||||
|
||||
TIM_HandleTypeDef htim1;
|
||||
TIM_HandleTypeDef htim2;
|
||||
TIM_HandleTypeDef htim13;
|
||||
DMA_HandleTypeDef hdma_tim2_ch2_ch4;
|
||||
|
||||
SDRAM_HandleTypeDef hsdram1;
|
||||
|
||||
|
@ -76,7 +79,7 @@ osThreadId_t TouchGFXTaskHandle;
|
|||
const osThreadAttr_t TouchGFXTask_attributes = {
|
||||
.name = "TouchGFXTask",
|
||||
.stack_size = 2048 * 4,
|
||||
.priority = (osPriority_t) osPriorityLow,
|
||||
.priority = (osPriority_t) osPriorityHigh,
|
||||
};
|
||||
/* Definitions for LED_Task */
|
||||
osThreadId_t LED_TaskHandle;
|
||||
|
@ -99,6 +102,13 @@ const osThreadAttr_t ALERT_Task_attributes = {
|
|||
.stack_size = 128 * 4,
|
||||
.priority = (osPriority_t) osPriorityLow,
|
||||
};
|
||||
/* Definitions for RGB_Task */
|
||||
osThreadId_t RGB_TaskHandle;
|
||||
const osThreadAttr_t RGB_Task_attributes = {
|
||||
.name = "RGB_Task",
|
||||
.stack_size = 128 * 4,
|
||||
.priority = (osPriority_t) osPriorityLow,
|
||||
};
|
||||
/* USER CODE BEGIN PV */
|
||||
FMC_SDRAM_CommandTypeDef command;
|
||||
|
||||
|
@ -114,6 +124,7 @@ uint8_t RxData[8];
|
|||
/* 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);
|
||||
|
@ -122,11 +133,13 @@ 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);
|
||||
void Start_CAN_Task(void *argument);
|
||||
void Start_ALERT_Task(void *argument);
|
||||
void Start_RGB_Task(void *argument);
|
||||
|
||||
/* USER CODE BEGIN PFP */
|
||||
|
||||
|
@ -163,6 +176,7 @@ int main(void)
|
|||
|
||||
/* Initialize all configured peripherals */
|
||||
MX_GPIO_Init();
|
||||
MX_DMA_Init();
|
||||
MX_LTDC_Init();
|
||||
MX_DMA2D_Init();
|
||||
MX_FMC_Init();
|
||||
|
@ -171,6 +185,7 @@ int main(void)
|
|||
MX_CAN1_Init();
|
||||
MX_ADC1_Init();
|
||||
MX_TIM1_Init();
|
||||
MX_TIM2_Init();
|
||||
MX_TouchGFX_Init();
|
||||
/* Call PreOsInit function */
|
||||
MX_TouchGFX_PreOSInit();
|
||||
|
@ -220,6 +235,9 @@ int main(void)
|
|||
/* creation of ALERT_Task */
|
||||
ALERT_TaskHandle = osThreadNew(Start_ALERT_Task, NULL, &ALERT_Task_attributes);
|
||||
|
||||
/* creation of RGB_Task */
|
||||
RGB_TaskHandle = osThreadNew(Start_RGB_Task, NULL, &RGB_Task_attributes);
|
||||
|
||||
/* USER CODE BEGIN RTOS_THREADS */
|
||||
/* add threads, ... */
|
||||
/* USER CODE END RTOS_THREADS */
|
||||
|
@ -255,7 +273,7 @@ void SystemClock_Config(void)
|
|||
/** Configure the main internal regulator output voltage
|
||||
*/
|
||||
__HAL_RCC_PWR_CLK_ENABLE();
|
||||
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
|
||||
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
|
||||
|
||||
/** Initializes the RCC Oscillators according to the specified parameters
|
||||
* in the RCC_OscInitTypeDef structure.
|
||||
|
@ -265,9 +283,9 @@ void SystemClock_Config(void)
|
|||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
||||
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
|
||||
RCC_OscInitStruct.PLL.PLLM = 6;
|
||||
RCC_OscInitStruct.PLL.PLLN = 120;
|
||||
RCC_OscInitStruct.PLL.PLLN = 168;
|
||||
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
|
||||
RCC_OscInitStruct.PLL.PLLQ = 5;
|
||||
RCC_OscInitStruct.PLL.PLLQ = 7;
|
||||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
|
@ -282,7 +300,7 @@ void SystemClock_Config(void)
|
|||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
|
||||
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
|
||||
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
|
||||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
|
||||
{
|
||||
Error_Handler();
|
||||
}
|
||||
|
@ -313,7 +331,7 @@ static void MX_ADC1_Init(void)
|
|||
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
|
||||
*/
|
||||
hadc1.Instance = ADC1;
|
||||
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
|
||||
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
|
||||
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
|
||||
hadc1.Init.ScanConvMode = DISABLE;
|
||||
hadc1.Init.ContinuousConvMode = DISABLE;
|
||||
|
@ -364,7 +382,7 @@ static void MX_CAN1_Init(void)
|
|||
hcan1.Init.Prescaler = 12;
|
||||
hcan1.Init.Mode = CAN_MODE_NORMAL;
|
||||
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
||||
hcan1.Init.TimeSeg1 = CAN_BS1_2TQ;
|
||||
hcan1.Init.TimeSeg1 = CAN_BS1_4TQ;
|
||||
hcan1.Init.TimeSeg2 = CAN_BS2_2TQ;
|
||||
hcan1.Init.TimeTriggeredMode = DISABLE;
|
||||
hcan1.Init.AutoBusOff = DISABLE;
|
||||
|
@ -581,6 +599,65 @@ 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
|
||||
|
@ -627,6 +704,22 @@ 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)
|
||||
{
|
||||
|
@ -742,7 +835,7 @@ static void MX_GPIO_Init(void)
|
|||
/*Configure GPIO pins : CAN1_S0_Pin CAN2_S0_Pin */
|
||||
GPIO_InitStruct.Pin = CAN1_S0_Pin|CAN2_S0_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
|
||||
|
||||
|
@ -754,14 +847,6 @@ static void MX_GPIO_Init(void)
|
|||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : LED_TIM2_CH2_PA1_Pin LED_TIM2_CH3_PA2_Pin */
|
||||
GPIO_InitStruct.Pin = LED_TIM2_CH2_PA1_Pin|LED_TIM2_CH3_PA2_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
|
||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : I2C2_SCL_PH4_Pin I2C2_SDA_PH5_Pin */
|
||||
GPIO_InitStruct.Pin = I2C2_SCL_PH4_Pin|I2C2_SDA_PH5_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
|
@ -915,10 +1000,10 @@ void Start_LED_Task(void *argument)
|
|||
osDelay(100);
|
||||
HAL_GPIO_TogglePin(LED_ALERT_GPIO_Port, LED_ALERT_Pin);
|
||||
osDelay(100);
|
||||
HAL_GPIO_TogglePin(LED_CAN1_GPIO_Port, LED_CAN1_Pin);
|
||||
osDelay(100);
|
||||
HAL_GPIO_TogglePin(LED_CAN2_GPIO_Port, LED_CAN2_Pin);
|
||||
osDelay(100);
|
||||
// HAL_GPIO_TogglePin(CAN1_S0_GPIO_Port, CAN1_S0_Pin);
|
||||
// osDelay(100);
|
||||
// HAL_GPIO_TogglePin(CAN2_S0_GPIO_Port, CAN2_S0_Pin);
|
||||
// osDelay(100);
|
||||
|
||||
}
|
||||
/* USER CODE END Start_LED_Task */
|
||||
|
@ -939,6 +1024,10 @@ 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(LED_CAN1_GPIO_Port, LED_CAN1_Pin, SET);
|
||||
|
||||
for (;;) {
|
||||
if (CAN_ENABLED) {
|
||||
|
@ -1196,7 +1285,6 @@ void Start_CAN_Task(void *argument)
|
|||
else {
|
||||
|
||||
}
|
||||
osDelay(1);
|
||||
} else {
|
||||
osDelay(60000);
|
||||
}
|
||||
|
@ -1486,6 +1574,77 @@ void Start_ALERT_Task(void *argument)
|
|||
/* USER CODE END Start_ALERT_Task */
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN Header_Start_RGB_Task */
|
||||
/**
|
||||
* @brief Function implementing the RGB_Task thread.
|
||||
* @param argument: Not used
|
||||
* @retval None
|
||||
*/
|
||||
/* USER CODE END Header_Start_RGB_Task */
|
||||
void Start_RGB_Task(void *argument)
|
||||
{
|
||||
/* USER CODE BEGIN Start_RGB_Task */
|
||||
|
||||
Current_Status.LED_BRIGHTNESS = LED_DEFAULT_BRIGHTNESS;
|
||||
|
||||
/* Infinite loop */
|
||||
for (;;) {
|
||||
Current_Status.ENGINE_PROTECTION = Current_Status.RPM >= PROTECTION_RPM_HIGH ? 1 : 0;
|
||||
|
||||
if (RGB_ENABLED) {
|
||||
|
||||
WS2812_Clear(0);
|
||||
uint8_t RPMLED = LED_NUMBER;
|
||||
|
||||
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;
|
||||
lowRange = lowRange < 1 ? 1 : lowRange;
|
||||
|
||||
for (int i = 1; i <= lowRange; i++) {
|
||||
WS2812_RGB_t color;
|
||||
if (Current_Status.ENGINE_PROTECTION == 1) {
|
||||
color.red = 0;
|
||||
color.green = 255;
|
||||
color.blue = 0;
|
||||
} else {
|
||||
color.red = 0;
|
||||
color.green = 255;
|
||||
color.blue = 0;
|
||||
}
|
||||
WS2812_One_RGB((RPMLED - i) + (LED_NUMBER - RPMLED), color, 0);
|
||||
}
|
||||
|
||||
if (Current_Status.RPM > PROTECTION_RPM_LOW) {
|
||||
uint16_t highRange = mapInt(Current_Status.RPM, PROTECTION_RPM_HIGH, PROTECTION_RPM_LOW, PROTECTION_RPM_LED, 1);
|
||||
for (int i = 1; i <= highRange; i++) {
|
||||
WS2812_RGB_t color;
|
||||
color.red = 255;
|
||||
color.green = 0;
|
||||
color.blue = 0;
|
||||
|
||||
WS2812_One_RGB((PROTECTION_RPM_LED - i) + (LED_NUMBER - RPMLED), color, 0);
|
||||
}
|
||||
|
||||
WS2812_Refresh();
|
||||
osDelay(50);
|
||||
|
||||
for (int i = 1; i <= highRange; i++) {
|
||||
WS2812_RGB_t color;
|
||||
color.red = 0;
|
||||
color.green = 0;
|
||||
color.blue = 0;
|
||||
|
||||
WS2812_One_RGB((PROTECTION_RPM_LED - i) + (LED_NUMBER - RPMLED), color, 0);
|
||||
}
|
||||
}
|
||||
|
||||
WS2812_Refresh();
|
||||
osDelay(100);
|
||||
}
|
||||
}
|
||||
/* USER CODE END Start_RGB_Task */
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Period elapsed callback in non blocking mode
|
||||
* @note This function is called when TIM6 interrupt took place, inside
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
/* USER CODE BEGIN Includes */
|
||||
|
||||
/* USER CODE END Includes */
|
||||
extern DMA_HandleTypeDef hdma_tim2_ch2_ch4;
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN TD */
|
||||
|
@ -59,7 +60,7 @@
|
|||
/* USER CODE END 0 */
|
||||
|
||||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
|
||||
/**
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
void HAL_MspInit(void)
|
||||
|
@ -509,6 +510,7 @@ 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 */
|
||||
|
@ -520,6 +522,54 @@ 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 */
|
||||
|
@ -537,7 +587,27 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
|||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(htim->Instance==TIM13)
|
||||
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)
|
||||
{
|
||||
/* USER CODE BEGIN TIM13_MspPostInit 0 */
|
||||
|
||||
|
@ -579,6 +649,27 @@ 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,6 +22,7 @@
|
|||
#include "stm32f4xx_it.h"
|
||||
/* Private includes ----------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Includes */
|
||||
#include "WS2812_Lib.h"
|
||||
/* USER CODE END Includes */
|
||||
|
||||
/* Private typedef -----------------------------------------------------------*/
|
||||
|
@ -60,6 +61,7 @@ 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 */
|
||||
|
@ -164,6 +166,20 @@ 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.
|
||||
*/
|
||||
|
|
|
@ -8,11 +8,11 @@ ADC1.master=1
|
|||
CAD.formats=
|
||||
CAD.pinconfig=
|
||||
CAD.provider=
|
||||
CAN1.BS1=CAN_BS1_2TQ
|
||||
CAN1.BS1=CAN_BS1_4TQ
|
||||
CAN1.BS2=CAN_BS2_2TQ
|
||||
CAN1.CalculateBaudRate=500000
|
||||
CAN1.CalculateTimeBit=2000
|
||||
CAN1.CalculateTimeQuantum=400.0
|
||||
CAN1.CalculateTimeQuantum=285.7142857142857
|
||||
CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2
|
||||
CAN1.Prescaler=12
|
||||
DMA2D.ColorMode=DMA2D_OUTPUT_RGB565
|
||||
|
@ -20,6 +20,21 @@ 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
|
||||
|
@ -36,7 +51,7 @@ 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,8,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
|
||||
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.configASSERT(\ x\ )=if ((x) \=\= 0) {taskDISABLE_INTERRUPTS(); for( ;; );}
|
||||
FREERTOS.configMINIMAL_STACK_SIZE=64
|
||||
FREERTOS.configPRIO_BITS=4
|
||||
|
@ -87,19 +102,21 @@ Mcu.CPN=STM32F429IIT6
|
|||
Mcu.Family=STM32F4
|
||||
Mcu.IP0=ADC1
|
||||
Mcu.IP1=CAN1
|
||||
Mcu.IP10=TIM1
|
||||
Mcu.IP11=TIM13
|
||||
Mcu.IP12=USB_DEVICE
|
||||
Mcu.IP13=USB_OTG_FS
|
||||
Mcu.IP10=SYS
|
||||
Mcu.IP11=TIM1
|
||||
Mcu.IP12=TIM2
|
||||
Mcu.IP13=TIM13
|
||||
Mcu.IP14=USB_DEVICE
|
||||
Mcu.IP15=USB_OTG_FS
|
||||
Mcu.IP2=CRC
|
||||
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.IP3=DMA
|
||||
Mcu.IP4=DMA2D
|
||||
Mcu.IP5=FMC
|
||||
Mcu.IP6=FREERTOS
|
||||
Mcu.IP7=LTDC
|
||||
Mcu.IP8=NVIC
|
||||
Mcu.IP9=RCC
|
||||
Mcu.IPNb=16
|
||||
Mcu.Name=STM32F429IITx
|
||||
Mcu.Package=LQFP176
|
||||
Mcu.Pin0=PE2
|
||||
|
@ -123,10 +140,11 @@ 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_TIM13_VS_ClockSourceINT
|
||||
Mcu.Pin118=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
Mcu.Pin119=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.1
|
||||
Mcu.Pin117=VP_TIM2_VS_ClockSourceINT
|
||||
Mcu.Pin118=VP_TIM13_VS_ClockSourceINT
|
||||
Mcu.Pin119=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||
Mcu.Pin12=PF4
|
||||
Mcu.Pin120=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.21.1
|
||||
Mcu.Pin13=PF5
|
||||
Mcu.Pin14=PF6
|
||||
Mcu.Pin15=PF7
|
||||
|
@ -222,7 +240,7 @@ Mcu.Pin96=PG12
|
|||
Mcu.Pin97=PG13
|
||||
Mcu.Pin98=PG14
|
||||
Mcu.Pin99=PG15
|
||||
Mcu.PinsNb=120
|
||||
Mcu.PinsNb=121
|
||||
Mcu.ThirdParty0=STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1
|
||||
Mcu.ThirdPartyNb=1
|
||||
Mcu.UserConstants=
|
||||
|
@ -231,6 +249,7 @@ 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
|
||||
|
@ -255,8 +274,9 @@ PA0/WKUP.GPIOParameters=GPIO_Label
|
|||
PA0/WKUP.GPIO_Label=BRV_CPU
|
||||
PA0/WKUP.Locked=true
|
||||
PA0/WKUP.Signal=ADCx_IN0
|
||||
PA1.GPIOParameters=GPIO_Label
|
||||
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
|
||||
|
@ -279,8 +299,9 @@ PA14.GPIO_Label=SWCLK
|
|||
PA14.Locked=true
|
||||
PA14.Mode=Serial_Wire
|
||||
PA14.Signal=SYS_JTCK-SWCLK
|
||||
PA2.GPIOParameters=GPIO_Label
|
||||
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
|
||||
|
@ -520,13 +541,19 @@ PF5.GPIOParameters=GPIO_Label
|
|||
PF5.GPIO_Label=SDRAM_A5_PF5
|
||||
PF5.Locked=true
|
||||
PF5.Signal=FMC_A5
|
||||
PF6.GPIOParameters=GPIO_Label
|
||||
PF6.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
|
||||
PF6.GPIO_Label=CAN1_S0
|
||||
PF6.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
|
||||
PF6.GPIO_PuPd=GPIO_PULLUP
|
||||
PF6.Locked=true
|
||||
PF6.PinState=GPIO_PIN_RESET
|
||||
PF6.Signal=GPIO_Output
|
||||
PF7.GPIOParameters=GPIO_Label
|
||||
PF7.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultOutputPP
|
||||
PF7.GPIO_Label=CAN2_S0
|
||||
PF7.GPIO_ModeDefaultOutputPP=GPIO_MODE_OUTPUT_PP
|
||||
PF7.GPIO_PuPd=GPIO_PULLUP
|
||||
PF7.Locked=true
|
||||
PF7.PinState=GPIO_PIN_RESET
|
||||
PF7.Signal=GPIO_Output
|
||||
PF8.GPIOParameters=GPIO_Label
|
||||
PF8.GPIO_Label=LCD_BL_PF8
|
||||
|
@ -789,23 +816,23 @@ 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_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_TIM2_Init-TIM2-false-HAL-true,13-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.1-false-HAL-false,14-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_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
|
||||
RCC.48MHZClocksFreq_Value=48000000
|
||||
RCC.AHBFreq_Value=120000000
|
||||
RCC.AHBFreq_Value=168000000
|
||||
RCC.APB1CLKDivider=RCC_HCLK_DIV4
|
||||
RCC.APB1Freq_Value=30000000
|
||||
RCC.APB1TimFreq_Value=60000000
|
||||
RCC.APB1Freq_Value=42000000
|
||||
RCC.APB1TimFreq_Value=84000000
|
||||
RCC.APB2CLKDivider=RCC_HCLK_DIV2
|
||||
RCC.APB2Freq_Value=60000000
|
||||
RCC.APB2TimFreq_Value=120000000
|
||||
RCC.CortexFreq_Value=120000000
|
||||
RCC.APB2Freq_Value=84000000
|
||||
RCC.APB2TimFreq_Value=168000000
|
||||
RCC.CortexFreq_Value=168000000
|
||||
RCC.EXTERNAL_CLOCK_VALUE=12288000
|
||||
RCC.EnbaleCSS=true
|
||||
RCC.EthernetFreq_Value=120000000
|
||||
RCC.FCLKCortexFreq_Value=120000000
|
||||
RCC.FLatency-AdvancedSettings=FLASH_LATENCY_3
|
||||
RCC.EthernetFreq_Value=168000000
|
||||
RCC.FCLKCortexFreq_Value=168000000
|
||||
RCC.FLatency-AdvancedSettings=FLASH_LATENCY_5
|
||||
RCC.FamilyName=M
|
||||
RCC.HCLKFreq_Value=120000000
|
||||
RCC.HCLKFreq_Value=168000000
|
||||
RCC.HSEUsed=1
|
||||
RCC.HSE_VALUE=12000000
|
||||
RCC.HSI_VALUE=16000000
|
||||
|
@ -818,11 +845,11 @@ RCC.LSE_VALUE=32768
|
|||
RCC.LSIUsed=0
|
||||
RCC.LSI_VALUE=32000
|
||||
RCC.MCO1PinFreq_Value=16000000
|
||||
RCC.MCO2PinFreq_Value=120000000
|
||||
RCC.PLLCLKFreq_Value=120000000
|
||||
RCC.MCO2PinFreq_Value=168000000
|
||||
RCC.PLLCLKFreq_Value=168000000
|
||||
RCC.PLLM=6
|
||||
RCC.PLLN=120
|
||||
RCC.PLLQ=5
|
||||
RCC.PLLN=168
|
||||
RCC.PLLQ=7
|
||||
RCC.PLLQCLKFreq_Value=48000000
|
||||
RCC.PLLSAIN=50
|
||||
RCC.PLLUsed=1
|
||||
|
@ -832,11 +859,11 @@ RCC.SAIClockSource_BlockA=SAI_CLKSOURCE_PLLSAI
|
|||
RCC.SAIClockSource_BlockB=SAI_CLKSOURCE_PLLSAI
|
||||
RCC.SAI_AClocksFreq_Value=25000000
|
||||
RCC.SAI_BClocksFreq_Value=25000000
|
||||
RCC.SYSCLKFreq_VALUE=120000000
|
||||
RCC.SYSCLKFreq_VALUE=168000000
|
||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||
RCC.VCOI2SOutputFreq_Value=384000000
|
||||
RCC.VCOInputFreq_Value=2000000
|
||||
RCC.VCOOutputFreq_Value=240000000
|
||||
RCC.VCOOutputFreq_Value=336000000
|
||||
RCC.VCOSAIOutputFreq_Value=100000000
|
||||
RCC.VCOSAIOutputFreq_ValueQ=25000000
|
||||
RCC.VCOSAIOutputFreq_ValueR=50000000
|
||||
|
@ -923,7 +950,7 @@ 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
|
||||
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
|
||||
|
@ -947,6 +974,10 @@ 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
|
||||
|
@ -969,6 +1000,8 @@ 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