Browse Source

update

master
zhaohe 1 year ago
parent
commit
4f8ffcb10f
  1. 35
      .cproject
  2. 42
      .mxproject
  3. 4
      .settings/stm32cubeide.project.prefs
  4. 30
      Core/Inc/FreeRTOSConfig.h
  5. 76
      Core/Inc/stm32f4xx_hal_conf.h
  6. 88
      Core/Src/freertos.c
  7. 256
      Core/Src/usart.c.bak
  8. 2
      Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c
  9. 2
      Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h
  10. 2
      STM32F407VETX_FLASH.ld
  11. 2
      a8000_protocol
  12. 6
      a8000_subboard.ioc
  13. 2
      sdk
  14. 6
      usrc/main.cpp
  15. 3
      usrc/project_configs.h
  16. 9
      usrc/public_service/gins.c
  17. 7
      usrc/public_service/gins.h
  18. 7
      usrc/public_service/stm32irq.c
  19. 21
      usrc/subboards/subboard30_shake_module/pri_board.h
  20. 89
      usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp
  21. 73
      usrc/subboards/subboard30_shake_module/subboard30_shake_module_board.c
  22. 21
      usrc/subboards/subboard30_shake_module/subboard30_shake_module_board.h
  23. 135
      usrc/sysmgr/sys_mgr.cpp
  24. 49
      usrc/sysmgr/sys_mgr.hpp

35
.cproject

