diff --git a/.cproject b/.cproject
index c08840d..cd3e105 100644
--- a/.cproject
+++ b/.cproject
@@ -90,7 +90,7 @@
-
+
diff --git a/Core/Inc/stm32f4xx_it.h b/Core/Inc/stm32f4xx_it.h
index 3873247..31b3500 100644
--- a/Core/Inc/stm32f4xx_it.h
+++ b/Core/Inc/stm32f4xx_it.h
@@ -62,6 +62,7 @@ void TIM1_TRG_COM_TIM11_IRQHandler(void);
void USART3_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void TIM7_IRQHandler(void);
+void DMA2_Stream2_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */
diff --git a/Core/Src/dma.c b/Core/Src/dma.c
index a942cde..d203027 100644
--- a/Core/Src/dma.c
+++ b/Core/Src/dma.c
@@ -41,6 +41,7 @@ void MX_DMA_Init(void)
/* DMA controller clock enable */
__HAL_RCC_DMA1_CLK_ENABLE();
+ __HAL_RCC_DMA2_CLK_ENABLE();
/* DMA interrupt init */
/* DMA1_Stream5_IRQn interrupt configuration */
@@ -49,6 +50,9 @@ void MX_DMA_Init(void)
/* DMA1_Stream6_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn);
+ /* DMA2_Stream2_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
}
diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c
index 6ac79a6..20dc61e 100644
--- a/Core/Src/stm32f4xx_it.c
+++ b/Core/Src/stm32f4xx_it.c
@@ -59,6 +59,7 @@ extern CAN_HandleTypeDef hcan1;
extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
+extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart2_tx;
extern UART_HandleTypeDef huart3;
@@ -307,6 +308,20 @@ void TIM7_IRQHandler(void)
/* USER CODE END TIM7_IRQn 1 */
}
+/**
+ * @brief This function handles DMA2 stream2 global interrupt.
+ */
+void DMA2_Stream2_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */
+
+ /* USER CODE END DMA2_Stream2_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_usart1_rx);
+ /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */
+
+ /* USER CODE END DMA2_Stream2_IRQn 1 */
+}
+
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
diff --git a/Core/Src/usart.c b/Core/Src/usart.c
index 284b650..0af0b83 100644
--- a/Core/Src/usart.c
+++ b/Core/Src/usart.c
@@ -27,6 +27,7 @@
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
+DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart2_rx;
DMA_HandleTypeDef hdma_usart2_tx;
@@ -43,7 +44,7 @@ void MX_USART1_UART_Init(void)
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
- huart1.Init.BaudRate = 1000000;
+ huart1.Init.BaudRate = 1500000;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
@@ -142,6 +143,25 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
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);
+
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
@@ -253,6 +273,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
+ /* USART1 DMA DeInit */
+ HAL_DMA_DeInit(uartHandle->hdmarx);
/* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */
diff --git a/hbot_robot_controler.ioc b/hbot_robot_controler.ioc
index 01b7056..276a99a 100644
--- a/hbot_robot_controler.ioc
+++ b/hbot_robot_controler.ioc
@@ -17,7 +17,18 @@ CAN1.TTCM=ENABLE
CAN1.TXFP=DISABLE
Dma.Request0=USART2_RX
Dma.Request1=USART2_TX
-Dma.RequestsNb=2
+Dma.Request2=USART1_RX
+Dma.RequestsNb=3
+Dma.USART1_RX.2.Direction=DMA_PERIPH_TO_MEMORY
+Dma.USART1_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE
+Dma.USART1_RX.2.Instance=DMA2_Stream2
+Dma.USART1_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.USART1_RX.2.MemInc=DMA_MINC_ENABLE
+Dma.USART1_RX.2.Mode=DMA_NORMAL
+Dma.USART1_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.USART1_RX.2.PeriphInc=DMA_PINC_DISABLE
+Dma.USART1_RX.2.Priority=DMA_PRIORITY_LOW
+Dma.USART1_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
Dma.USART2_RX.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART2_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.USART2_RX.0.Instance=DMA1_Stream5
@@ -112,6 +123,7 @@ NVIC.CAN1_SCE_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.CAN1_TX_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
+NVIC.DMA2_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
@@ -208,7 +220,7 @@ 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_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_SPI1_Init-SPI1-false-HAL-true,10-MX_TIM6_Init-TIM6-false-HAL-true,11-MX_TIM1_Init-TIM1-false-HAL-true,12-MX_CAN1_Init-CAN1-false-HAL-true,13-MX_USART2_UART_Init-USART2-false-HAL-true,14-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,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_SPI1_Init-SPI1-false-HAL-true,10-MX_TIM6_Init-TIM6-false-HAL-true,11-MX_TIM1_Init-TIM1-false-HAL-true,12-MX_CAN1_Init-CAN1-false-HAL-true,13-MX_USART2_UART_Init-USART2-false-HAL-true,14-MX_USART3_UART_Init-USART3-false-HAL-true,15-MX_I2C1_Init-I2C1-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
diff --git a/sdk b/sdk
index 8ce6efe..14654f9 160000
--- a/sdk
+++ b/sdk
@@ -1 +1 @@
-Subproject commit 8ce6efeeb5117fb2d1cd878178dec0aff4d7ed63
+Subproject commit 14654f98532a65013384eb1582845af08c9cf327
diff --git a/usrc/board.h b/usrc/board.h
new file mode 100644
index 0000000..aa5f605
--- /dev/null
+++ b/usrc/board.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#define BOARD_ID 1
+#define TMC_MOTOR_SPI hspi1
+
+// MOTOR1
+#define TMC_MOTOR1_CHANNEL 1
+#define TMC_MOTOR1_SPI_SELECT1_IO PA4
+#define TMC_MOTOR1_nFREEZE_IO PC2
+#define TMC_MOTOR1_nRESET_IO PB3
+#define TMC_MOTOR1_SUB_IC_ENN_IO PC3
+#define TMC_MOTOR1_ENN_IO // unused
+
+// MOTOR2
+#define TMC_MOTOR2_CHANNEL 2
+#define TMC_MOTOR2_SPI_SELECT1_IO PA8
+#define TMC_MOTOR2_nFREEZE_IO PC6
+#define TMC_MOTOR2_nRESET_IO PB2
+#define TMC_MOTOR2_SUB_IC_ENN_IO PC7
+#define TMC_MOTOR2_ENN_IO // unused
+
+#define ARM_SENSOR1_GPIO PD0
+#define ARM_SENSOR2_GPIO PD1
+#define ARM_SENSOR3_GPIO PD2
+#define ARM_SENSOR4_GPIO PD3
+#define ARM_SENSOR5_GPIO PD4
+#define ARM_SENSOR6_GPIO PD5
+#define ARM_SENSOR7_GPIO PD6
+#define ARM_SENSOR8_GPIO PD7
diff --git a/usrc/main.cpp b/usrc/main.cpp
index 2b41da3..bb58f65 100644
--- a/usrc/main.cpp
+++ b/usrc/main.cpp
@@ -7,59 +7,44 @@
#include "sdk\components\mini_servo_motor\feite_servo_motor.hpp"
#include "sdk\components\tmc\ic\ztmc4361A.hpp"
#include "sdk\components\xy_robot_ctrl_module\xy_robot_ctrl_module.hpp"
+#include "sdk\components\zcancmder\zcan_board_module.hpp"
#include "sdk\components\zcancmder\zcanreceiver.hpp"
#include "sdk\components\zcancmder_module\zcan_basic_order_module.hpp"
#include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp"
+
//
+#include "board.h"
#include "sdk\components\flash\znvs.hpp"
+#include "sdk\components\subcanmodule\zcancmder_subboard_initer.hpp"
//
#define TAG "main"
using namespace iflytop;
using namespace std;
+static ZCancmderSubboardIniter initer;
+
extern void umain();
extern "C" {
void StartDefaultTask(void const* argument) { umain(); }
}
-#define TMC_MOTOR_SPI hspi1
-
-static TMC4361A motora;
-static TMC4361A motorb;
-static ZCanCmder zcanCmder;
-
-static StepMotorCtrlModule stepMotorCtrlModule;
-static XYRobotCtrlModule xyRobotCtrlModule;
-static ZIProtocolParser g_ziProtocolParser;
-
-#define XYRobotCtrlModule_1_FLASH_MARK "XYRobotCtrlModule_1"
-
-void umain() {
- chip_cfg_t chipcfg;
- chipcfg.us_dleay_tim = &DELAY_US_TIMER;
- chipcfg.tim_irq_scheduler_tim = &TIM_IRQ_SCHEDULER_TIMER;
- chipcfg.huart = &DEBUG_UART;
- chipcfg.debuglight = DEBUG_LIGHT_GPIO;
-
- chip_init(&chipcfg);
-
- zos_cfg_t zoscfg;
- zos_init(&zoscfg);
-
- ZLOGI(TAG, "boardid:%d moduleid:%d", BOARD_ID, MODULE_ID);
-
- /*******************************************************************************
- * NVSINIT *
- *******************************************************************************/
- ZNVS::ins().initialize(IFLYTOP_NVS_CONFIG_FLASH_SECTOR);
- {
- static I_XYRobotCtrlModule::flash_config_t cfg;
- XYRobotCtrlModule::create_default_cfg(cfg);
- ZNVS::ins().alloc_config(XYRobotCtrlModule_1_FLASH_MARK, (uint8_t*)&cfg, sizeof(cfg));
- }
- ZNVS::ins().init_config();
- osDelay(1000);
+#define FLASH_MASK_XYRobotCtrlModule1 "XYRobotCtrlModule_1"
+
+void initmodule() {}
+static int32_t getDeviceId() { return BOARD_ID; }
+void nvs_init_cb() {
+ /**
+ * @brief 初始化配置,系统中需要配置都需要在这里进行初始化
+ */
+ static I_XYRobotCtrlModule::flash_config_t cfg;
+ XYRobotCtrlModule::create_default_cfg(cfg);
+ ZNVS::ins().alloc_config(FLASH_MASK_XYRobotCtrlModule1, (uint8_t*)&cfg, sizeof(cfg));
+}
+static void initsubmodule() {
+ static XYRobotCtrlModule xyRobotCtrlModule;
+ static TMC4361A motora;
+ static TMC4361A motorb;
{
TMC4361A::cfg_t cfg = {
.spi = &TMC_MOTOR_SPI, //
@@ -100,23 +85,6 @@ void umain() {
motora.rotate(0);
motorb.rotate(0);
- auto zcanCmder_cfg = zcanCmder.createCFG(BOARD_ID);
- zcanCmder.init(zcanCmder_cfg);
-
- /*******************************************************************************
- * zcanBasicOrderModule *
- *******************************************************************************/
-#if 0
- zcanBasicOrderModule.reg_set_io(1, [](bool val) { ZLOGI(TAG, "write io 1:%d", val); });
- zcanBasicOrderModule.reg_read_io(1, []() {
- ZLOGI(TAG, "read io 1");
- return 1;
- });
- zcanBasicOrderModule.reg_read_adc(1, []() {
- ZLOGI(TAG, "read adc 1");
- return 123;
- });
-#endif
/*******************************************************************************
* zcanXYRobotCtrlModule *
@@ -131,15 +99,25 @@ void umain() {
input[6].initAsInput(ARM_SENSOR7_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
input[7].initAsInput(ARM_SENSOR8_GPIO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true);
- xyRobotCtrlModule.initialize(BOARD_ID, &motora, &motorb, &input[0], 8, XYRobotCtrlModule_1_FLASH_MARK);
+ xyRobotCtrlModule.initialize(initer.get_module_id(1), &motora, &motorb, &input[0], 8, FLASH_MASK_XYRobotCtrlModule1);
xyRobotCtrlModule.dumpcfg();
- // zcanXYRobotCtrlModule.initialize(&zcanCmder, MODULE_ID, &xyRobotCtrlModule);
- g_ziProtocolParser.initialize(&zcanCmder);
- g_ziProtocolParser.registerModule(&xyRobotCtrlModule);
+ initer.register_module(&xyRobotCtrlModule);
+}
- while (true) {
- OSDefaultSchduler::getInstance()->loop();
- zcanCmder.loop();
- }
+void umain() {
+ ZCancmderSubboardIniter::cfg_t cfg = //
+ {
+ .deviceId = getDeviceId(),
+ .input_gpio =
+ {
+ // {PC6, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true},
+ },
+ .output_gpio =
+ {
+ // {PD0, ZGPIO::kMode_nopull, false, false},
+ },
+ };
+ initer.init(&cfg);
+ initer.loop();
}
diff --git a/usrc/project_configs.h b/usrc/project_configs.h
index 0aaa3db..e7c7d4a 100644
--- a/usrc/project_configs.h
+++ b/usrc/project_configs.h
@@ -1,46 +1,21 @@
#pragma once
-#define VERSION "v1.0.0"
-#define MANUFACTURER "http://www.iflytop.com/"
-#define PROJECT_NAME "xy_robot_board"
-#define DEBUG_UART huart1
-#define DEBUG_LIGHT_GPIO PE2
+#define PC_VERSION "v1.0.0"
+#define PC_MANUFACTURER "http://www.iflytop.com/"
+#define PC_PROJECT_NAME "xy_robot_board"
+#define PC_IFLYTOP_ENABLE_OS 1
-#define DELAY_US_TIMER htim6 // US延时定时器
-#define TIM_IRQ_SCHEDULER_TIMER htim7 // 中断定时器中断调度器
-#define IFLTYOP_ZTICKET_TIMER TIM11 // 系统ticket定时器
+#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
-#define IFLYTOP_ENABLE_OS 1
-#define IFLYTOP_PREEMPTPRIORITY_DEFAULT 5
+#define PC_SYS_DELAY_US_TIMER htim6 // US延时定时器
+#define PC_SYS_ZTICKET_TIMER TIM11 // 系统ticket定时器
+#define PC_SYS_TIM_IRQ_SCHEDULER_TIMER htim7 // 中断定时器中断调度器
-#define MODULE_ID (1)
-#define BOARD_ID (1)
+#define PC_IRQ_PREEMPTPRIORITY_DEFAULT 5
-/****************************************FLASH***************************************/
-#define IFLYTOP_NVS_CONFIG_FLASH_SECTOR 8
-/*********************************************************************************/
-
-// MOTOR1
-#define TMC_MOTOR1_CHANNEL 1
-#define TMC_MOTOR1_SPI_SELECT1_IO PA4
-#define TMC_MOTOR1_nFREEZE_IO PC2
-#define TMC_MOTOR1_nRESET_IO PB3
-#define TMC_MOTOR1_SUB_IC_ENN_IO PC3
-#define TMC_MOTOR1_ENN_IO // unused
-
-// MOTOR2
-#define TMC_MOTOR2_CHANNEL 2
-#define TMC_MOTOR2_SPI_SELECT1_IO PA8
-#define TMC_MOTOR2_nFREEZE_IO PC6
-#define TMC_MOTOR2_nRESET_IO PB2
-#define TMC_MOTOR2_SUB_IC_ENN_IO PC7
-#define TMC_MOTOR2_ENN_IO // unused
-
-#define ARM_SENSOR1_GPIO PD0
-#define ARM_SENSOR2_GPIO PD1
-#define ARM_SENSOR3_GPIO PD2
-#define ARM_SENSOR4_GPIO PD3
-#define ARM_SENSOR5_GPIO PD4
-#define ARM_SENSOR6_GPIO PD5
-#define ARM_SENSOR7_GPIO PD6
-#define ARM_SENSOR8_GPIO PD7
+#define PC_NVS_ENABLE 1
+#define PC_NVS_CONFIG_FLASH_SECTOR 8
+#define PC_NVS_INIT_CB nvs_init_cb