diff --git a/Core/Src/main.c b/Core/Src/main.c index 77cabc7..52478bc 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -133,8 +133,11 @@ int main(void) MX_TIM3_Init(); MX_SPI6_Init(); /* USER CODE BEGIN 2 */ - systemstart_song(); + robotSelfCheck(); //自检LED + systemstart_song(); //开机音乐 + + /*还没有启动调度器!不允许任何涉及到 Freertos ticks的内容在这里运行!!!*/ /* USER CODE END 2 */ /* Init scheduler */ diff --git a/User_Code/application/indicator_app/ws2812status.c b/User_Code/application/indicator_app/ws2812status.c index 5f250b7..7bde183 100644 --- a/User_Code/application/indicator_app/ws2812status.c +++ b/User_Code/application/indicator_app/ws2812status.c @@ -31,136 +31,162 @@ uint8_t g = 0; uint8_t b = 0; /*---------------------FUNCTIONS---------------------*/ + +void robotSelfCheck(void) +{ + WS2812_Ctrl(255, 0, 0); + HAL_Delay(300); + + WS2812_Ctrl(0, 0, 255); + HAL_Delay(300); + + WS2812_Ctrl(0, 255, 0); + HAL_Delay(300); + + WS2812_Ctrl(0, 255, 0); +} + /** * @brief WS2812 LED control task * @param argument */ -void ws2812Task(void *argument) { - (void) argument; - while (1) { - switch (RobotMode) { - case NORMAL_MODE: - BlinkGreen(); - break; - case SYS_ERROR_OCCURRED: - BlinkRed(); - break; - case REMOTE_NOT_CONNECTED: - BlinkYellow(); - break; - case REMOTE_CONNECTED: - BlinkBlue(); - break; - case AUTO_SHOOTING_MODE: - BlinkCyan(); - break; - case IMU_CALIBERATION_MODE: - BlinkPurple(); - break; - default: - BlinkYellow(); - } - osDelay(10); // 每个任务最后都要写在while里,要不然会导致任务切换失败 +void ws2812Task(void *argument) +{ + (void) argument; + while (1) + { + switch (RobotMode) + { + case NORMAL_MODE: + BlinkGreen(); + break; + case SYS_ERROR_OCCURRED: + BlinkRed(); + break; + case REMOTE_NOT_CONNECTED: + BlinkYellow(); + break; + case REMOTE_CONNECTED: + BlinkBlue(); + break; + case AUTO_SHOOTING_MODE: + BlinkCyan(); + break; + case IMU_CALIBERATION_MODE: + BlinkPurple(); + break; + default: + BlinkYellow(); } + osDelay(10); // 每个任务最后都要写在while里,要不然会导致任务切换失败 + } } -void BlinkYellow(void) { - r = 255; // 红色分量 - g = 255; // 绿色分量 - b = 0; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为黄色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkYellow(void) +{ + r = 255; // 红色分量 + g = 255; // 绿色分量 + b = 0; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为黄色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void BlinkRed(void) { - r = 255; // 红色分量 - g = 0; // 绿色分量 - b = 0; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为红色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkRed(void) +{ + r = 255; // 红色分量 + g = 0; // 绿色分量 + b = 0; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为红色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void BlinkGreen(void) { - r = 0; // 红色分量 - g = 255; // 绿色分量 - b = 0; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为绿色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkGreen(void) +{ + r = 0; // 红色分量 + g = 255; // 绿色分量 + b = 0; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为绿色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void BlinkBlue(void) { - r = 0; // 红色分量 - g = 0; // 绿色分量 - b = 255; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为蓝色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkBlue(void) +{ + r = 0; // 红色分量 + g = 0; // 绿色分量 + b = 255; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为蓝色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void BlinkWhite(void) { - r = 255; // 红色分量 - g = 255; // 绿色分量 - b = 255; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为白色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkWhite(void) +{ + r = 255; // 红色分量 + g = 255; // 绿色分量 + b = 255; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为白色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void BlinkCyan(void) { - r = 0; // 红色分量 - g = 255; // 绿色分量 - b = 255; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为青色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkCyan(void) +{ + r = 0; // 红色分量 + g = 255; // 绿色分量 + b = 255; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为青色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void BlinkPurple(void) { - r = 255; // 红色分量 - g = 0; // 绿色分量 - b = 255; // 蓝色分量 - WS2812_Ctrl(r, g, b); // 设置为紫色 - delay_ticks(500); // 延时500毫秒 - WS2812_Ctrl(0, 0, 0); // 关闭LED灯 - delay_ticks(500); // 延时500毫秒 +void BlinkPurple(void) +{ + r = 255; // 红色分量 + g = 0; // 绿色分量 + b = 255; // 蓝色分量 + WS2812_Ctrl(r, g, b); // 设置为紫色 + delay_ticks(500); // 延时500毫秒 + WS2812_Ctrl(0, 0, 0); // 关闭LED灯 + delay_ticks(500); // 延时500毫秒 } -void PWMControwLed(void) { - // +void PWMControwLed(void) +{ + // - // WS2812_Ctrl(r, g, b); - // r++; - // g += 5; - // b += 10; + // WS2812_Ctrl(r, g, b); + // r++; + // g += 5; + // b += 10; - // r=0;g=255;b=0;//绿色 - // WS2812_Ctrl(r, g, b); - // delay_ticks(500); // 使用延时函数代替osDelay,避免任务切换失败 + // r=0;g=255;b=0;//绿色 + // WS2812_Ctrl(r, g, b); + // delay_ticks(500); // 使用延时函数代替osDelay,避免任务切换失败 - // r=0;g=0;b=255;//蓝色 - // WS2812_Ctrl(r, g, b); - // delay_ticks(500); + // r=0;g=0;b=255;//蓝色 + // WS2812_Ctrl(r, g, b); + // delay_ticks(500); - // r=0;g=255;b=255;//青色 - // WS2812_Ctrl(r, g, b); - // delay_ticks(500); + // r=0;g=255;b=255;//青色 + // WS2812_Ctrl(r, g, b); + // delay_ticks(500); - // r=255;g=0;b=255;//紫色 - // WS2812_Ctrl(r, g, b); - // delay_ticks(500); + // r=255;g=0;b=255;//紫色 + // WS2812_Ctrl(r, g, b); + // delay_ticks(500); - // r=255;g=255;b=255; - // WS2812_Ctrl(r, g, b); - // delay_ticks(1000); - // osDelay(1); - // osDelay(100); + // r=255;g=255;b=255; + // WS2812_Ctrl(r, g, b); + // delay_ticks(1000); + // osDelay(1); + // osDelay(100); } diff --git a/User_Code/application/indicator_app/ws2812status.h b/User_Code/application/indicator_app/ws2812status.h index ef9bce6..119c37e 100644 --- a/User_Code/application/indicator_app/ws2812status.h +++ b/User_Code/application/indicator_app/ws2812status.h @@ -10,6 +10,8 @@ /*---------------------FUNCTIONS---------------------*/ void ws2812Task(void *argument); +void robotSelfCheck(void); + void BlinkYellow(void); void BlinkRed(void); diff --git a/User_Code/module/periph/buzzer/buzzer.c b/User_Code/module/periph/buzzer/buzzer.c index 3540778..b838a67 100644 --- a/User_Code/module/periph/buzzer/buzzer.c +++ b/User_Code/module/periph/buzzer/buzzer.c @@ -1,3 +1,19 @@ +/** + * @file buzzer.c + * @brief 蜂鸣器控制 + * @author TuxMonkey + * @version v1.0-bsp + * @date 2025-11-15 + * + * @copyright Copyright (c) 2025 DLMU-C.ONE + * + * @par 修改日志: + * + *
Date Version Author Description + *
25-11.15 v1.0-bsp TuxMonkey 蜂鸣器部分 + *
+ */ + /*---------------------INCLUDES---------------------*/ #include "buzzer.h" #include "cmsis_os.h" @@ -263,17 +279,40 @@ void systemstart_song(void) // delay_ticks(1000); //DJI - // buzzer_note(80,0.5);//高音do - // delay_ticks(450); - // buzzer_note(90,0.5);//高音re - // delay_ticks(450); - // buzzer_note(120,0.5);//高音sol - // delay_ticks(550); - SongLaoda(); + // buzzer_note(80, 0.5); //高音do + // HAL_Delay(450); + // buzzer_note(90, 0.5); //高音re + // HAL_Delay(450); + // buzzer_note(120, 0.5); //高音sol + // HAL_Delay(550); + + SongSpring(); //为什么要演奏春日影!!! + + // SongLaoda(); buzzer_off(); } +void SongSpring(void) //春日影!!! +{ + buzzer_note(165, 0.5); //mi + HAL_Delay(280); + buzzer_note(150, 0.5); //re + HAL_Delay(280); + buzzer_note(135, 0.5); //do + HAL_Delay(280); + buzzer_note(150, 0.5); //re + HAL_Delay(280); + buzzer_note(165, 0.5); //mi + HAL_Delay(280); + buzzer_note(170, 0.5); //fa + HAL_Delay(200); + buzzer_note(165, 0.5); //mi + HAL_Delay(200); + buzzer_note(150, 0.5); //re + HAL_Delay(300); +} + void SongLaoda(void) { // 播放歌曲牢大 diff --git a/User_Code/module/periph/buzzer/buzzer.h b/User_Code/module/periph/buzzer/buzzer.h index 64d6792..7160966 100644 --- a/User_Code/module/periph/buzzer/buzzer.h +++ b/User_Code/module/periph/buzzer/buzzer.h @@ -40,20 +40,29 @@ extern const uint8_t sound_autoaiming[]; void systemstart_song(void); // -void buzzerTask(void const * argument); +void buzzerTask(void const *argument); + void SongLaoda(void); + +void SongSpring(void); + // extern void SetBuzzerOff(void); + extern void SetBuzzerFrequence(uint16_t freq); extern void buzzer_on(uint16_t psc, uint16_t pwm); + extern void buzzer_off(void); -extern void buzzer_note(uint16_t note,float volume); + +extern void buzzer_note(uint16_t note, float volume); // extern int8_t SetBuzzerState(uint8_t state); + extern void PlayingSong(const uint16_t *song, uint16_t len); + extern void PlayingSound(const uint8_t *sound, uint16_t len); diff --git a/ozonedeb/windebnewestux.jdebug.user b/ozonedeb/windebnewestux.jdebug.user index 2008c28..7aebac3 100644 --- a/ozonedeb/windebnewestux.jdebug.user +++ b/ozonedeb/windebnewestux.jdebug.user @@ -1,6 +1,5 @@ -Breakpoint=D:/RM/Elec Control/TronOneH7_Scaffold/Core/Src/main.c:133:3, State=BP_STATE_ON -OpenDocument="tasks.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Middlewares/Third_Party/FreeRTOS/Source/tasks.c", Line=2303 +OpenDocument="tasks.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Middlewares/Third_Party/FreeRTOS/Source/tasks.c", Line=2297 OpenDocument="stm32h7xx_hal.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal.c", Line=329 OpenDocument="list.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Middlewares/Third_Party/FreeRTOS/Source/list.c", Line=144 OpenDocument="cmsis_gcc.h", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Drivers/CMSIS/Include/cmsis_gcc.h", Line=264 @@ -8,24 +7,25 @@ OpenDocument="cmsis_os2.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Midd OpenDocument="stm32h7xx_it.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Core/Src/stm32h7xx_it.c", Line=99 OpenDocument="delayticks.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/User_Code/bsp/delayticks/delayticks.c", Line=0 OpenDocument="buzzer.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/User_Code/module/periph/buzzer/buzzer.c", Line=191 -OpenDocument="main.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Core/Src/main.c", Line=110 +OpenDocument="main.c", FilePath="D:/RM/Elec Control/TronOneH7_Scaffold/Core/Src/main.c", Line=69 OpenToolbar="Debug", Floating=0, x=0, y=0 OpenToolbar="Breakpoints", Floating=0, x=1, y=0 -OpenWindow="Registers 1", DockArea=BOTTOM, x=1, y=0, w=363, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1 -OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=551, h=272, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="Disassembly", DockArea=BOTTOM, x=2, y=0, w=627, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="Break & Tracepoints", DockArea=LEFT, x=0, y=1, w=551, h=295, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VectorCatchIndexMask=254 -OpenWindow="Memory 1", DockArea=BOTTOM, x=3, y=0, w=467, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0x20005E30 -OpenWindow="Global Data", DockArea=RIGHT, x=0, y=2, w=681, h=452, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=2, w=551, h=299, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="Functions", DockArea=LEFT, x=0, y=3, w=551, h=206, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="Call Graph", DockArea=LEFT, x=0, y=3, w=551, h=206, TabPos=2, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="Data Sampling", DockArea=BOTTOM, x=0, y=0, w=1100, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0 -OpenWindow="Timeline", DockArea=RIGHT, x=0, y=1, w=681, h=431, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=1, CodePaneShown=1, PinCursor="Cursor Movable", TimePerDiv="1 ns / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="491;-46", PowerGraphDrawAsPoints=0, PowerGraphLegendShown=1, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="459;-65", CodeGraphLegendShown=1, CodeGraphLegendPosition="475;0" -OpenWindow="Console", DockArea=LEFT, x=0, y=3, w=551, h=206, TabPos=0, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="RTOS", DockArea=RIGHT, x=0, y=0, w=681, h=210, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, Showing="" +OpenWindow="Registers 1", DockArea=BOTTOM, x=1, y=0, w=362, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1 +OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=551, h=273, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Disassembly", DockArea=BOTTOM, x=2, y=0, w=628, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Break & Tracepoints", DockArea=LEFT, x=0, y=1, w=551, h=290, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VectorCatchIndexMask=254 +OpenWindow="Memory 1", DockArea=BOTTOM, x=3, y=0, w=466, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0x20005E30 +OpenWindow="Global Data", DockArea=RIGHT, x=0, y=2, w=681, h=441, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=2, w=551, h=295, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Functions", DockArea=LEFT, x=0, y=3, w=551, h=214, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Call Graph", DockArea=LEFT, x=0, y=3, w=551, h=214, TabPos=2, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Data Sampling", DockArea=BOTTOM, x=0, y=0, w=1101, h=181, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0 +OpenWindow="Timeline", DockArea=RIGHT, x=0, y=1, w=681, h=423, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=1, CodePaneShown=1, PinCursor="Cursor Movable", TimePerDiv="1 ns / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="491;-46", PowerGraphDrawAsPoints=0, PowerGraphLegendShown=1, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="459;-65", CodeGraphLegendShown=1, CodeGraphLegendPosition="475;0" +OpenWindow="Console", DockArea=LEFT, x=0, y=3, w=551, h=214, TabPos=0, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="RTOS", DockArea=RIGHT, x=0, y=0, w=681, h=229, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, Showing="" +TableHeader="Call Graph", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Stack Total";"Stack Local";"Code Total";"Code Local";"Depth";"Called From"], ColWidths=[384;100;100;100;100;100;118] TableHeader="Functions", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Address";"Size";"#Insts";"Source"], ColWidths=[1164;100;100;100;100] -TableHeader="Global Data", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Location";"Size";"Type";"Scope"], ColWidths=[222;130;100;54;95;414] +TableHeader="Global Data", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Location";"Size";"Type";"Scope"], ColWidths=[222;130;100;54;95;100] TableHeader="Vector Catches", SortCol="None", SortOrder="ASCENDING", VisibleCols=["";"Vector Catch";"Description"], ColWidths=[50;300;500] TableHeader="Break & Tracepoints", SortCol="None", SortOrder="ASCENDING", VisibleCols=["";"Type";"Location";"Extras"], ColWidths=[100;100;142;209] TableHeader="Source Files", SortCol="File", SortOrder="ASCENDING", VisibleCols=["File";"Status";"Size";"#Insts";"Path"], ColWidths=[229;100;100;100;902] @@ -35,5 +35,4 @@ TableHeader="Power Sampling", SortCol="Index", SortOrder="ASCENDING", VisibleCol TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[100;105;294] TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location"], ColWidths=[171;101;279] TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[] -TableHeader="Call Graph", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Stack Total";"Stack Local";"Code Total";"Code Local";"Depth";"Called From"], ColWidths=[384;100;100;100;100;100;118] TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[27;27;27;38] \ No newline at end of file