@ -115,13 +115,42 @@
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.319958895" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
</toolChain>
</folderInfo>
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1853947771.2046756075" name="/" resourcePath="sdk/components/mini_servo_motor">
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1211110595" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug" unusedChildren="">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.801178797.2060865459" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.801178797"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.777915677.1279646158" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.777915677"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1126839807.2124490181" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1126839807"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.2045742466.1138907910" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.2045742466"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.2108401733.472208177" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.2108401733"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1574925555.1611148172" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1574925555"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.244221814.949687992" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.244221814"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.764397174.1436458023" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock.764397174"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.992660821.1063765838" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.992660821"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.494792904.1212574727" name="Convert to Intel Hex file (-O ihex)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.494792904"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoscanffloat.176411214.394445354" name="Use float with scanf from newlib-nano (-u _scanf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoscanffloat.176411214"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.164943344.1368774698" name="Use float with printf from newlib-nano (-u _printf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.164943344"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1639392918" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1243726437"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1560035956" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.782799112"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.217284623" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.344817877"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.61087551" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.163881313"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1021470481" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.13625971"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1360686555" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.251758949"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1448277991" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1663377731"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.734041286" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1054983767"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.1938906796" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.959331179"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1159292203" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.673967072"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.533494942" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.468761296"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.532688591" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.1968696221"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1515600647" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.319958895"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="components/mini_servo_motor" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="sdk"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="a8000_protocol"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="a8000_protocol"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="sdk"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="usrc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
</sourceEntries>
</configuration>
</storageModule>

42
.mxproject
File diff suppressed because it is too large
View File

4
.settings/stm32cubeide.project.prefs

@ -1,6 +1,6 @@
2F62501ED4689FB349E356AB974DBE57=E20EF8A1CFA8D2AA5E7713614514A9E1
2F62501ED4689FB349E356AB974DBE57=04980315A9C90A386CC08C1FEA19B581
635E684B79701B039C64EA45C3F84D30=C8B026EBE17C208F17FB66CE4235156C
66BE74F758C12D739921AEA421D593D3=1
8DF89ED150041C4CBC7CB9A9CAA90856=E20EF8A1CFA8D2AA5E7713614514A9E1
8DF89ED150041C4CBC7CB9A9CAA90856=04980315A9C90A386CC08C1FEA19B581
DC22A860405A8BF2F2C095E5B6529F12=EC6C4D369FD4F7EABFE17B3222B5F3A0
eclipse.preferences.version=1

30
Core/Inc/FreeRTOSConfig.h

@ -51,6 +51,10 @@
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
#include <stdint.h>
extern uint32_t SystemCoreClock;
/* USER CODE BEGIN 0 */
extern void configureTimerForRunTimeStats(void);
extern unsigned long getRunTimeCounterValue(void);
/* USER CODE END 0 */
#endif
#define configENABLE_FPU 1
#define configENABLE_MPU 0
@ -58,18 +62,23 @@
#define configUSE_PREEMPTION 1
#define configSUPPORT_STATIC_ALLOCATION 1
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 1
#define configCPU_CLOCK_HZ ( SystemCoreClock )
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configMAX_PRIORITIES ( 7 )
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
#define configTOTAL_HEAP_SIZE ((size_t)30000)
#define configMINIMAL_STACK_SIZE ((uint16_t)512)
#define configTOTAL_HEAP_SIZE ((size_t)50000)
#define configMAX_TASK_NAME_LEN ( 16 )
#define configGENERATE_RUN_TIME_STATS 1
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
#define configUSE_16_BIT_TICKS 0
#define configUSE_MUTEXES 1
#define configQUEUE_REGISTRY_SIZE 8
#define configCHECK_FOR_STACK_OVERFLOW 1
#define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_MALLOC_FAILED_HOOK 1
#define configUSE_COUNTING_SEMAPHORES 1
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
#define configRECORD_STACK_HIGH_ADDRESS 1
@ -83,6 +92,12 @@
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
/* Software timer definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 3 )
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH 1024
/* The following flag must be enabled only when using newlib */
#define configUSE_NEWLIB_REENTRANT 1
@ -96,6 +111,7 @@ to exclude the API function. */
#define INCLUDE_vTaskDelayUntil 0
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetSchedulerState 1
#define INCLUDE_uxTaskGetStackHighWaterMark 1
/* Cortex-M specific definitions. */
#ifdef __NVIC_PRIO_BITS
@ -138,6 +154,12 @@ standard names. */
#define xPortSysTickHandler SysTick_Handler
/* USER CODE BEGIN 2 */
/* Definitions needed when configGENERATE_RUN_TIME_STATS is on */
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue
/* USER CODE END 2 */
/* USER CODE BEGIN Defines */
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
/* USER CODE END Defines */

76
Core/Inc/stm32f4xx_hal_conf.h

@ -154,45 +154,45 @@
#define INSTRUCTION_CACHE_ENABLE 1U
#define DATA_CACHE_ENABLE 1U
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback enabled */
#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback enabled */
#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback enabled */
#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback enabled */
#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback enabled */
#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback enabled */
#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback enabled */
#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback enabled */
#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback enabled */
#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback enabled */
#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback enabled */
#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback enabled */
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback enabled */
#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback enabled */
#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */
#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */
#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */
#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */
#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */
#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */
#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */
#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */
#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */
#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */
#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */
#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */
#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */
#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */
#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */
#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback enabled */
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback enabled */
#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback enabled */
#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback enabled */
#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback enabled */
#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback enabled */
#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback enabled */
#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback enabled */
#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback enabled */
#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback enabled */
#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback enabled */
#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback enabled */
#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback enabled */
#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback enabled */
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback enabled */
#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback enabled */
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback enabled */
#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback enabled */
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback enabled */
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback enabled */
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback enabled */
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback enabled */
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback enabled */
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback enabled */
#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */
#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */
#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */
#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */
#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */
#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */
#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */
#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */
#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */
#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */
#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */
#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */
#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */
#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */
#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */
#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */
#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */
#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */
#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */
#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */
#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */
#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */
#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */
#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */
/* ########################## Assert Selection ############################## */
/**

88
Core/Src/freertos.c

@ -61,6 +61,81 @@ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/* GetIdleTaskMemory prototype (linked to static allocation support) */
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
/* GetTimerTaskMemory prototype (linked to static allocation support) */
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize );
/* Hook prototypes */
void configureTimerForRunTimeStats(void);
unsigned long getRunTimeCounterValue(void);
void vApplicationIdleHook(void);
void vApplicationTickHook(void);
void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName);
void vApplicationMallocFailedHook(void);
/* USER CODE BEGIN 1 */
/* Functions needed when configGENERATE_RUN_TIME_STATS is on */
__weak void configureTimerForRunTimeStats(void)
{
}
__weak unsigned long getRunTimeCounterValue(void)
{
return 0;
}
/* USER CODE END 1 */
/* USER CODE BEGIN 2 */
__weak void vApplicationIdleHook( void )
{
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
task. It is essential that code added to this hook function never attempts
to block in any way (for example, call xQueueReceive() with a block time
specified, or call vTaskDelay()). If the application makes use of the
vTaskDelete() API function (as this demo application does) then it is also
important that vApplicationIdleHook() is permitted to return to its calling
function, because it is the responsibility of the idle task to clean up
memory allocated by the kernel to any task that has since been deleted. */
}
/* USER CODE END 2 */
/* USER CODE BEGIN 3 */
__weak void vApplicationTickHook( void )
{
/* This function will be called by each tick interrupt if
configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
added here, but the tick hook is called from an interrupt context, so
code must not attempt to block, and only the interrupt safe FreeRTOS API
functions can be used (those that end in FromISR()). */
}
/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
__weak void vApplicationStackOverflowHook(xTaskHandle xTask, signed char *pcTaskName)
{
/* Run time stack overflow checking is performed if
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook function is
called if a stack overflow is detected. */
}
/* USER CODE END 4 */
/* USER CODE BEGIN 5 */
__weak void vApplicationMallocFailedHook(void)
{
/* vApplicationMallocFailedHook() will only be called if
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
function that will get called if a call to pvPortMalloc() fails.
pvPortMalloc() is called internally by the kernel whenever a task, queue,
timer or semaphore is created. It is also called by various parts of the
demo application. If heap_1.c or heap_2.c are used, then the size of the
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
to query the size of free heap space that remains (although it does not
provide information on how the remaining heap might be fragmented). */
}
/* USER CODE END 5 */
/* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
static StaticTask_t xIdleTaskTCBBuffer;
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
@ -74,6 +149,19 @@ void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackTy
}
/* USER CODE END GET_IDLE_TASK_MEMORY */
/* USER CODE BEGIN GET_TIMER_TASK_MEMORY */
static StaticTask_t xTimerTaskTCBBuffer;
static StackType_t xTimerStack[configTIMER_TASK_STACK_DEPTH];
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
{
*ppxTimerTaskTCBBuffer = &xTimerTaskTCBBuffer;
*ppxTimerTaskStackBuffer = &xTimerStack[0];
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
/* place for user code */
}
/* USER CODE END GET_TIMER_TASK_MEMORY */
/**
* @brief FreeRTOS initialization
* @param None

256
Core/Src/usart.c.bak

@ -1,256 +0,0 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file usart.c
* @brief This file provides code for the configuration
* of the USART instances.
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "usart.h"
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart3;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx;
/* USART1 init function */
void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 460800;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */
}
/* USART3 init function */
void MX_USART3_UART_Init(void)
{
/* USER CODE BEGIN USART3_Init 0 */
/* USER CODE END USART3_Init 0 */
/* USER CODE BEGIN USART3_Init 1 */
/* USER CODE END USART3_Init 1 */
huart3.Instance = USART3;
huart3.Init.BaudRate = 1000000;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART3_Init 2 */
/* USER CODE END USART3_Init 2 */
}
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 */
/* USER CODE END USART1_MspInit 0 */
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USART1 DMA Init */
/* USART1_RX Init */
hdma_usart1_rx.Instance = DMA2_Stream2;
hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4;
hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart1_rx.Init.Mode = DMA_NORMAL;
hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart1_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart1_rx);
/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
}
else if(uartHandle->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspInit 0 */
/* USER CODE END USART3_MspInit 0 */
/* USART3 clock enable */
__HAL_RCC_USART3_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**USART3 GPIO Configuration
PB10 ------> USART3_TX
PB11 ------> USART3_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USART3 DMA Init */
/* USART3_RX Init */
hdma_usart3_rx.Instance = DMA1_Stream1;
hdma_usart3_rx.Init.Channel = DMA_CHANNEL_4;
hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_rx.Init.Mode = DMA_NORMAL;
hdma_usart3_rx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart3_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
/* USART3_TX Init */
hdma_usart3_tx.Instance = DMA1_Stream3;
hdma_usart3_tx.Init.Channel = DMA_CHANNEL_4;
hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma_usart3_tx.Init.Mode = DMA_NORMAL;
hdma_usart3_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_usart3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);
/* USER CODE BEGIN USART3_MspInit 1 */
/* USER CODE END USART3_MspInit 1 */
}
}
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 */
/* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
/* USART1 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
/* USART1 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */
}
else if(uartHandle->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspDeInit 0 */
/* USER CODE END USART3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART3_CLK_DISABLE();
/**USART3 GPIO Configuration
PB10 ------> USART3_TX
PB11 ------> USART3_RX
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
/* USART3 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
HAL_DMA_DeInit(uartHandle->hdmatx);
/* USER CODE BEGIN USART3_MspDeInit 1 */
/* USER CODE END USART3_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

2
Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c

@ -26,7 +26,7 @@
*
*----------------------------------------------------------------------------
*
* Portions Copyright ?2016 STMicroelectronics International N.V. All rights reserved.
* Portions Copyright © 2016 STMicroelectronics International N.V. All rights reserved.
* Portions Copyright (c) 2013 ARM LIMITED
* All rights reserved.
* Redistribution and use in source and binary forms, with or without

2
Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h

@ -26,7 +26,7 @@
*
*----------------------------------------------------------------------------
*
* Portions Copyright ?2016 STMicroelectronics International N.V. All rights reserved.
* Portions Copyright © 2016 STMicroelectronics International N.V. All rights reserved.
* Portions Copyright (c) 2013 ARM LIMITED
* All rights reserved.
* Redistribution and use in source and binary forms, with or without

2
STM32F407VETX_FLASH.ld

@ -40,7 +40,7 @@ ENTRY(Reset_Handler)
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
_Min_Heap_Size = 0x2000; /* required amount of heap */
_Min_Stack_Size = 0x1000; /* required amount of stack */
_Min_Stack_Size = 0x1001; /* required amount of stack */
/* Memories definition */
MEMORY

2
a8000_protocol

@ -1 +1 @@
Subproject commit 232ed7c739e2ee86fe127f6364648a0d50378391
Subproject commit 05207cdd53d36969e7d605aa65f3fa34af819e6e

6
a8000_subboard.ioc

@ -218,15 +218,15 @@ ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=a8000_subboard.ioc
ProjectManager.ProjectName=a8000_subboard
ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack=TIM,ADC,CAN,CEC,CRYP,DAC,DCMI,DFSDM,DMA2D,DSI,ETH,HASH,HCD,I2C,FMPI2C,I2S,IRDA,LPTIM,LTDC,MMC,NAND,NOR,PCCARD,PCD,QSPI,RNG,RTC,SAI,SD,SMARTCARD,SDRAM,SRAM,SPDIFRX,SMBUS,SPI,UART,USART,WWDG
ProjectManager.StackSize=0x1000
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x1001
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ThreadSafeStrategy=Cortex-M4NS\:Default,
ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_CRC_Init-CRC-false-HAL-true,6-MX_RNG_Init-RNG-false-HAL-true,7-MX_TIM7_Init-TIM7-false-HAL-true,8-MX_TIM6_Init-TIM6-false-HAL-true,9-MX_CAN1_Init-CAN1-false-HAL-true,false-10-MX_I2C1_Init-I2C1-false-HAL-true,false-11-MX_SPI1_Init-SPI1-false-HAL-true,false-12-MX_UART4_Init-UART4-false-HAL-true,false-13-MX_ADC1_Init-ADC1-false-HAL-true,false-14-MX_DAC_Init-DAC-false-HAL-true,15-MX_IWDG_Init-IWDG-false-HAL-true,16-MX_USART3_UART_Init-USART3-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,false-4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_CRC_Init-CRC-false-HAL-true,6-MX_RNG_Init-RNG-false-HAL-true,false-7-MX_TIM7_Init-TIM7-false-HAL-true,false-8-MX_TIM6_Init-TIM6-false-HAL-true,false-9-MX_CAN1_Init-CAN1-false-HAL-true,false-10-MX_I2C1_Init-I2C1-false-HAL-true,false-11-MX_SPI1_Init-SPI1-false-HAL-true,false-12-MX_UART4_Init-UART4-false-HAL-true,false-13-MX_ADC1_Init-ADC1-false-HAL-true,false-14-MX_DAC_Init-DAC-false-HAL-true,false-15-MX_IWDG_Init-IWDG-false-HAL-true,16-MX_USART3_UART_Init-USART3-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4

2
sdk

@ -1 +1 @@
Subproject commit faf6a7ee02b3b4d2efa1231430a64ed982ac0f84
Subproject commit f59bc6e7b8cbaa2a0d57ec2141fa933b202eda5b

6
usrc/main.cpp

@ -7,6 +7,7 @@
#include "sdk/os/zos.hpp"
#include "subboards/subboard30_shake_module/subboard30_shake_module.hpp"
#include "subboards/subboard30_shake_module/subboard30_shake_module_board.h"
#include "sysmgr/sys_mgr.hpp"
#define TAG "main"
using namespace std;
using namespace iflytop;
@ -63,6 +64,11 @@ void umain() {
break;
}
ZLOGI(TAG, "======================= sysinfo ======================= ");
SysMgr::ins()->initedFinished();
SysMgr::ins()->dumpSysInfo();
ZLOGI(TAG, "=");
while (true) {
GService::inst()->getZCanReceiver()->loop();
zos_delay(1);

3
usrc/project_configs.h

@ -5,7 +5,6 @@
#define PC_IFLYTOP_ENABLE_OS 1
#define PC_DEBUG_UART huart1
#define PC_DEBUG_UART_DMA_HANDLER hdma_usart1_rx
#define PC_DEBUG_UART_RX_BUF_SIZE 1024
#define PC_DEBUG_LIGHT_GPIO PE2
@ -40,3 +39,5 @@
*/
#define SN_FLASH_ADD 0x080E0000 // 使用扇区11存储SN编码
#define SN_FLASH_EARSE_SECTOR FLASH_SECTOR_11
#define SDK_MAX_TASK 15

9
usrc/public_service/gins.c

@ -7,14 +7,17 @@ TIM_HandleTypeDef htim7;
CAN_HandleTypeDef hcan1;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart3;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx;
DMA_HandleTypeDef *hdma_usart1_rx;
DMA_HandleTypeDef *hdma_usart3_rx;
DMA_HandleTypeDef *hdma_usart3_tx;
DMA_HandleTypeDef hdma1_stream1;
DMA_HandleTypeDef hdma2_stream2;
DMA_HandleTypeDef hdma1_stream3;
extern DMA_HandleTypeDef* hdma_usart3_rx;
extern DMA_HandleTypeDef* hdma_usart3_tx;
SPI_HandleTypeDef hspi1;
bool htim6_enable;

7
usrc/public_service/gins.h

@ -15,10 +15,13 @@ extern CAN_HandleTypeDef hcan1;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart3;
extern DMA_HandleTypeDef hdma1_stream1;
extern DMA_HandleTypeDef hdma2_stream2;
extern DMA_HandleTypeDef hdma2_stream2; // used by common board
extern DMA_HandleTypeDef hdma1_stream3;
extern SPI_HandleTypeDef hspi1;
extern DMA_HandleTypeDef* hdma_usart3_rx;
extern DMA_HandleTypeDef* hdma_usart3_tx;
extern bool htim6_enable;
extern bool htim7_enable;
extern bool htim11_enable;
@ -26,7 +29,7 @@ extern bool hcan1_enable;
extern bool huart1_enable;
extern bool huart3_enable;
extern bool hdma1_stream1_enable;
extern bool hdma2_stream2_enable;
extern bool hdma2_stream2_enable; // used by common board
extern bool hdma1_stream3_enable;
extern bool hspi1_enable;
#ifdef __cplusplus

7
usrc/public_service/stm32irq.c

@ -10,31 +10,34 @@ static void callirqcb(stm32irq_type_t type) {
irqcb[type]();
}
}
void NMI_Handler(void) {
SysMgr_on_NMI_Handler();
while (1) {
}
}
void HardFault_Handler(void) {
SysMgr_on_HardFault_Handler();
while (1) {
}
}
void MemManage_Handler(void) {
SysMgr_on_MemManage_Handler();
while (1) {
}
}
void BusFault_Handler(void) {
SysMgr_on_BusFault_Handler();
while (1) {
}
}
void UsageFault_Handler(void) {
SysMgr_on_UsageFault_Handler();
while (1) {
}
}
void DebugMon_Handler(void) {}
/***********************************************************************************************************************
* IRQ *
***********************************************************************************************************************/

21
usrc/subboards/subboard30_shake_module/pri_board.h

@ -0,0 +1,21 @@
#pragma once
#define TMC_MOTOR_SPI hspi1
// JL_CSN
#define MOTOR1_CSN PA4
#define MOTOR1_ENN PE3
#define MOTOR1_SPI_MODE_SELECT PinNull
#define MOTOR1_REFL PD13
#define MOTOR1_REFR PD14
// SL_CSN
#define MOTOR2_CSN PA8
#define MOTOR2_ENN PE6
#define MOTOR2_SPI_MODE_SELECT PinNull
#define MOTOR2_REFL PD11
#define MOTOR2_REFR PD12
// CL_CSN
#define MOTOR3_CSN PA15
#define MOTOR3_ENN PE7
#define MOTOR3_SPI_MODE_SELECT PinNull
#define MOTOR3_REFL PD9
#define MOTOR3_REFR PD10

89
usrc/subboards/subboard30_shake_module/subboard30_shake_module.cpp

@ -2,9 +2,11 @@
extern "C" {
#include "subboard30_shake_module_board.h"
}
#include "sdk\components\step_motor_ctrl_module\step_motor_ctrl_module.hpp"
#include "pri_board.h"
#include "public_service/public_service.hpp"
#include "sdk/components/mini_servo_motor/feite_servo_motor.hpp"
#include "sdk/components/mini_servo_motor/mini_servo_motor_ctrl_module.hpp"
#include "sdk\components\step_motor_ctrl_module\step_motor_ctrl_module.hpp"
#define TAG "ShakeModule"
@ -12,24 +14,37 @@ using namespace iflytop;
Subboard30ShakeModule::Subboard30ShakeModule(/* args */) {}
Subboard30ShakeModule::~Subboard30ShakeModule() {}
int32_t Subboard30ShakeModule::getmoduleId(int off) { return zdevice_id_mgr_get_device_id() + off; }
Subboard30ShakeModule *Subboard30ShakeModule::ins() {
static Subboard30ShakeModule instance;
return &instance;
}
/***********************************************************************************************************************
* ZIModule *
* PRI *
***********************************************************************************************************************/
static ZGPIO IO[4];
int32_t Subboard30ShakeModule::getid(int32_t *id) {
*id = getmoduleId(0);
return 0;
}
int32_t Subboard30ShakeModule::module_xxx_reg(int32_t param_id, bool read, int32_t &val) { return err::kmodule_not_find_reg; }
/***********************************************************************************************************************
* ZIBoard *
***********************************************************************************************************************/
int32_t Subboard30ShakeModule::board_read_io(int32_t ioindex, int32_t *val) { return 0; }
int32_t Subboard30ShakeModule::board_read_io(int32_t ioindex, int32_t *val) {
if (ioindex < 0 || ioindex >= ZARRAY_SIZE(IO)) {
return err::kparam_out_of_range;
}
*val = IO[ioindex].getState();
return 0;
}
int32_t Subboard30ShakeModule::board_write_io(int32_t ioindex, int32_t val) { return 0; }
void Subboard30ShakeModule::initialize() {
IO[0].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
IO[1].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
IO[2].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
IO[3].initAsInput(PinNull, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
#if 1
@ -121,10 +136,58 @@ void Subboard30ShakeModule::initialize() {
GService::inst()->getZCanProtocolParser()->registerModule(&module);
ZLOGI(TAG, "motor%d readic version %x", subid, motor.readICVersion());
}
#endif
}
Subboard30ShakeModule *Subboard30ShakeModule::ins() {
static Subboard30ShakeModule instance;
return &instance;
static FeiTeServoMotor feiteservomotor_bus; // 飞特舵机总线
{
// 飞特舵机总线
ZASSERT(huart3.Init.BaudRate == 1000000);
feiteservomotor_bus.initialize(&huart3, hdma_usart3_rx, hdma_usart3_tx);
}
{
static MiniServoCtrlModule::config_t cfg = {0};
static MiniServoCtrlModule module;
int subid = 4;
int subidInBus = 1;
module.create_default_config(cfg);
module.initialize(getmoduleId(subid), &feiteservomotor_bus, subidInBus, &cfg);
GService::inst()->getZCanProtocolParser()->registerModule(&module);
}
{
static MiniServoCtrlModule::config_t cfg = {0};
static MiniServoCtrlModule module;
int subid = 5;
int subidInBus = 2;
module.create_default_config(cfg);
module.initialize(getmoduleId(subid), &feiteservomotor_bus, subidInBus, &cfg);
GService::inst()->getZCanProtocolParser()->registerModule(&module);
}
{
static MiniServoCtrlModule::config_t cfg = {0};
static MiniServoCtrlModule module;
int subid = 6;
int subidInBus = 3;
module.create_default_config(cfg);
module.initialize(getmoduleId(subid), &feiteservomotor_bus, subidInBus, &cfg);
GService::inst()->getZCanProtocolParser()->registerModule(&module);
}
{
static MiniServoCtrlModule::config_t cfg = {0};
static MiniServoCtrlModule module;
int subid = 7;
int subidInBus = 4;
module.create_default_config(cfg);
module.initialize(getmoduleId(subid), &feiteservomotor_bus, subidInBus, &cfg);
GService::inst()->getZCanProtocolParser()->registerModule(&module);
}
#endif
}

73
usrc/subboards/subboard30_shake_module/subboard30_shake_module_board.c

@ -2,7 +2,7 @@
#include "public_service/public_service.h"
/* SPI1 init function */
void MX_SPI1_Init(void) {
static void MX_SPI1_Init(void) {
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
@ -32,7 +32,78 @@ void MX_SPI1_Init(void) {
hspi1_enable = true;
}
static void UART3_Init() {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_USART3_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
huart3.Instance = USART3;
huart3.Init.BaudRate = 1000000;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart3) != HAL_OK) {
Error_Handler();
}
GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
hdma1_stream1.Instance = DMA1_Stream1;
hdma1_stream1.Init.Channel = DMA_CHANNEL_4;
hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE;
hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma1_stream1.Init.Mode = DMA_NORMAL;
hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW;
hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) {
Error_Handler();
}
__HAL_LINKDMA(&huart3, hdmarx, hdma1_stream1);
hdma1_stream3.Instance = DMA1_Stream3;
hdma1_stream3.Init.Channel = DMA_CHANNEL_4;
hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE;
hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE;
hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
hdma1_stream3.Init.Mode = DMA_NORMAL;
hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW;
hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) {
Error_Handler();
}
__HAL_LINKDMA(&huart3, hdmatx, hdma1_stream3);
hdma_usart3_rx = &hdma1_stream1;
hdma_usart3_tx = &hdma1_stream3;
hdma1_stream1_enable = true;
hdma1_stream3_enable = true;
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
}
void subboard30_shake_module_board_init() {
common_hardware_init();
MX_SPI1_Init();
UART3_Init();
}

