diff --git a/.cproject b/.cproject
index ea18d87..b6f58c3 100644
--- a/.cproject
+++ b/.cproject
@@ -79,7 +79,7 @@
-
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 08c9439..7f62e8b 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/Core/Inc/stm32f4xx_it.h b/Core/Inc/stm32f4xx_it.h
index ceb48fd..1f4b0d0 100644
--- a/Core/Inc/stm32f4xx_it.h
+++ b/Core/Inc/stm32f4xx_it.h
@@ -52,6 +52,7 @@ void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void DebugMon_Handler(void);
+void DMA1_Stream0_IRQHandler(void);
void DMA1_Stream1_IRQHandler(void);
void DMA1_Stream3_IRQHandler(void);
void DMA1_Stream5_IRQHandler(void);
@@ -63,6 +64,8 @@ void CAN1_SCE_IRQHandler(void);
void TIM1_UP_TIM10_IRQHandler(void);
void TIM1_TRG_COM_TIM11_IRQHandler(void);
void USART1_IRQHandler(void);
+void DMA1_Stream7_IRQHandler(void);
+void UART5_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void TIM7_IRQHandler(void);
/* USER CODE BEGIN EFP */
diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h
index 600bc69..a9da828 100644
--- a/Core/Inc/usart.h
+++ b/Core/Inc/usart.h
@@ -32,6 +32,8 @@ extern "C" {
/* USER CODE END Includes */
+extern UART_HandleTypeDef huart5;
+
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
@@ -42,6 +44,7 @@ extern UART_HandleTypeDef huart3;
/* USER CODE END Private defines */
+void MX_UART5_Init(void);
void MX_USART1_UART_Init(void);
void MX_USART2_UART_Init(void);
void MX_USART3_UART_Init(void);
diff --git a/Core/Src/dma.c b/Core/Src/dma.c
index ee8905e..dbc5926 100644
--- a/Core/Src/dma.c
+++ b/Core/Src/dma.c
@@ -43,6 +43,9 @@ void MX_DMA_Init(void)
__HAL_RCC_DMA1_CLK_ENABLE();
/* DMA interrupt init */
+ /* DMA1_Stream0_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
/* DMA1_Stream1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
@@ -55,6 +58,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);
+ /* DMA1_Stream7_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn);
}
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index a6ccf0e..2468a66 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -45,6 +45,8 @@ void MX_GPIO_Init(void)
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
}
diff --git a/Core/Src/main.c b/Core/Src/main.c
index e88076c..3bd6a40 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -99,6 +99,7 @@ int main(void)
MX_USART2_UART_Init();
MX_TIM10_Init();
MX_USART3_UART_Init();
+ MX_UART5_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c
index 4fe4406..e299b66 100644
--- a/Core/Src/stm32f4xx_it.c
+++ b/Core/Src/stm32f4xx_it.c
@@ -59,10 +59,13 @@ extern CAN_HandleTypeDef hcan1;
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
extern TIM_HandleTypeDef htim10;
+extern DMA_HandleTypeDef hdma_uart5_rx;
+extern DMA_HandleTypeDef hdma_uart5_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern DMA_HandleTypeDef hdma_usart2_tx;
extern DMA_HandleTypeDef hdma_usart3_rx;
extern DMA_HandleTypeDef hdma_usart3_tx;
+extern UART_HandleTypeDef huart5;
extern UART_HandleTypeDef huart1;
extern TIM_HandleTypeDef htim11;
@@ -169,6 +172,20 @@ void DebugMon_Handler(void)
/******************************************************************************/
/**
+ * @brief This function handles DMA1 stream0 global interrupt.
+ */
+void DMA1_Stream0_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
+
+ /* USER CODE END DMA1_Stream0_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_uart5_rx);
+ /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
+
+ /* USER CODE END DMA1_Stream0_IRQn 1 */
+}
+
+/**
* @brief This function handles DMA1 stream1 global interrupt.
*/
void DMA1_Stream1_IRQHandler(void)
@@ -323,6 +340,34 @@ void USART1_IRQHandler(void)
}
/**
+ * @brief This function handles DMA1 stream7 global interrupt.
+ */
+void DMA1_Stream7_IRQHandler(void)
+{
+ /* USER CODE BEGIN DMA1_Stream7_IRQn 0 */
+
+ /* USER CODE END DMA1_Stream7_IRQn 0 */
+ HAL_DMA_IRQHandler(&hdma_uart5_tx);
+ /* USER CODE BEGIN DMA1_Stream7_IRQn 1 */
+
+ /* USER CODE END DMA1_Stream7_IRQn 1 */
+}
+
+/**
+ * @brief This function handles UART5 global interrupt.
+ */
+void UART5_IRQHandler(void)
+{
+ /* USER CODE BEGIN UART5_IRQn 0 */
+
+ /* USER CODE END UART5_IRQn 0 */
+ HAL_UART_IRQHandler(&huart5);
+ /* USER CODE BEGIN UART5_IRQn 1 */
+
+ /* USER CODE END UART5_IRQn 1 */
+}
+
+/**
* @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts.
*/
void TIM6_DAC_IRQHandler(void)
diff --git a/Core/Src/usart.c b/Core/Src/usart.c
index d3c3b7a..fdcfd45 100644
--- a/Core/Src/usart.c
+++ b/Core/Src/usart.c
@@ -24,14 +24,45 @@
/* USER CODE END 0 */
+UART_HandleTypeDef huart5;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
+DMA_HandleTypeDef hdma_uart5_rx;
+DMA_HandleTypeDef hdma_uart5_tx;
DMA_HandleTypeDef hdma_usart2_rx;
DMA_HandleTypeDef hdma_usart2_tx;
DMA_HandleTypeDef hdma_usart3_rx;
DMA_HandleTypeDef hdma_usart3_tx;
+/* UART5 init function */
+void MX_UART5_Init(void)
+{
+
+ /* USER CODE BEGIN UART5_Init 0 */
+
+ /* USER CODE END UART5_Init 0 */
+
+ /* USER CODE BEGIN UART5_Init 1 */
+
+ /* USER CODE END UART5_Init 1 */
+ huart5.Instance = UART5;
+ huart5.Init.BaudRate = 115200;
+ huart5.Init.WordLength = UART_WORDLENGTH_8B;
+ huart5.Init.StopBits = UART_STOPBITS_1;
+ huart5.Init.Parity = UART_PARITY_NONE;
+ huart5.Init.Mode = UART_MODE_TX_RX;
+ huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ huart5.Init.OverSampling = UART_OVERSAMPLING_16;
+ if (HAL_UART_Init(&huart5) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN UART5_Init 2 */
+
+ /* USER CODE END UART5_Init 2 */
+
+}
/* USART1 init function */
void MX_USART1_UART_Init(void)
@@ -124,7 +155,79 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
- if(uartHandle->Instance==USART1)
+ if(uartHandle->Instance==UART5)
+ {
+ /* USER CODE BEGIN UART5_MspInit 0 */
+
+ /* USER CODE END UART5_MspInit 0 */
+ /* UART5 clock enable */
+ __HAL_RCC_UART5_CLK_ENABLE();
+
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+ /**UART5 GPIO Configuration
+ PC12 ------> UART5_TX
+ PD2 ------> UART5_RX
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_12;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF8_UART5;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ GPIO_InitStruct.Pin = GPIO_PIN_2;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF8_UART5;
+ HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
+ /* UART5 DMA Init */
+ /* UART5_RX Init */
+ hdma_uart5_rx.Instance = DMA1_Stream0;
+ hdma_uart5_rx.Init.Channel = DMA_CHANNEL_4;
+ hdma_uart5_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
+ hdma_uart5_rx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_uart5_rx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_uart5_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_uart5_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+ hdma_uart5_rx.Init.Mode = DMA_NORMAL;
+ hdma_uart5_rx.Init.Priority = DMA_PRIORITY_LOW;
+ hdma_uart5_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
+ if (HAL_DMA_Init(&hdma_uart5_rx) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ __HAL_LINKDMA(uartHandle,hdmarx,hdma_uart5_rx);
+
+ /* UART5_TX Init */
+ hdma_uart5_tx.Instance = DMA1_Stream7;
+ hdma_uart5_tx.Init.Channel = DMA_CHANNEL_4;
+ hdma_uart5_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+ hdma_uart5_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+ hdma_uart5_tx.Init.MemInc = DMA_MINC_ENABLE;
+ hdma_uart5_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+ hdma_uart5_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+ hdma_uart5_tx.Init.Mode = DMA_NORMAL;
+ hdma_uart5_tx.Init.Priority = DMA_PRIORITY_LOW;
+ hdma_uart5_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
+ if (HAL_DMA_Init(&hdma_uart5_tx) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ __HAL_LINKDMA(uartHandle,hdmatx,hdma_uart5_tx);
+
+ /* UART5 interrupt Init */
+ HAL_NVIC_SetPriority(UART5_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(UART5_IRQn);
+ /* USER CODE BEGIN UART5_MspInit 1 */
+
+ /* USER CODE END UART5_MspInit 1 */
+ }
+ else if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 */
@@ -278,7 +381,33 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
- if(uartHandle->Instance==USART1)
+ if(uartHandle->Instance==UART5)
+ {
+ /* USER CODE BEGIN UART5_MspDeInit 0 */
+
+ /* USER CODE END UART5_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_UART5_CLK_DISABLE();
+
+ /**UART5 GPIO Configuration
+ PC12 ------> UART5_TX
+ PD2 ------> UART5_RX
+ */
+ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12);
+
+ HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
+
+ /* UART5 DMA DeInit */
+ HAL_DMA_DeInit(uartHandle->hdmarx);
+ HAL_DMA_DeInit(uartHandle->hdmatx);
+
+ /* UART5 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(UART5_IRQn);
+ /* USER CODE BEGIN UART5_MspDeInit 1 */
+
+ /* USER CODE END UART5_MspDeInit 1 */
+ }
+ else if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 */
diff --git a/Intelligent_winding_robot_main_board.ioc b/Intelligent_winding_robot_main_board.ioc
index 77cb4ad..33b2af5 100644
--- a/Intelligent_winding_robot_main_board.ioc
+++ b/Intelligent_winding_robot_main_board.ioc
@@ -18,7 +18,29 @@ Dma.Request0=USART3_RX
Dma.Request1=USART3_TX
Dma.Request2=USART2_RX
Dma.Request3=USART2_TX
-Dma.RequestsNb=4
+Dma.Request4=UART5_RX
+Dma.Request5=UART5_TX
+Dma.RequestsNb=6
+Dma.UART5_RX.4.Direction=DMA_PERIPH_TO_MEMORY
+Dma.UART5_RX.4.FIFOMode=DMA_FIFOMODE_DISABLE
+Dma.UART5_RX.4.Instance=DMA1_Stream0
+Dma.UART5_RX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.UART5_RX.4.MemInc=DMA_MINC_ENABLE
+Dma.UART5_RX.4.Mode=DMA_NORMAL
+Dma.UART5_RX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.UART5_RX.4.PeriphInc=DMA_PINC_DISABLE
+Dma.UART5_RX.4.Priority=DMA_PRIORITY_LOW
+Dma.UART5_RX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
+Dma.UART5_TX.5.Direction=DMA_MEMORY_TO_PERIPH
+Dma.UART5_TX.5.FIFOMode=DMA_FIFOMODE_DISABLE
+Dma.UART5_TX.5.Instance=DMA1_Stream7
+Dma.UART5_TX.5.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.UART5_TX.5.MemInc=DMA_MINC_ENABLE
+Dma.UART5_TX.5.Mode=DMA_NORMAL
+Dma.UART5_TX.5.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.UART5_TX.5.PeriphInc=DMA_PINC_DISABLE
+Dma.UART5_TX.5.Priority=DMA_PRIORITY_LOW
+Dma.UART5_TX.5.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode
Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.USART2_RX.2.Instance=DMA1_Stream5
@@ -72,8 +94,9 @@ Mcu.CPN=STM32F407ZGT6
Mcu.Family=STM32F4
Mcu.IP0=CAN1
Mcu.IP1=DMA
-Mcu.IP10=USART2
-Mcu.IP11=USART3
+Mcu.IP10=USART1
+Mcu.IP11=USART2
+Mcu.IP12=USART3
Mcu.IP2=FREERTOS
Mcu.IP3=NVIC
Mcu.IP4=RCC
@@ -81,17 +104,19 @@ Mcu.IP5=SYS
Mcu.IP6=TIM6
Mcu.IP7=TIM7
Mcu.IP8=TIM10
-Mcu.IP9=USART1
-Mcu.IPNb=12
+Mcu.IP9=UART5
+Mcu.IPNb=13
Mcu.Name=STM32F407Z(E-G)Tx
Mcu.Package=LQFP144
Mcu.Pin0=PA2
Mcu.Pin1=PA3
-Mcu.Pin10=VP_FREERTOS_VS_CMSIS_V1
-Mcu.Pin11=VP_SYS_VS_tim11
-Mcu.Pin12=VP_TIM6_VS_ClockSourceINT
-Mcu.Pin13=VP_TIM7_VS_ClockSourceINT
-Mcu.Pin14=VP_TIM10_VS_ClockSourceINT
+Mcu.Pin10=PC12
+Mcu.Pin11=PD2
+Mcu.Pin12=VP_FREERTOS_VS_CMSIS_V1
+Mcu.Pin13=VP_SYS_VS_tim11
+Mcu.Pin14=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin15=VP_TIM7_VS_ClockSourceINT
+Mcu.Pin16=VP_TIM10_VS_ClockSourceINT
Mcu.Pin2=PB10
Mcu.Pin3=PB11
Mcu.Pin4=PA9
@@ -100,7 +125,7 @@ Mcu.Pin6=PA11
Mcu.Pin7=PA12
Mcu.Pin8=PA13
Mcu.Pin9=PA14
-Mcu.PinsNb=15
+Mcu.PinsNb=17
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407ZGTx
@@ -111,10 +136,12 @@ NVIC.CAN1_RX0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.CAN1_RX1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
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_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\: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.DMA1_Stream7_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
@@ -133,6 +160,7 @@ NVIC.TIM6_DAC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.TIM7_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.TimeBase=TIM1_TRG_COM_TIM11_IRQn
NVIC.TimeBaseIP=TIM11
+NVIC.UART5_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
PA10.Mode=Asynchronous
@@ -155,6 +183,10 @@ PB10.Mode=Asynchronous
PB10.Signal=USART3_TX
PB11.Mode=Asynchronous
PB11.Signal=USART3_RX
+PC12.Mode=Asynchronous
+PC12.Signal=UART5_TX
+PD2.Mode=Asynchronous
+PD2.Signal=UART5_RX
PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
@@ -186,7 +218,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_CAN1_Init-CAN1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true,9-MX_TIM10_Init-TIM10-false-HAL-true,10-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_CAN1_Init-CAN1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_USART1_UART_Init-USART1-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true,9-MX_TIM10_Init-TIM10-false-HAL-true,10-MX_USART3_UART_Init-USART3-false-HAL-true,11-MX_UART5_Init-UART5-false-HAL-true
RCC.48MHZClocksFreq_Value=72000000
RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
@@ -219,6 +251,8 @@ RCC.VCOI2SOutputFreq_Value=384000000
RCC.VCOInputFreq_Value=2000000
RCC.VCOOutputFreq_Value=288000000
RCC.VcooutputI2S=192000000
+UART5.IPParameters=VirtualMode
+UART5.VirtualMode=Asynchronous
USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC
USART2.IPParameters=VirtualMode
diff --git a/sdk b/sdk
index 1a999a2..089069f 160000
--- a/sdk
+++ b/sdk
@@ -1 +1 @@
-Subproject commit 1a999a25f569cc1b6a52203f6114fa0c34f2ac9c
+Subproject commit 089069f6ef3ae015b315835f83f520e800b785b1
diff --git a/usrc/main.cpp b/usrc/main.cpp
index 2a4b94f..0545025 100644
--- a/usrc/main.cpp
+++ b/usrc/main.cpp
@@ -7,7 +7,7 @@
#include "feite_servo_motor.hpp"
#include "sdk/os/zos.hpp"
//
-#include "sdk\components\cmdscheduler\cmd_scheduler.hpp"
+// #include "sdk\components\cmdscheduler\cmd_scheduler.hpp"
#include "sdk\components\eq_20_asb_motor\eq20_servomotor.hpp"
#include "sdk\components\iflytop_can_slave_module_master_end\stepmotor.hpp"
#include "sdk\components\iflytop_can_slave_v1\iflytop_can_master.hpp"
@@ -16,9 +16,8 @@
#include "sdk\components\zcancmder\zcanreceiver_master.hpp"
//
#include "sdk\components/step_motor_ctrl_module/step_motor_ctrl_script_cmder_module.hpp"
-
#include "sdk\components/xy_robot_ctrl_module/xy_robot_script_cmder_module.hpp"
-
+#include "sdk\components\cmdscheduler\cmd_scheduler_v2.hpp"
#include "sdk\components\eq_20_asb_motor\script_cmder_eq20_servomotor.hpp"
#include "sdk\components\mini_servo_motor\mini_servo_motor_ctrl_module.hpp"
#include "sdk\components\mini_servo_motor\scirpt_cmder_mini_servo_motor_ctrl_module.hpp"
@@ -27,6 +26,10 @@
// #include "sdk\components\zcancmder_master_module/zcan_master_step_motor_ctrl_module.hpp"
// #include "sdk\components\zcancmder_master_module\zcan_xy_robot_master_module.hpp"
+#include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp"
+#include "sdk\components\zprotocols\zcancmder_v2\protocol_proxy.hpp"
+#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp"
+#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_script_cmder_paser.hpp"
#define TAG "main"
namespace iflytop {
Main gmain;
@@ -94,7 +97,7 @@ static StepMotor45::cfg_t cfg3 = {
.driverPin = {PG6, PG7, PG8, PC6},
.driverPinMirror = true,
};
-
+#if 0
static StepMotor45::cfg_t cfg4 = {
.max_pos = -1,
.enable_zero_limit = false,
@@ -132,36 +135,31 @@ static StepMotor45::cfg_t cfg6 = {
.driverPin = {PC12, PD3, PD5, PD7},
.driverPinMirror = true,
};
+#endif
namespace iflytop {
/*******************************************************************************
* 基础组件 *
*******************************************************************************/
-ZCanCommnaderMaster m_zcanCommnaderMaster;
-CmdScheduler g_cmdScheduler;
-ModbusBlockHost g_modbusblockhost;
-FeiTeServoMotor g_feiteservomotor_bus;
+CmdSchedulerV2 g_cmdScheduler; // 串口字符串指令总线
+ZCanCommnaderMaster m_zcanCommnaderMaster; // can总线
+ModbusBlockHost g_modbusblockhost; // modbus总线
+FeiTeServoMotor g_feiteservomotor_bus; // 飞特舵机总线
+ZModuleDeviceManager g_zmodule_device_manager; // 用于管理所有的设备
+MicroComputerModuleDeviceScriptCmderPaser g_zmodule_device_script_cmder_paser; // 用于解析所有的设备指令
+StepMotor45Scheduler step_motor45_scheduler; // 45步进电机调度器
/*******************************************************************************
* 本地设备 *
*******************************************************************************/
-StepMotor45 g_step_motor45[7];
Eq20ServoMotor g_main_servo_motor;
+StepMotor45 g_step_motor45[7];
MiniRobotCtrlModule g_mini_servo[6];
/*******************************************************************************
* CAN设备 *
*******************************************************************************/
-I_XYRobotCtrlModule* g_xyrobotctrlmodule = nullptr;
-I_StepMotorCtrlModule* g_z_step_motor = nullptr;
-
-/*******************************************************************************
- * 串口指令 *
- *******************************************************************************/
-StepMotorCtrlScriptCmderModule g_step_motor_ctrl_script_cmder_module;
-XYRobotScriptCmderModule g_script_xyrobot;
-ScriptCmderEq20Servomotor g_script_eq20servomotor;
-ScirptCmderMiniServoMotorCtrlModule g_script_mini_servo_motor_ctrl_module;
-ScriptCmderStepMotor45 g_script_step_motor45;
+ZIProtocolProxy g_xyrobotctrlmodule;
+ZIProtocolProxy g_z_step_motor;
} // namespace iflytop
@@ -181,75 +179,54 @@ void Main::run() {
*******************************************************************************/
chip_init(&chipcfg);
-
zos_cfg_t zoscfg;
zos_init(&zoscfg);
/*******************************************************************************
* 总线初始化 *
*******************************************************************************/
- // 指令总线
- g_cmdScheduler.initialize(&DEBUG_UART, 1000);
- // can总线
- auto* cfg = m_zcanCommnaderMaster.createCFG();
- m_zcanCommnaderMaster.init(cfg);
- // 飞特舵机总线
- g_feiteservomotor_bus.initialize(&huart3, &hdma_usart3_rx, &hdma_usart3_tx);
- // modbus总线
- g_modbusblockhost.initialize(&huart2, &hdma_usart2_tx, &hdma_usart2_rx);
- g_main_servo_motor.init(&g_modbusblockhost, 1);
+ g_cmdScheduler.initialize(&DEBUG_UART, 1000); // 串口字符串指令总线
+ auto* cfg = m_zcanCommnaderMaster.createCFG(); // can总线配置
+ m_zcanCommnaderMaster.init(cfg); // can总线
+ g_modbusblockhost.initialize(&huart2, &hdma_usart2_tx, &hdma_usart2_rx); // modbus总线
+ g_feiteservomotor_bus.initialize(&huart3, &hdma_usart3_rx, &hdma_usart3_tx); // 飞特舵机总线
+ step_motor45_scheduler.initialize(&htim10);
+ // 设备管理器初始化
+ g_zmodule_device_manager.initialize(&m_zcanCommnaderMaster);
+ // 设备指令解析器初始化
+ g_zmodule_device_script_cmder_paser.initialize(&g_cmdScheduler, &g_zmodule_device_manager);
+
/*******************************************************************************
* 设备构造和初始化 *
*******************************************************************************/
- // g_z_step_motor = zcancmder_master::create_zcan_master_step_motor_ctrl_module(&m_zcanCommnaderMaster, 1);
- // ZASSERT(g_z_step_motor != nullptr);
-
- // g_xyrobotctrlmodule = zcancmder_master::create_xyrobot_ctrl_module(&m_zcanCommnaderMaster, 1);
- g_mini_servo[0].initialize(1, &g_feiteservomotor_bus, 1);
- g_mini_servo[1].initialize(2, &g_feiteservomotor_bus, 2);
- g_mini_servo[2].initialize(3, &g_feiteservomotor_bus, 3);
- g_mini_servo[3].initialize(4, &g_feiteservomotor_bus, 4);
- g_mini_servo[4].initialize(5, &g_feiteservomotor_bus, 5);
- g_mini_servo[5].initialize(6, &g_feiteservomotor_bus, 6);
-
- StepMotor45Scheduler step_motor45_scheduler;
- step_motor45_scheduler.initialize(&htim10);
-
- g_step_motor45[0].initialize(1, &step_motor45_scheduler, cfg1);
- g_step_motor45[1].initialize(2, &step_motor45_scheduler, cfg2);
- g_step_motor45[2].initialize(3, &step_motor45_scheduler, cfg3);
- g_step_motor45[3].initialize(4, &step_motor45_scheduler, cfg4);
- g_step_motor45[4].initialize(5, &step_motor45_scheduler, cfg5);
- g_step_motor45[5].initialize(6, &step_motor45_scheduler, cfg6);
+ g_main_servo_motor.init(2, &g_modbusblockhost, 1);
+ g_xyrobotctrlmodule.initialize(3, &m_zcanCommnaderMaster);
+ g_z_step_motor.initialize(4, &m_zcanCommnaderMaster);
+
+ g_mini_servo[0].initialize(11, &g_feiteservomotor_bus, 1);
+ g_mini_servo[1].initialize(12, &g_feiteservomotor_bus, 2);
+ g_mini_servo[2].initialize(13, &g_feiteservomotor_bus, 3);
+ g_mini_servo[3].initialize(14, &g_feiteservomotor_bus, 4);
+ g_mini_servo[4].initialize(15, &g_feiteservomotor_bus, 5);
+ g_mini_servo[5].initialize(16, &g_feiteservomotor_bus, 6);
+
+ g_step_motor45[0].initialize(21, &step_motor45_scheduler, cfg1);
+ g_step_motor45[1].initialize(22, &step_motor45_scheduler, cfg2);
+ g_step_motor45[2].initialize(23, &step_motor45_scheduler, cfg3);
step_motor45_scheduler.start();
- /*******************************************************************************
- * CMD *
- *******************************************************************************/
- g_script_eq20servomotor.initialize(&g_cmdScheduler);
- g_script_eq20servomotor.regmodule(1, &g_main_servo_motor);
-
- g_step_motor_ctrl_script_cmder_module.initialize(&g_cmdScheduler);
- g_step_motor_ctrl_script_cmder_module.regmodule(1, g_z_step_motor);
-
- g_script_xyrobot.initialize(&g_cmdScheduler);
- g_script_xyrobot.regmodule(1, g_xyrobotctrlmodule);
-
- g_script_mini_servo_motor_ctrl_module.initialize(&g_cmdScheduler);
- g_script_mini_servo_motor_ctrl_module.regmodule(1, &g_mini_servo[0]);
- g_script_mini_servo_motor_ctrl_module.regmodule(2, &g_mini_servo[1]);
- g_script_mini_servo_motor_ctrl_module.regmodule(3, &g_mini_servo[2]);
- g_script_mini_servo_motor_ctrl_module.regmodule(4, &g_mini_servo[3]);
- g_script_mini_servo_motor_ctrl_module.regmodule(5, &g_mini_servo[4]);
- g_script_mini_servo_motor_ctrl_module.regmodule(6, &g_mini_servo[5]);
-
- g_script_step_motor45.initialize(&g_cmdScheduler);
- g_script_step_motor45.regmodule(1, &g_step_motor45[0]);
- g_script_step_motor45.regmodule(2, &g_step_motor45[1]);
- g_script_step_motor45.regmodule(3, &g_step_motor45[2]);
- g_script_step_motor45.regmodule(4, &g_step_motor45[3]);
- g_script_step_motor45.regmodule(5, &g_step_motor45[4]);
- g_script_step_motor45.regmodule(6, &g_step_motor45[5]);
+ g_zmodule_device_manager.registerModule(&g_main_servo_motor);
+ g_zmodule_device_manager.registerModule(&g_xyrobotctrlmodule);
+ g_zmodule_device_manager.registerModule(&g_z_step_motor);
+ g_zmodule_device_manager.registerModule(&g_mini_servo[0]);
+ g_zmodule_device_manager.registerModule(&g_mini_servo[1]);
+ g_zmodule_device_manager.registerModule(&g_mini_servo[2]);
+ g_zmodule_device_manager.registerModule(&g_mini_servo[3]);
+ g_zmodule_device_manager.registerModule(&g_mini_servo[4]);
+ g_zmodule_device_manager.registerModule(&g_mini_servo[5]);
+ g_zmodule_device_manager.registerModule(&g_step_motor45[0]);
+ g_zmodule_device_manager.registerModule(&g_step_motor45[1]);
+ g_zmodule_device_manager.registerModule(&g_step_motor45[2]);
#if 0
step_motor_cmd_reg();