21
usrc/subboards/subboard30_shake_module/subboard30_shake_module_board.h

@ -1,26 +1,7 @@
#pragma once
#include "main.h"
#define TMC_MOTOR_SPI hspi1
// JL_CSN
#define MOTOR1_CSN PA4
#define MOTOR1_ENN PE3
#define MOTOR1_SPI_MODE_SELECT PinNull
#define MOTOR1_REFL PD13
#define MOTOR1_REFR PD14
// SL_CSN
#define MOTOR2_CSN PA8
#define MOTOR2_ENN PE6
#define MOTOR2_SPI_MODE_SELECT PinNull
#define MOTOR2_REFL PD11
#define MOTOR2_REFR PD12
// CL_CSN
#define MOTOR3_CSN PA15
#define MOTOR3_ENN PE7
#define MOTOR3_SPI_MODE_SELECT PinNull
#define MOTOR3_REFL PD9
#define MOTOR3_REFR PD10
#define MOTOR_CFG_FLASH_MARK "MOTOR_CFG_FLASH_MARK"
#ifdef __cplusplus
extern "C" {

135
usrc/sysmgr/sys_mgr.cpp

@ -0,0 +1,135 @@
#include "sys_mgr.hpp"
#include "sdk/os/zos.hpp"
#include "project_configs.h"
#include <stdlib.h>
#include <string.h>
using namespace iflytop;
#define TAG "SysMgr"
extern "C" {
/***********************************************************************************************************************
* STM32_CODE_ERROR *
***********************************************************************************************************************/
void SysMgr_on_Error_Handler() {
ZLOGE(TAG, "Error_Handler\n");
while (1) {
}
}
void SysMgr_on_assert_failed(uint8_t* file, uint32_t line) {
ZLOGE(TAG, "ASSERT: %s [%s:%d]\n", file, line);
while (1) {
}
}
/***********************************************************************************************************************
* STM32_ERROR_IRQ *
***********************************************************************************************************************/
void SysMgr_on_NMI_Handler(void) { ZLOGI(TAG, "on NMI_Handler"); }
void SysMgr_on_HardFault_Handler(void) { ZLOGI(TAG, "on HardFault_Handler"); }
void SysMgr_on_MemManage_Handler(void) { ZLOGI(TAG, "on MemManage_Handler"); }
void SysMgr_on_BusFault_Handler(void) { ZLOGI(TAG, "on BusFault_Handler"); }
void SysMgr_on_UsageFault_Handler(void) { ZLOGI(TAG, "on UsageFault_Handler"); }
/***********************************************************************************************************************
* FREERTOS_ERROR *
***********************************************************************************************************************/
void vApplicationStackOverflowHook(xTaskHandle xTask, signed char* pcTaskName) {
ZLOGE(TAG, "StackOverflowHook: %s\n", pcTaskName);
__disable_irq();
while (1) {
}
}
void vApplicationMallocFailedHook(void) {
ZLOGE(TAG, "MallocFailedHook\n");
__disable_irq();
while (1) {
}
}
}
SysMgr* SysMgr::ins() {
static SysMgr s_ins;
return &s_ins;
}
// void SysMgr::regTaskId(osThreadId id) {
// m_task[m_ntask].Id = id;
// m_ntask++;
// }
size_t SysMgr::osGetSysRunTime() { return HAL_GetTick(); }
UBaseType_t uxTaskGetSystemState(TaskStatus_t* const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t* const pulTotalRunTime);
void SysMgr::initedFinished() { //
static TaskStatus_t pxTaskStatusArray[SDK_MAX_TASK + 1];
UBaseType_t uxArraySize = SDK_MAX_TASK + 1;
uint32_t pulTotalRunTime;
m_ntask = uxTaskGetSystemState(pxTaskStatusArray, uxArraySize, &pulTotalRunTime);
for (int i = 0; i < m_ntask; i++) {
m_task[i].Id = pxTaskStatusArray[i].xHandle;
}
ZASSERT_INFO(m_ntask < SDK_MAX_TASK, "task num is too large, please increase SDK_MAX_TASK");
}
size_t SysMgr::osGetMinimumEverFreeHeapSize() { return ::xPortGetMinimumEverFreeHeapSize(); }
size_t SysMgr::osGetFreeHeapSize() { return ::xPortGetFreeHeapSize(); }
size_t SysMgr::osGetTotalHeapSize() { return configTOTAL_HEAP_SIZE; }
int32_t SysMgr::getTaskNum() { return m_ntask; }
void SysMgr::dumpSysInfo() {
zos_log("---------------Heap Info--------------\n");
zos_log("MinimumEverFreeHeapSize: %d\n", osGetMinimumEverFreeHeapSize());
zos_log("FreeHeapSize : %d\n", osGetFreeHeapSize());
zos_log("TotalHeapSize : %d\n", osGetTotalHeapSize());
zos_log("");
zos_log("---------------Task Info--------------\n");
static char buf[40 * SDK_MAX_TASK]; // 40一个任务,最多支持10个任务
vTaskList(buf);
zos_log("Name State Priority Stack Num\n");
zlog_raw(buf);
zos_log("- TaskInfoEnd -\n");
}
uint32_t SysMgr::osTaskStackRemainingSize(osThreadId id) { return uxTaskGetStackHighWaterMark(id); }
const char* SysMgr::osTaskName(osThreadId id) { return pcTaskGetName(id); }
osThreadId SysMgr::osGetId(int offset) {
if (offset < m_ntask) {
return m_task[offset].Id;
}
return NULL;
}
void SysMgr::osTaskName(osThreadId id, char* name, int bufsize) {
strncpy(name, pcTaskGetName(id), bufsize);
name[bufsize - 1] = 0;
}
void SysMgr::osTaskStackRemainingSize(osThreadId id, uint16_t* remainsize) { *remainsize = uxTaskGetStackHighWaterMark(id); }
void SysMgr::osTaskPriority(osThreadId id, uint16_t* priority) { *priority = uxTaskPriorityGet(id); }
void SysMgr::osTaskGetState(osThreadId id, char* state) {
eTaskState task_state = eTaskGetState(id);
switch (task_state) {
case eRunning:
*state = 'X';
break;
case eReady:
*state = 'R';
break;
case eBlocked:
*state = 'B';
break;
case eSuspended:
*state = 'S';
break;
case eDeleted:
*state = 'D';
break;
default:
*state = '?';
break;
}
}

49
usrc/sysmgr/sys_mgr.hpp

@ -0,0 +1,49 @@
#pragma once
#include "cmsis_os.h"
namespace iflytop {
class ZTaskInfo {
public:
osThreadId Id;
};
class SysMgr {
private:
/* data */
public:
ZTaskInfo m_task[30] = {0};
int m_ntask = 0;
static SysMgr* ins();
void initedFinished();
void dumpSysInfo();
size_t osGetSysRunTime();
/***********************************************************************************************************************
* HeapMgr *
***********************************************************************************************************************/
size_t osGetMinimumEverFreeHeapSize();
size_t osGetFreeHeapSize();
size_t osGetTotalHeapSize();
/***********************************************************************************************************************
* TaskInfo *
***********************************************************************************************************************/
osThreadId osGetId(int offset);
uint32_t osTaskStackRemainingSize(osThreadId id);
const char* osTaskName(osThreadId id);
void osTaskName(osThreadId id, char* name, int bufsize);
void osTaskStackRemainingSize(osThreadId id, uint16_t* remainsize);
void osTaskPriority(osThreadId id, uint16_t* priority);
void osTaskGetState(osThreadId id, char* state);
int32_t getTaskNum();
};
} // namespace iflytop
Loading…
Cancel
Save