diff --git a/AutoGuideStick.ioc b/AutoGuideStick.ioc
index 5052dc5..54575d1 100644
--- a/AutoGuideStick.ioc
+++ b/AutoGuideStick.ioc
@@ -16,8 +16,8 @@ GPDMA1.IPHANDLE_GPDMACH5-SIMPLEREQUEST_GPDMACH5=__NULL
GPDMA1.IPParameters=REQUEST_GPDMACH4,DIRECTION_GPDMACH4,SRCINC_GPDMACH4,CIRCULARMODE_GPDMACH5,LINKALLOCATEDPORT_CIRCULAR_GPDMACH5,REQUEST_GPDMACH5,TRANSFERALLOCATEDPORTSRC_GPDMACH5,TRANSFERALLOCATEDPORTDEST_GPDMACH5,IPHANDLE_GPDMACH5-SIMPLEREQUEST_GPDMACH5,IPHANDLE_GPDMACH4-SIMPLEREQUEST_GPDMACH4,CIRCULARMODE_GPDMACH3,IPHANDLE_GPDMACH3-SIMPLEREQUEST_GPDMACH3,REQUEST_GPDMACH3
GPDMA1.LINKALLOCATEDPORT_CIRCULAR_GPDMACH5=DMA_LINK_ALLOCATED_PORT1
GPDMA1.REQUEST_GPDMACH3=GPDMA1_REQUEST_USART2_RX
-GPDMA1.REQUEST_GPDMACH4=GPDMA1_REQUEST_USART1_TX
-GPDMA1.REQUEST_GPDMACH5=GPDMA1_REQUEST_USART1_RX
+GPDMA1.REQUEST_GPDMACH4=GPDMA1_REQUEST_UART4_TX
+GPDMA1.REQUEST_GPDMACH5=GPDMA1_REQUEST_UART4_RX
GPDMA1.SRCINC_GPDMACH4=DMA_SINC_INCREMENTED
GPDMA1.TRANSFERALLOCATEDPORTDEST_GPDMACH5=DMA_DEST_ALLOCATED_PORT1
GPDMA1.TRANSFERALLOCATEDPORTSRC_GPDMACH5=DMA_SRC_ALLOCATED_PORT1
@@ -30,11 +30,14 @@ Mcu.ContextProject=TrustZoneDisabled
Mcu.Family=STM32H5
Mcu.IP0=BOOTPATH
Mcu.IP1=CORTEX_M33_NS
-Mcu.IP10=TIM2
-Mcu.IP11=TIM3
-Mcu.IP12=USART1
-Mcu.IP13=USART2
-Mcu.IP14=USART3
+Mcu.IP10=TIM1
+Mcu.IP11=TIM2
+Mcu.IP12=TIM3
+Mcu.IP13=TIM4
+Mcu.IP14=TIM8
+Mcu.IP15=UART4
+Mcu.IP16=USART2
+Mcu.IP17=USART3
Mcu.IP2=DEBUG
Mcu.IP3=GPDMA1
Mcu.IP4=MEMORYMAP
@@ -43,35 +46,46 @@ Mcu.IP6=PWR
Mcu.IP7=RCC
Mcu.IP8=SYS
Mcu.IP9=THREADX
-Mcu.IPNb=15
+Mcu.IPNb=18
Mcu.Name=STM32H563ZITx
Mcu.Package=LQFP144
Mcu.Pin0=PH0-OSC_IN(PH0)
-Mcu.Pin1=PB14
-Mcu.Pin10=PD2
-Mcu.Pin11=PD5
-Mcu.Pin12=PD6
-Mcu.Pin13=VP_CORTEX_M33_NS_VS_Hclk
-Mcu.Pin14=VP_GPDMA1_VS_GPDMACH3
-Mcu.Pin15=VP_GPDMA1_VS_GPDMACH4
-Mcu.Pin16=VP_GPDMA1_VS_GPDMACH5
-Mcu.Pin17=VP_PWR_VS_SECSignals
-Mcu.Pin18=VP_PWR_VS_LPOM
-Mcu.Pin19=VP_SYS_VS_tim1
-Mcu.Pin2=PB15
-Mcu.Pin20=VP_THREADX_VS_RTOSJjThreadXJjCoreJjDefault
-Mcu.Pin21=VP_TIM2_VS_ClockSourceINT
-Mcu.Pin22=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin23=VP_BOOTPATH_VS_BOOTPATH
-Mcu.Pin24=VP_MEMORYMAP_VS_MEMORYMAP
-Mcu.Pin3=PC8
-Mcu.Pin4=PC9
-Mcu.Pin5=PA13(JTMS/SWDIO)
-Mcu.Pin6=PA14(JTCK/SWCLK)
-Mcu.Pin7=PC10
-Mcu.Pin8=PC11
-Mcu.Pin9=PC12
-Mcu.PinsNb=25
+Mcu.Pin1=PC2
+Mcu.Pin10=PC7
+Mcu.Pin11=PC8
+Mcu.Pin12=PC9
+Mcu.Pin13=PA13(JTMS/SWDIO)
+Mcu.Pin14=PA14(JTCK/SWCLK)
+Mcu.Pin15=PC10
+Mcu.Pin16=PC11
+Mcu.Pin17=PC12
+Mcu.Pin18=PD2
+Mcu.Pin19=PD5
+Mcu.Pin2=PB1
+Mcu.Pin20=PD6
+Mcu.Pin21=PB8
+Mcu.Pin22=PB9
+Mcu.Pin23=VP_CORTEX_M33_NS_VS_Hclk
+Mcu.Pin24=VP_GPDMA1_VS_GPDMACH3
+Mcu.Pin25=VP_GPDMA1_VS_GPDMACH4
+Mcu.Pin26=VP_GPDMA1_VS_GPDMACH5
+Mcu.Pin27=VP_PWR_VS_SECSignals
+Mcu.Pin28=VP_PWR_VS_LPOM
+Mcu.Pin29=VP_SYS_VS_tim5
+Mcu.Pin3=PG0
+Mcu.Pin30=VP_THREADX_VS_RTOSJjThreadXJjCoreJjDefault
+Mcu.Pin31=VP_TIM2_VS_ClockSourceINT
+Mcu.Pin32=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin33=VP_TIM4_VS_ClockSourceINT
+Mcu.Pin34=VP_BOOTPATH_VS_BOOTPATH
+Mcu.Pin35=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin4=PG1
+Mcu.Pin5=PE9
+Mcu.Pin6=PE11
+Mcu.Pin7=PG2
+Mcu.Pin8=PG3
+Mcu.Pin9=PC6
+Mcu.PinsNb=36
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H563ZITx
@@ -93,11 +107,12 @@ NVIC.SavedPendsvIrqHandlerGenerated=true
NVIC.SavedSvcallIrqHandlerGenerated=true
NVIC.SavedSystickIrqHandlerGenerated=true
NVIC.SysTick_IRQn=true\:14\:0\:false\:false\:false\:false\:false\:true\:false
-NVIC.TIM1_UP_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
-NVIC.TimeBase=TIM1_UP_IRQn
-NVIC.TimeBaseIP=TIM1
-NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
+NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
+NVIC.TIM5_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true
+NVIC.TimeBase=TIM5_IRQn
+NVIC.TimeBaseIP=TIM5
+NVIC.UART4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
@@ -105,10 +120,16 @@ PA13(JTMS/SWDIO).Mode=Serial_Wire
PA13(JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO
PA14(JTCK/SWCLK).Mode=Serial_Wire
PA14(JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
-PB14.Mode=Asynchronous
-PB14.Signal=USART1_TX
-PB15.Mode=Asynchronous
-PB15.Signal=USART1_RX
+PB1.GPIOParameters=GPIO_Label
+PB1.GPIO_Label=PWMB
+PB1.Locked=true
+PB1.Signal=S_TIM3_CH4
+PB8.Locked=true
+PB8.Mode=Asynchronous
+PB8.Signal=UART4_RX
+PB9.Locked=true
+PB9.Mode=Asynchronous
+PB9.Signal=UART4_TX
PC10.Locked=true
PC10.Mode=Asynchronous
PC10.Signal=USART3_TX
@@ -120,14 +141,27 @@ PC12.GPIO_Label=Shake_Motor
PC12.GPIO_PuPd=GPIO_PULLDOWN
PC12.Locked=true
PC12.Signal=GPIO_Output
+PC2.GPIOParameters=GPIO_Label
+PC2.GPIO_Label=PWMA
+PC2.Locked=true
+PC2.Signal=S_TIM4_CH4
+PC6.GPIOParameters=GPIO_Label
+PC6.GPIO_Label=E2A
+PC6.Locked=true
+PC6.Signal=S_TIM8_CH1
+PC7.GPIOParameters=GPIO_Label
+PC7.GPIO_Label=E2B
+PC7.Locked=true
+PC7.Signal=S_TIM8_CH2
PC8.GPIOParameters=GPIO_Label
-PC8.GPIO_Label=HC_Trig
+PC8.GPIO_Label=HC_Echo
PC8.Locked=true
-PC8.Signal=GPIO_Output
-PC9.GPIOParameters=GPIO_Label
-PC9.GPIO_Label=HC_Echo
+PC8.Signal=S_TIM3_CH3
+PC9.GPIOParameters=GPIO_PuPd,GPIO_Label
+PC9.GPIO_Label=HC_Trig
+PC9.GPIO_PuPd=GPIO_NOPULL
PC9.Locked=true
-PC9.Signal=S_TIM3_CH4
+PC9.Signal=GPIO_Output
PD2.GPIOParameters=GPIO_PuPd,GPIO_Label
PD2.GPIO_Label=Buzzer
PD2.GPIO_PuPd=GPIO_PULLDOWN
@@ -139,6 +173,30 @@ PD5.Signal=USART2_TX
PD6.Locked=true
PD6.Mode=Asynchronous
PD6.Signal=USART2_RX
+PE11.GPIOParameters=GPIO_Label
+PE11.GPIO_Label=E1B
+PE11.Locked=true
+PE11.Signal=S_TIM1_CH2
+PE9.GPIOParameters=GPIO_Label
+PE9.GPIO_Label=E1A
+PE9.Locked=true
+PE9.Signal=S_TIM1_CH1
+PG0.GPIOParameters=GPIO_Label
+PG0.GPIO_Label=AIN1
+PG0.Locked=true
+PG0.Signal=GPIO_Output
+PG1.GPIOParameters=GPIO_Label
+PG1.GPIO_Label=AIN2
+PG1.Locked=true
+PG1.Signal=GPIO_Output
+PG2.GPIOParameters=GPIO_Label
+PG2.GPIO_Label=BIN1
+PG2.Locked=true
+PG2.Signal=GPIO_Output
+PG3.GPIOParameters=GPIO_Label
+PG3.GPIO_Label=BIN2
+PG3.Locked=true
+PG3.Signal=GPIO_Output
PH0-OSC_IN(PH0).Mode=HSE-External-Clock-Source
PH0-OSC_IN(PH0).Signal=RCC_OSC_IN
PinOutPanel.RotationAngle=0
@@ -173,7 +231,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_GPDMA1_Init-GPDMA1-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_USART2_UART_Init-USART2-false-HAL-true,6-MX_TIM2_Init-TIM2-false-HAL-true,7-MX_TIM3_Init-TIM3-false-HAL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_GPDMA1_Init-GPDMA1-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true,6-MX_TIM3_Init-TIM3-false-HAL-true,7-MX_USART3_UART_Init-USART3-false-HAL-true,8-MX_TIM4_Init-TIM4-false-HAL-true,9-MX_UART4_Init-UART4-false-HAL-true,0-MX_CORTEX_M33_NS_Init-CORTEX_M33_NS-false-HAL-true,0-MX_PWR_Init-PWR-false-HAL-true
RCC.ADCFreq_Value=250000000
RCC.AHBFreq_Value=250000000
RCC.APB1Freq_Value=250000000
@@ -259,18 +317,32 @@ RCC.VCOInputFreq_Value=4000000
RCC.VCOOutputFreq_Value=500000000
RCC.VCOPLL2OutputFreq_Value=516000000
RCC.VCOPLL3OutputFreq_Value=516000000
-SH.S_TIM3_CH4.0=TIM3_CH4,Input_Capture4_from_TI4
+SH.S_TIM1_CH1.0=TIM1_CH1,Encoder_Interface
+SH.S_TIM1_CH1.ConfNb=1
+SH.S_TIM1_CH2.0=TIM1_CH2,Encoder_Interface
+SH.S_TIM1_CH2.ConfNb=1
+SH.S_TIM3_CH3.0=TIM3_CH3,Input_Capture3_from_TI3
+SH.S_TIM3_CH3.ConfNb=1
+SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
SH.S_TIM3_CH4.ConfNb=1
+SH.S_TIM4_CH4.0=TIM4_CH4,PWM Generation4 CH4
+SH.S_TIM4_CH4.ConfNb=1
+SH.S_TIM8_CH1.0=TIM8_CH1,Encoder_Interface
+SH.S_TIM8_CH1.ConfNb=1
+SH.S_TIM8_CH2.0=TIM8_CH2,Encoder_Interface
+SH.S_TIM8_CH2.ConfNb=1
THREADX.IPParameters=TX_APP_GENERATE_INIT_CODE
THREADX.TX_APP_GENERATE_INIT_CODE=false
TIM2.IPParameters=Prescaler
TIM2.Prescaler=250 - 1
-TIM3.Channel-Input_Capture4_from_TI4=TIM_CHANNEL_4
-TIM3.IPParameters=Channel-Input_Capture4_from_TI4,Prescaler
+TIM3.Channel-Input_Capture3_from_TI3=TIM_CHANNEL_3
+TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
+TIM3.IPParameters=Prescaler,Channel-PWM Generation4 CH4,Channel-Input_Capture3_from_TI3
TIM3.Prescaler=250 - 1
-USART1.BaudRate=9600
-USART1.IPParameters=VirtualMode-Asynchronous,BaudRate
-USART1.VirtualMode-Asynchronous=VM_ASYNC
+TIM4.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
+TIM4.IPParameters=Channel-PWM Generation4 CH4
+UART4.BaudRate=9600
+UART4.IPParameters=BaudRate
USART2.BaudRate=9600
USART2.IPParameters=VirtualMode-Asynchronous,BaudRate
USART2.VirtualMode-Asynchronous=VM_ASYNC
@@ -293,12 +365,14 @@ VP_PWR_VS_LPOM.Mode=PowerOptimisation
VP_PWR_VS_LPOM.Signal=PWR_VS_LPOM
VP_PWR_VS_SECSignals.Mode=Security/Privilege
VP_PWR_VS_SECSignals.Signal=PWR_VS_SECSignals
-VP_SYS_VS_tim1.Mode=TIM1
-VP_SYS_VS_tim1.Signal=SYS_VS_tim1
+VP_SYS_VS_tim5.Mode=TIM5
+VP_SYS_VS_tim5.Signal=SYS_VS_tim5
VP_THREADX_VS_RTOSJjThreadXJjCoreJjDefault.Mode=Core_Default
VP_THREADX_VS_RTOSJjThreadXJjCoreJjDefault.Signal=THREADX_VS_RTOSJjThreadXJjCoreJjDefault
VP_TIM2_VS_ClockSourceINT.Mode=Internal
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
VP_TIM3_VS_ClockSourceINT.Mode=Internal
VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
+VP_TIM4_VS_ClockSourceINT.Mode=Internal
+VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT
board=custom
diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index 2f05ebf..82f9216 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -57,10 +57,30 @@ void Error_Handler(void);
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
-#define HC_Trig_Pin GPIO_PIN_8
-#define HC_Trig_GPIO_Port GPIOC
-#define HC_Echo_Pin GPIO_PIN_9
+#define PWMA_Pin GPIO_PIN_2
+#define PWMA_GPIO_Port GPIOC
+#define PWMB_Pin GPIO_PIN_1
+#define PWMB_GPIO_Port GPIOB
+#define AIN1_Pin GPIO_PIN_0
+#define AIN1_GPIO_Port GPIOG
+#define AIN2_Pin GPIO_PIN_1
+#define AIN2_GPIO_Port GPIOG
+#define E1A_Pin GPIO_PIN_9
+#define E1A_GPIO_Port GPIOE
+#define E1B_Pin GPIO_PIN_11
+#define E1B_GPIO_Port GPIOE
+#define BIN1_Pin GPIO_PIN_2
+#define BIN1_GPIO_Port GPIOG
+#define BIN2_Pin GPIO_PIN_3
+#define BIN2_GPIO_Port GPIOG
+#define E2A_Pin GPIO_PIN_6
+#define E2A_GPIO_Port GPIOC
+#define E2B_Pin GPIO_PIN_7
+#define E2B_GPIO_Port GPIOC
+#define HC_Echo_Pin GPIO_PIN_8
#define HC_Echo_GPIO_Port GPIOC
+#define HC_Trig_Pin GPIO_PIN_9
+#define HC_Trig_GPIO_Port GPIOC
#define Shake_Motor_Pin GPIO_PIN_12
#define Shake_Motor_GPIO_Port GPIOC
#define Buzzer_Pin GPIO_PIN_2
diff --git a/Core/Inc/stm32h5xx_it.h b/Core/Inc/stm32h5xx_it.h
index 7a5917c..a037b02 100644
--- a/Core/Inc/stm32h5xx_it.h
+++ b/Core/Inc/stm32h5xx_it.h
@@ -55,11 +55,12 @@ void DebugMon_Handler(void);
void GPDMA1_Channel3_IRQHandler(void);
void GPDMA1_Channel4_IRQHandler(void);
void GPDMA1_Channel5_IRQHandler(void);
-void TIM1_UP_IRQHandler(void);
void TIM2_IRQHandler(void);
-void USART1_IRQHandler(void);
+void TIM3_IRQHandler(void);
+void TIM5_IRQHandler(void);
void USART2_IRQHandler(void);
void USART3_IRQHandler(void);
+void UART4_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */
diff --git a/Core/Inc/tim.h b/Core/Inc/tim.h
index 29e0392..5784b5d 100644
--- a/Core/Inc/tim.h
+++ b/Core/Inc/tim.h
@@ -32,16 +32,27 @@ extern "C" {
/* USER CODE END Includes */
+extern TIM_HandleTypeDef htim1;
+
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
+extern TIM_HandleTypeDef htim4;
+
+extern TIM_HandleTypeDef htim8;
+
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
+void MX_TIM1_Init(void);
void MX_TIM2_Init(void);
void MX_TIM3_Init(void);
+void MX_TIM4_Init(void);
+void MX_TIM8_Init(void);
+
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
/* USER CODE BEGIN Prototypes */
diff --git a/Core/Inc/usart.h b/Core/Inc/usart.h
index baf6c0a..7edff6f 100644
--- a/Core/Inc/usart.h
+++ b/Core/Inc/usart.h
@@ -32,7 +32,7 @@ extern "C" {
/* USER CODE END Includes */
-extern UART_HandleTypeDef huart1;
+extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart2;
@@ -42,7 +42,7 @@ extern UART_HandleTypeDef huart3;
/* USER CODE END Private defines */
-void MX_USART1_UART_Init(void);
+void MX_UART4_Init(void);
void MX_USART2_UART_Init(void);
void MX_USART3_UART_Init(void);
diff --git a/Core/Src/app_threadx.c b/Core/Src/app_threadx.c
index 8e8e311..b13da8a 100644
--- a/Core/Src/app_threadx.c
+++ b/Core/Src/app_threadx.c
@@ -55,8 +55,49 @@ _GPSData gps_data;
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP */
-// ������� ����app_thread.c��
-// #define task_test 1
+
+
+/* USER CODE END 1 */
+/* USER CODE END 1 */
+
+/* USER CODE END PFP */
+
+/**
+ * @brief Application ThreadX Initialization.
+ * @param memory_ptr: memory pointer
+ * @retval int
+ */
+UINT App_ThreadX_Init(VOID *memory_ptr)
+{
+ UINT ret = TX_SUCCESS;
+ /* USER CODE BEGIN App_ThreadX_MEM_POOL */
+
+ /* USER CODE END App_ThreadX_MEM_POOL */
+ /* USER CODE BEGIN App_ThreadX_Init */
+ /* USER CODE END App_ThreadX_Init */
+
+ return ret;
+}
+
+ /**
+ * @brief Function that implements the kernel's initialization.
+ * @param None
+ * @retval None
+ */
+void MX_ThreadX_Init(void)
+{
+ /* USER CODE BEGIN Before_Kernel_Start */
+
+ /* USER CODE END Before_Kernel_Start */
+
+ tx_kernel_enter();
+
+ /* USER CODE BEGIN Kernel_Start_Error */
+
+ /* USER CODE END Kernel_Start_Error */
+}
+
+/* USER CODE BEGIN 1 */
#ifdef TEST //Ŀǰ���ڲ���
@@ -103,47 +144,5 @@ void main_control_thread_entry(ULONG thread_input)
}
}
}
-/* USER CODE END 1 */
-/* USER CODE END 1 */
-
#endif
-/* USER CODE END PFP */
-
-/**
- * @brief Application ThreadX Initialization.
- * @param memory_ptr: memory pointer
- * @retval int
- */
-UINT App_ThreadX_Init(VOID *memory_ptr)
-{
- UINT ret = TX_SUCCESS;
- /* USER CODE BEGIN App_ThreadX_MEM_POOL */
-
- /* USER CODE END App_ThreadX_MEM_POOL */
- /* USER CODE BEGIN App_ThreadX_Init */
- /* USER CODE END App_ThreadX_Init */
-
- return ret;
-}
-
- /**
- * @brief Function that implements the kernel's initialization.
- * @param None
- * @retval None
- */
-void MX_ThreadX_Init(void)
-{
- /* USER CODE BEGIN Before_Kernel_Start */
-
- /* USER CODE END Before_Kernel_Start */
-
- tx_kernel_enter();
-
- /* USER CODE BEGIN Kernel_Start_Error */
-
- /* USER CODE END Kernel_Start_Error */
-}
-
-/* USER CODE BEGIN 1 */
-
/* USER CODE END 1 */
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index 67989f3..08e21f6 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -44,17 +44,29 @@ void MX_GPIO_Init(void)
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOH_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOG, AIN1_Pin|AIN2_Pin|BIN1_Pin|BIN2_Pin, GPIO_PIN_RESET);
+
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOC, HC_Trig_Pin|Shake_Motor_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(Buzzer_GPIO_Port, Buzzer_Pin, GPIO_PIN_RESET);
+ /*Configure GPIO pins : AIN1_Pin AIN2_Pin BIN1_Pin BIN2_Pin */
+ GPIO_InitStruct.Pin = AIN1_Pin|AIN2_Pin|BIN1_Pin|BIN2_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
+
/*Configure GPIO pin : HC_Trig_Pin */
GPIO_InitStruct.Pin = HC_Trig_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
diff --git a/Core/Src/main.c b/Core/Src/main.c
index adb4836..1ff2116 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -92,11 +92,14 @@ int main(void)
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_GPDMA1_Init();
- MX_USART1_UART_Init();
MX_USART2_UART_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_USART3_UART_Init();
+ MX_TIM4_Init();
+ MX_UART4_Init();
+ MX_TIM1_Init();
+ MX_TIM8_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
@@ -179,7 +182,7 @@ void SystemClock_Config(void)
/**
* @brief Period elapsed callback in non blocking mode
- * @note This function is called when TIM1 interrupt took place, inside
+ * @note This function is called when TIM5 interrupt took place, inside
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
* a global variable "uwTick" used as application time base.
* @param htim : TIM handle
@@ -190,7 +193,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
/* USER CODE BEGIN Callback 0 */
/* USER CODE END Callback 0 */
- if (htim->Instance == TIM1)
+ if (htim->Instance == TIM5)
{
HAL_IncTick();
}
diff --git a/Core/Src/stm32h5xx_hal_timebase_tim.c b/Core/Src/stm32h5xx_hal_timebase_tim.c
index f338a2b..fd3f109 100644
--- a/Core/Src/stm32h5xx_hal_timebase_tim.c
+++ b/Core/Src/stm32h5xx_hal_timebase_tim.c
@@ -25,12 +25,12 @@
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
-TIM_HandleTypeDef htim1;
+TIM_HandleTypeDef htim5;
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
- * @brief This function configures the TIM1 as a time base source.
+ * @brief This function configures the TIM5 as a time base source.
* The time source is configured to have 1ms time base with a dedicated
* Tick interrupt priority.
* @note This function is called automatically at the beginning of program after
@@ -41,49 +41,58 @@ TIM_HandleTypeDef htim1;
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
RCC_ClkInitTypeDef clkconfig;
- uint32_t uwTimclock;
+ uint32_t uwTimclock, uwAPB1Prescaler;
uint32_t uwPrescalerValue;
uint32_t pFLatency;
HAL_StatusTypeDef status;
- /* Enable TIM1 clock */
- __HAL_RCC_TIM1_CLK_ENABLE();
+ /* Enable TIM5 clock */
+ __HAL_RCC_TIM5_CLK_ENABLE();
/* Get clock configuration */
HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
- /* Compute TIM1 clock */
- uwTimclock = HAL_RCC_GetPCLK2Freq();
+ /* Get APB1 prescaler */
+ uwAPB1Prescaler = clkconfig.APB1CLKDivider;
+ /* Compute TIM5 clock */
+ if (uwAPB1Prescaler == RCC_HCLK_DIV1)
+ {
+ uwTimclock = HAL_RCC_GetPCLK1Freq();
+ }
+ else
+ {
+ uwTimclock = 2UL * HAL_RCC_GetPCLK1Freq();
+ }
- /* Compute the prescaler value to have TIM1 counter clock equal to 100KHz */
+ /* Compute the prescaler value to have TIM5 counter clock equal to 100KHz */
uwPrescalerValue = (uint32_t) ((uwTimclock / 100000U) - 1U);
- /* Initialize TIM1 */
- htim1.Instance = TIM1;
+ /* Initialize TIM5 */
+ htim5.Instance = TIM5;
/* Initialize TIMx peripheral as follow:
- * Period = [(TIM1CLK/1000) - 1]. to have a (1/1000) s time base.
+ * Period = [(TIM5CLK/1000) - 1]. to have a (1/1000) s time base.
* Prescaler = (uwTimclock/100000 - 1) to have a 100KHz counter clock.
* ClockDivision = 0
* Counter direction = Up
*/
- htim1.Init.Period = (100000U / 1000U) - 1U;
- htim1.Init.Prescaler = uwPrescalerValue;
- htim1.Init.ClockDivision = 0;
- htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim5.Init.Period = (100000U / 1000U) - 1U;
+ htim5.Init.Prescaler = uwPrescalerValue;
+ htim5.Init.ClockDivision = 0;
+ htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
- status = HAL_TIM_Base_Init(&htim1);
+ status = HAL_TIM_Base_Init(&htim5);
if (status == HAL_OK)
{
/* Start the TIM time Base generation in interrupt mode */
- status = HAL_TIM_Base_Start_IT(&htim1);
+ status = HAL_TIM_Base_Start_IT(&htim5);
if (status == HAL_OK)
{
if (TickPriority < (1UL << __NVIC_PRIO_BITS))
{
- /* Enable the TIM1 global Interrupt */
- HAL_NVIC_SetPriority(TIM1_UP_IRQn, TickPriority, 0U);
+ /* Enable the TIM5 global Interrupt */
+ HAL_NVIC_SetPriority(TIM5_IRQn, TickPriority, 0U);
uwTickPrio = TickPriority;
}
else
@@ -93,8 +102,8 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
}
}
- /* Enable the TIM1 global Interrupt */
- HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
+ /* Enable the TIM5 global Interrupt */
+ HAL_NVIC_EnableIRQ(TIM5_IRQn);
/* Return function status */
return status;
@@ -102,25 +111,25 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
/**
* @brief Suspend Tick increment.
- * @note Disable the tick increment by disabling TIM1 update interrupt.
+ * @note Disable the tick increment by disabling TIM5 update interrupt.
* @param None
* @retval None
*/
void HAL_SuspendTick(void)
{
- /* Disable TIM1 update Interrupt */
- __HAL_TIM_DISABLE_IT(&htim1, TIM_IT_UPDATE);
+ /* Disable TIM5 update Interrupt */
+ __HAL_TIM_DISABLE_IT(&htim5, TIM_IT_UPDATE);
}
/**
* @brief Resume Tick increment.
- * @note Enable the tick increment by Enabling TIM1 update interrupt.
+ * @note Enable the tick increment by Enabling TIM5 update interrupt.
* @param None
* @retval None
*/
void HAL_ResumeTick(void)
{
- /* Enable TIM1 Update interrupt */
- __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);
+ /* Enable TIM5 Update interrupt */
+ __HAL_TIM_ENABLE_IT(&htim5, TIM_IT_UPDATE);
}
diff --git a/Core/Src/stm32h5xx_it.c b/Core/Src/stm32h5xx_it.c
index 1e0c351..10b2148 100644
--- a/Core/Src/stm32h5xx_it.c
+++ b/Core/Src/stm32h5xx_it.c
@@ -57,6 +57,7 @@
/* External variables --------------------------------------------------------*/
extern TIM_HandleTypeDef htim2;
+extern TIM_HandleTypeDef htim3;
extern DMA_NodeTypeDef Node_GPDMA1_Channel5;
extern DMA_QListTypeDef List_GPDMA1_Channel5;
extern DMA_HandleTypeDef handle_GPDMA1_Channel5;
@@ -64,10 +65,10 @@ extern DMA_HandleTypeDef handle_GPDMA1_Channel4;
extern DMA_NodeTypeDef Node_GPDMA1_Channel3;
extern DMA_QListTypeDef List_GPDMA1_Channel3;
extern DMA_HandleTypeDef handle_GPDMA1_Channel3;
-extern UART_HandleTypeDef huart1;
+extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
-extern TIM_HandleTypeDef htim1;
+extern TIM_HandleTypeDef htim5;
/* USER CODE BEGIN EV */
@@ -213,20 +214,6 @@ void GPDMA1_Channel5_IRQHandler(void)
/* USER CODE END GPDMA1_Channel5_IRQn 1 */
}
-/**
- * @brief This function handles TIM1 Update interrupt.
- */
-void TIM1_UP_IRQHandler(void)
-{
- /* USER CODE BEGIN TIM1_UP_IRQn 0 */
-
- /* USER CODE END TIM1_UP_IRQn 0 */
- HAL_TIM_IRQHandler(&htim1);
- /* USER CODE BEGIN TIM1_UP_IRQn 1 */
-
- /* USER CODE END TIM1_UP_IRQn 1 */
-}
-
/**
* @brief This function handles TIM2 global interrupt.
*/
@@ -242,31 +229,31 @@ void TIM2_IRQHandler(void)
}
/**
- * @brief This function handles USART1 global interrupt.
+ * @brief This function handles TIM3 global interrupt.
*/
-void USART1_IRQHandler(void)
+void TIM3_IRQHandler(void)
{
- /* USER CODE BEGIN USART1_IRQn 0 */
+ /* USER CODE BEGIN TIM3_IRQn 0 */
- /* USER CODE END USART1_IRQn 0 */
- HAL_UART_IRQHandler(&huart1);
- /* USER CODE BEGIN USART1_IRQn 1 */
- if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE))
- {
- __HAL_UART_CLEAR_IDLEFLAG(&huart1);
- //�����Ǽ�������ַ�����
- uint16_t len = UART_DMA_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart1.hdmarx);
-
- for(uint16_t i = 0;i < len; i++)
- {
- ble_rx_ring.buffer[ble_rx_ring.head] = uart_dma_rx_buf[i];
- ble_rx_ring.head = (ble_rx_ring.head + 1) %RING_BUFFER_SIZE;
- }
-
- HAL_UART_AbortReceive(&huart1); //ֹͣ��ǰDMA
- HCBle_InitDMAReception();
- }
- /* USER CODE END USART1_IRQn 1 */
+ /* USER CODE END TIM3_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim3);
+ /* USER CODE BEGIN TIM3_IRQn 1 */
+
+ /* USER CODE END TIM3_IRQn 1 */
+}
+
+/**
+ * @brief This function handles TIM5 global interrupt.
+ */
+void TIM5_IRQHandler(void)
+{
+ /* USER CODE BEGIN TIM5_IRQn 0 */
+
+ /* USER CODE END TIM5_IRQn 0 */
+ HAL_TIM_IRQHandler(&htim5);
+ /* USER CODE BEGIN TIM5_IRQn 1 */
+
+ /* USER CODE END TIM5_IRQn 1 */
}
/**
@@ -297,6 +284,20 @@ void USART3_IRQHandler(void)
/* USER CODE END USART3_IRQn 1 */
}
+/**
+ * @brief This function handles UART4 global interrupt.
+ */
+void UART4_IRQHandler(void)
+{
+ /* USER CODE BEGIN UART4_IRQn 0 */
+
+ /* USER CODE END UART4_IRQn 0 */
+ HAL_UART_IRQHandler(&huart4);
+ /* USER CODE BEGIN UART4_IRQn 1 */
+
+ /* USER CODE END UART4_IRQn 1 */
+}
+
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
diff --git a/Core/Src/tim.c b/Core/Src/tim.c
index a6437f1..e7c79fd 100644
--- a/Core/Src/tim.c
+++ b/Core/Src/tim.c
@@ -24,9 +24,58 @@
/* USER CODE END 0 */
+TIM_HandleTypeDef htim1;
TIM_HandleTypeDef htim2;
TIM_HandleTypeDef htim3;
+TIM_HandleTypeDef htim4;
+TIM_HandleTypeDef htim8;
+/* TIM1 init function */
+void MX_TIM1_Init(void)
+{
+
+ /* USER CODE BEGIN TIM1_Init 0 */
+
+ /* USER CODE END TIM1_Init 0 */
+
+ TIM_Encoder_InitTypeDef sConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+
+ /* USER CODE BEGIN TIM1_Init 1 */
+
+ /* USER CODE END TIM1_Init 1 */
+ htim1.Instance = TIM1;
+ htim1.Init.Prescaler = 0;
+ htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim1.Init.Period = 65535;
+ htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim1.Init.RepetitionCounter = 0;
+ htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
+ sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
+ sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
+ sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
+ sConfig.IC1Filter = 0;
+ sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
+ sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
+ sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
+ sConfig.IC2Filter = 0;
+ if (HAL_TIM_Encoder_Init(&htim1, &sConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM1_Init 2 */
+
+ /* USER CODE END TIM1_Init 2 */
+
+}
/* TIM2 init function */
void MX_TIM2_Init(void)
{
@@ -78,6 +127,7 @@ void MX_TIM3_Init(void)
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_IC_InitTypeDef sConfigIC = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM3_Init 1 */
@@ -101,6 +151,10 @@ void MX_TIM3_Init(void)
{
Error_Handler();
}
+ if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
+ {
+ Error_Handler();
+ }
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
@@ -111,15 +165,178 @@ void MX_TIM3_Init(void)
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
- if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_4) != HAL_OK)
+ if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_3) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
+ HAL_TIM_MspPostInit(&htim3);
}
+/* TIM4 init function */
+void MX_TIM4_Init(void)
+{
+
+ /* USER CODE BEGIN TIM4_Init 0 */
+
+ /* USER CODE END TIM4_Init 0 */
+
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+ TIM_OC_InitTypeDef sConfigOC = {0};
+
+ /* USER CODE BEGIN TIM4_Init 1 */
+
+ /* USER CODE END TIM4_Init 1 */
+ htim4.Instance = TIM4;
+ htim4.Init.Prescaler = 0;
+ htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim4.Init.Period = 65535;
+ htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
+ if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM4_Init 2 */
+
+ /* USER CODE END TIM4_Init 2 */
+ HAL_TIM_MspPostInit(&htim4);
+
+}
+/* TIM8 init function */
+void MX_TIM8_Init(void)
+{
+
+ /* USER CODE BEGIN TIM8_Init 0 */
+
+ /* USER CODE END TIM8_Init 0 */
+
+ TIM_Encoder_InitTypeDef sConfig = {0};
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
+
+ /* USER CODE BEGIN TIM8_Init 1 */
+
+ /* USER CODE END TIM8_Init 1 */
+ htim8.Instance = TIM8;
+ htim8.Init.Prescaler = 0;
+ htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
+ htim8.Init.Period = 65535;
+ htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ htim8.Init.RepetitionCounter = 0;
+ htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
+ sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
+ sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
+ sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
+ sConfig.IC1Filter = 0;
+ sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
+ sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
+ sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
+ sConfig.IC2Filter = 0;
+ if (HAL_TIM_Encoder_Init(&htim8, &sConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
+ sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
+ /* USER CODE BEGIN TIM8_Init 2 */
+
+ /* USER CODE END TIM8_Init 2 */
+
+}
+
+void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)
+{
+
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(tim_encoderHandle->Instance==TIM1)
+ {
+ /* USER CODE BEGIN TIM1_MspInit 0 */
+
+ /* USER CODE END TIM1_MspInit 0 */
+ /* TIM1 clock enable */
+ __HAL_RCC_TIM1_CLK_ENABLE();
+
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ /**TIM1 GPIO Configuration
+ PE9 ------> TIM1_CH1
+ PE11 ------> TIM1_CH2
+ */
+ GPIO_InitStruct.Pin = E1A_Pin|E1B_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
+ HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN TIM1_MspInit 1 */
+
+ /* USER CODE END TIM1_MspInit 1 */
+ }
+ else if(tim_encoderHandle->Instance==TIM8)
+ {
+ /* USER CODE BEGIN TIM8_MspInit 0 */
+
+ /* USER CODE END TIM8_MspInit 0 */
+ /* TIM8 clock enable */
+ __HAL_RCC_TIM8_CLK_ENABLE();
+
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**TIM8 GPIO Configuration
+ PC6 ------> TIM8_CH1
+ PC7 ------> TIM8_CH2
+ */
+ GPIO_InitStruct.Pin = E2A_Pin|E2B_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN TIM8_MspInit 1 */
+
+ /* USER CODE END TIM8_MspInit 1 */
+ }
+}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
@@ -150,7 +367,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_GPIOC_CLK_ENABLE();
/**TIM3 GPIO Configuration
- PC9 ------> TIM3_CH4
+ PC8 ------> TIM3_CH3
*/
GPIO_InitStruct.Pin = HC_Echo_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@@ -159,10 +376,112 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(HC_Echo_GPIO_Port, &GPIO_InitStruct);
+ /* TIM3 interrupt Init */
+ HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(TIM3_IRQn);
/* USER CODE BEGIN TIM3_MspInit 1 */
/* USER CODE END TIM3_MspInit 1 */
}
+ else if(tim_baseHandle->Instance==TIM4)
+ {
+ /* USER CODE BEGIN TIM4_MspInit 0 */
+
+ /* USER CODE END TIM4_MspInit 0 */
+ /* TIM4 clock enable */
+ __HAL_RCC_TIM4_CLK_ENABLE();
+ /* USER CODE BEGIN TIM4_MspInit 1 */
+
+ /* USER CODE END TIM4_MspInit 1 */
+ }
+}
+void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
+{
+
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ if(timHandle->Instance==TIM3)
+ {
+ /* USER CODE BEGIN TIM3_MspPostInit 0 */
+
+ /* USER CODE END TIM3_MspPostInit 0 */
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ /**TIM3 GPIO Configuration
+ PB1 ------> TIM3_CH4
+ */
+ GPIO_InitStruct.Pin = PWMB_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
+ HAL_GPIO_Init(PWMB_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN TIM3_MspPostInit 1 */
+
+ /* USER CODE END TIM3_MspPostInit 1 */
+ }
+ else if(timHandle->Instance==TIM4)
+ {
+ /* USER CODE BEGIN TIM4_MspPostInit 0 */
+
+ /* USER CODE END TIM4_MspPostInit 0 */
+
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ /**TIM4 GPIO Configuration
+ PC2 ------> TIM4_CH4
+ */
+ GPIO_InitStruct.Pin = PWMA_Pin;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
+ HAL_GPIO_Init(PWMA_GPIO_Port, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN TIM4_MspPostInit 1 */
+
+ /* USER CODE END TIM4_MspPostInit 1 */
+ }
+
+}
+
+void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef* tim_encoderHandle)
+{
+
+ if(tim_encoderHandle->Instance==TIM1)
+ {
+ /* USER CODE BEGIN TIM1_MspDeInit 0 */
+
+ /* USER CODE END TIM1_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM1_CLK_DISABLE();
+
+ /**TIM1 GPIO Configuration
+ PE9 ------> TIM1_CH1
+ PE11 ------> TIM1_CH2
+ */
+ HAL_GPIO_DeInit(GPIOE, E1A_Pin|E1B_Pin);
+
+ /* USER CODE BEGIN TIM1_MspDeInit 1 */
+
+ /* USER CODE END TIM1_MspDeInit 1 */
+ }
+ else if(tim_encoderHandle->Instance==TIM8)
+ {
+ /* USER CODE BEGIN TIM8_MspDeInit 0 */
+
+ /* USER CODE END TIM8_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM8_CLK_DISABLE();
+
+ /**TIM8 GPIO Configuration
+ PC6 ------> TIM8_CH1
+ PC7 ------> TIM8_CH2
+ */
+ HAL_GPIO_DeInit(GPIOC, E2A_Pin|E2B_Pin);
+
+ /* USER CODE BEGIN TIM8_MspDeInit 1 */
+
+ /* USER CODE END TIM8_MspDeInit 1 */
+ }
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
@@ -191,14 +510,30 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
__HAL_RCC_TIM3_CLK_DISABLE();
/**TIM3 GPIO Configuration
- PC9 ------> TIM3_CH4
+ PB1 ------> TIM3_CH4
+ PC8 ------> TIM3_CH3
*/
+ HAL_GPIO_DeInit(PWMB_GPIO_Port, PWMB_Pin);
+
HAL_GPIO_DeInit(HC_Echo_GPIO_Port, HC_Echo_Pin);
+ /* TIM3 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(TIM3_IRQn);
/* USER CODE BEGIN TIM3_MspDeInit 1 */
/* USER CODE END TIM3_MspDeInit 1 */
}
+ else if(tim_baseHandle->Instance==TIM4)
+ {
+ /* USER CODE BEGIN TIM4_MspDeInit 0 */
+
+ /* USER CODE END TIM4_MspDeInit 0 */
+ /* Peripheral clock disable */
+ __HAL_RCC_TIM4_CLK_DISABLE();
+ /* USER CODE BEGIN TIM4_MspDeInit 1 */
+
+ /* USER CODE END TIM4_MspDeInit 1 */
+ }
}
/* USER CODE BEGIN 1 */
diff --git a/Core/Src/usart.c b/Core/Src/usart.c
index a78ef23..50b4fee 100644
--- a/Core/Src/usart.c
+++ b/Core/Src/usart.c
@@ -24,7 +24,7 @@
/* USER CODE END 0 */
-UART_HandleTypeDef huart1;
+UART_HandleTypeDef huart4;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
DMA_NodeTypeDef Node_GPDMA1_Channel5;
@@ -35,48 +35,47 @@ DMA_NodeTypeDef Node_GPDMA1_Channel3;
DMA_QListTypeDef List_GPDMA1_Channel3;
DMA_HandleTypeDef handle_GPDMA1_Channel3;
-/* USART1 init function */
-
-void MX_USART1_UART_Init(void)
+/* UART4 init function */
+void MX_UART4_Init(void)
{
- /* USER CODE BEGIN USART1_Init 0 */
+ /* USER CODE BEGIN UART4_Init 0 */
- /* USER CODE END USART1_Init 0 */
+ /* USER CODE END UART4_Init 0 */
- /* USER CODE BEGIN USART1_Init 1 */
+ /* USER CODE BEGIN UART4_Init 1 */
- /* USER CODE END USART1_Init 1 */
- huart1.Instance = USART1;
- huart1.Init.BaudRate = 9600;
- 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;
- huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
- huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- if (HAL_UART_Init(&huart1) != HAL_OK)
+ /* USER CODE END UART4_Init 1 */
+ huart4.Instance = UART4;
+ huart4.Init.BaudRate = 9600;
+ huart4.Init.WordLength = UART_WORDLENGTH_8B;
+ huart4.Init.StopBits = UART_STOPBITS_1;
+ huart4.Init.Parity = UART_PARITY_NONE;
+ huart4.Init.Mode = UART_MODE_TX_RX;
+ huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
+ huart4.Init.OverSampling = UART_OVERSAMPLING_16;
+ huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
+ huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
+ huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
+ if (HAL_UART_Init(&huart4) != HAL_OK)
{
Error_Handler();
}
- if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
+ if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
- if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
+ if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
- if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
+ if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
{
Error_Handler();
}
- /* USER CODE BEGIN USART1_Init 2 */
+ /* USER CODE BEGIN UART4_Init 2 */
- /* USER CODE END USART1_Init 2 */
+ /* USER CODE END UART4_Init 2 */
}
/* USART2 init function */
@@ -174,40 +173,40 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitTypeDef GPIO_InitStruct = {0};
DMA_NodeConfTypeDef NodeConfig= {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
- if(uartHandle->Instance==USART1)
+ if(uartHandle->Instance==UART4)
{
- /* USER CODE BEGIN USART1_MspInit 0 */
+ /* USER CODE BEGIN UART4_MspInit 0 */
- /* USER CODE END USART1_MspInit 0 */
+ /* USER CODE END UART4_MspInit 0 */
/** Initializes the peripherals clock
*/
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
- PeriphClkInitStruct.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
+ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART4;
+ PeriphClkInitStruct.Uart4ClockSelection = RCC_UART4CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
- /* USART1 clock enable */
- __HAL_RCC_USART1_CLK_ENABLE();
+ /* UART4 clock enable */
+ __HAL_RCC_UART4_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
- /**USART1 GPIO Configuration
- PB14 ------> USART1_TX
- PB15 ------> USART1_RX
+ /**UART4 GPIO Configuration
+ PB8 ------> UART4_RX
+ PB9 ------> UART4_TX
*/
- GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
+ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
+ GPIO_InitStruct.Alternate = GPIO_AF8_UART4;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* USART1 DMA Init */
- /* GPDMA1_REQUEST_USART1_RX Init */
+ /* UART4 DMA Init */
+ /* GPDMA1_REQUEST_UART4_RX Init */
NodeConfig.NodeType = DMA_GPDMA_LINEAR_NODE;
- NodeConfig.Init.Request = GPDMA1_REQUEST_USART1_RX;
+ NodeConfig.Init.Request = GPDMA1_REQUEST_UART4_RX;
NodeConfig.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
NodeConfig.Init.Direction = DMA_PERIPH_TO_MEMORY;
NodeConfig.Init.SrcInc = DMA_SINC_FIXED;
@@ -260,9 +259,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
Error_Handler();
}
- /* GPDMA1_REQUEST_USART1_TX Init */
+ /* GPDMA1_REQUEST_UART4_TX Init */
handle_GPDMA1_Channel4.Instance = GPDMA1_Channel4;
- handle_GPDMA1_Channel4.Init.Request = GPDMA1_REQUEST_USART1_TX;
+ handle_GPDMA1_Channel4.Init.Request = GPDMA1_REQUEST_UART4_TX;
handle_GPDMA1_Channel4.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
handle_GPDMA1_Channel4.Init.Direction = DMA_MEMORY_TO_PERIPH;
handle_GPDMA1_Channel4.Init.SrcInc = DMA_SINC_INCREMENTED;
@@ -287,12 +286,12 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
Error_Handler();
}
- /* USART1 interrupt Init */
- HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(USART1_IRQn);
- /* USER CODE BEGIN USART1_MspInit 1 */
+ /* UART4 interrupt Init */
+ HAL_NVIC_SetPriority(UART4_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(UART4_IRQn);
+ /* USER CODE BEGIN UART4_MspInit 1 */
- /* USER CODE END USART1_MspInit 1 */
+ /* USER CODE END UART4_MspInit 1 */
}
else if(uartHandle->Instance==USART2)
{
@@ -429,29 +428,29 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{
- if(uartHandle->Instance==USART1)
+ if(uartHandle->Instance==UART4)
{
- /* USER CODE BEGIN USART1_MspDeInit 0 */
+ /* USER CODE BEGIN UART4_MspDeInit 0 */
- /* USER CODE END USART1_MspDeInit 0 */
+ /* USER CODE END UART4_MspDeInit 0 */
/* Peripheral clock disable */
- __HAL_RCC_USART1_CLK_DISABLE();
+ __HAL_RCC_UART4_CLK_DISABLE();
- /**USART1 GPIO Configuration
- PB14 ------> USART1_TX
- PB15 ------> USART1_RX
+ /**UART4 GPIO Configuration
+ PB8 ------> UART4_RX
+ PB9 ------> UART4_TX
*/
- HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15);
+ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_8|GPIO_PIN_9);
- /* USART1 DMA DeInit */
+ /* UART4 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmarx);
HAL_DMA_DeInit(uartHandle->hdmatx);
- /* USART1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(USART1_IRQn);
- /* USER CODE BEGIN USART1_MspDeInit 1 */
+ /* UART4 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(UART4_IRQn);
+ /* USER CODE BEGIN UART4_MspDeInit 1 */
- /* USER CODE END USART1_MspDeInit 1 */
+ /* USER CODE END UART4_MspDeInit 1 */
}
else if(uartHandle->Instance==USART2)
{
diff --git a/MDK-ARM/AutoGuideStick.uvguix.madao b/MDK-ARM/AutoGuideStick.uvguix.madao
index da46da5..4f5778d 100644
--- a/MDK-ARM/AutoGuideStick.uvguix.madao
+++ b/MDK-ARM/AutoGuideStick.uvguix.madao
@@ -93,8 +93,8 @@
2
3
- -32000
- -32000
+ -1
+ -1
-1
@@ -110,8 +110,8 @@
0
- 759
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000070000000100000036443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C436F72655C5372635C6170705F746872656164782E63000000000D6170705F746872656164782E6300000000C5D4F200FFFFFFFF2B443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C4843426C652E6300000000074843426C652E6300000000BECEA100FFFFFFFF29443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C6770732E6300000000056770732E6300000000BECEA100FFFFFFFF2B443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C4843426C652E6800000000074843426C652E6800000000F0A0A100FFFFFFFF31443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C5368616B655F4D6F746F722E63000000000D5368616B655F4D6F746F722E6300000000BCA8E100FFFFFFFF31443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C5368616B655F4D6F746F722E68000000000D5368616B655F4D6F746F722E68000000009CC1B600FFFFFFFF30443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C556C747261736F756E642E63000000000C556C747261736F756E642E6300000000F7B88600FFFFFFFF29443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C494D552E630000000005494D552E6300000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C40000006600000000060000B7020000
+ 903
+ 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A000000000000000100000036443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C436F72655C5372635C6170705F746872656164782E63000000000D6170705F746872656164782E6300000000C5D4F200FFFFFFFF2B443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C4843426C652E6300000000074843426C652E6300000000FFDC7800FFFFFFFF29443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C6770732E6300000000056770732E6300000000BECEA100FFFFFFFF2B443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C4843426C652E6800000000074843426C652E6800000000F0A0A100FFFFFFFF31443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C5368616B655F4D6F746F722E63000000000D5368616B655F4D6F746F722E6300000000BCA8E100FFFFFFFF31443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C5368616B655F4D6F746F722E68000000000D5368616B655F4D6F746F722E68000000009CC1B600FFFFFFFF30443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C556C747261736F756E642E63000000000C556C747261736F756E642E6300000000F7B88600FFFFFFFF29443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C66756E5C494D552E630000000005494D552E6300000000D9ADC200FFFFFFFF2F443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000A5C2D700FFFFFFFF30443A5C616476616E63655F737469636B5C4175746F4775696465537469636B5C436F72655C5372635C75736172742E63000000000775736172742E6300000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C40000006600000000060000B7020000
@@ -1806,7 +1806,7 @@
File
2843
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000196D61696E5F636F6E74726F6C5F7468726561645F656E74727996000000000000001400196D61696E5F636F6E74726F6C5F7468726561645F656E74727915756C747261736F6E69635F7461736B5F656E74727903636D640B70617273655F696E6465781063757272656E745F6C6F636174696F6E0D646F5F67726F75705F6F6E636503627566024631085233385F504153530366726706646174615F560B667265655F6F75747075740A667265655F696E70757408667265655F50413706646174615F5007415F74696D657301690250580F5553415254305F4255465F53495A450A7278645F73636F6D6D300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000196D61696E5F636F6E74726F6C5F7468726561645F656E74727996000000000000001400196D61696E5F636F6E74726F6C5F7468726561645F656E74727915756C747261736F6E69635F7461736B5F656E74727903636D640B70617273655F696E6465781063757272656E745F6C6F636174696F6E0D646F5F67726F75705F6F6E636503627566024631085233385F504153530366726706646174615F560B667265655F6F75747075740A667265655F696E70757408667265655F50413706646174615F5007415F74696D657301690250580F5553415254305F4255465F53495A450A7278645F73636F6D6D300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1822,7 +1822,7 @@
Build
988
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E4175746F4775696465537469636B960000000000000001000E4175746F4775696465537469636B000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E4175746F4775696465537469636B960000000000000001000E4175746F4775696465537469636B000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -1862,21 +1862,21 @@
0
100
- 7
+ 0
../Core/Src/app_threadx.c
0
- 39
- 61
+ 36
+ 58
1
0
..\fun\HCBle.c
- 0
- 142
- 164
+ 1
+ 52
+ 67
1
0
@@ -1884,7 +1884,7 @@
..\fun\gps.c
0
- 208
+ 1
1
1
@@ -1919,7 +1919,7 @@
..\fun\Ultrasound.c
- 23
+ 17
88
110
1
@@ -1935,6 +1935,24 @@
0
+
+ ../Core/Src/main.c
+ 0
+ 1
+ 1
+ 1
+
+ 0
+
+
+ ../Core/Src/usart.c
+ 0
+ 23
+ 24
+ 1
+
+ 0
+
diff --git a/MDK-ARM/AutoGuideStick/AutoGuideStick.axf b/MDK-ARM/AutoGuideStick/AutoGuideStick.axf
index 919c8f9..3b8a6a1 100644
Binary files a/MDK-ARM/AutoGuideStick/AutoGuideStick.axf and b/MDK-ARM/AutoGuideStick/AutoGuideStick.axf differ
diff --git a/MDK-ARM/AutoGuideStick/AutoGuideStick.build_log.htm b/MDK-ARM/AutoGuideStick/AutoGuideStick.build_log.htm
index 9d0dbaa..c3c303c 100644
--- a/MDK-ARM/AutoGuideStick/AutoGuideStick.build_log.htm
+++ b/MDK-ARM/AutoGuideStick/AutoGuideStick.build_log.htm
@@ -27,13 +27,199 @@ Project File Date: 06/25/2025
Output:
*** Using Compiler 'V6.21', folder: 'D:\keil5\ARM\ARMCLANG\Bin'
Build target 'AutoGuideStick'
-compiling HCBle.c...
+compiling tim.c...
+compiling gpdma.c...
+compiling gpio.c...
+compiling main.c...
+compiling memorymap.c...
+assembling startup_stm32h563xx.s...
+compiling stm32h5xx_hal_timebase_tim.c...
+compiling stm32h5xx_it.c...
+compiling stm32h5xx_hal_tim_ex.c...
+compiling stm32h5xx_hal_tim.c...
+compiling usart.c...
+compiling stm32h5xx_hal_msp.c...
+compiling app_azure_rtos.c...
compiling app_threadx.c...
+compiling stm32h5xx_hal_cortex.c...
+compiling stm32h5xx_hal_rcc.c...
+compiling stm32h5xx_hal_flash.c...
+compiling stm32h5xx_hal_flash_ex.c...
+compiling stm32h5xx_hal_gpio.c...
+compiling stm32h5xx_hal_rcc_ex.c...
+compiling stm32h5xx_hal_pwr.c...
+compiling stm32h5xx_hal_dma.c...
+compiling stm32h5xx_hal_pwr_ex.c...
+compiling stm32h5xx_hal_dma_ex.c...
+compiling stm32h5xx_hal.c...
+compiling stm32h5xx_hal_exti.c...
+compiling stm32h5xx_hal_uart_ex.c...
+compiling stm32h5xx_hal_uart.c...
+compiling system_stm32h5xx.c...
+compiling tx_initialize_high_level.c...
+compiling tx_initialize_kernel_enter.c...
+compiling tx_thread_stack_error_notify.c...
+compiling tx_initialize_kernel_setup.c...
+compiling tx_thread_system_resume.c...
+compiling tx_thread_stack_error_handler.c...
+compiling tx_block_pool_create.c...
+compiling tx_block_allocate.c...
+compiling tx_block_pool_cleanup.c...
+compiling tx_block_pool_delete.c...
+compiling tx_block_pool_info_get.c...
+compiling tx_block_pool_initialize.c...
+compiling tx_block_pool_prioritize.c...
+compiling tx_block_release.c...
+compiling tx_byte_allocate.c...
+compiling tx_byte_pool_cleanup.c...
+compiling tx_byte_pool_create.c...
+compiling tx_byte_pool_delete.c...
+compiling tx_byte_pool_initialize.c...
+compiling tx_byte_pool_prioritize.c...
+compiling tx_byte_pool_search.c...
+compiling tx_byte_pool_info_get.c...
+compiling tx_byte_release.c...
+compiling tx_event_flags_cleanup.c...
+compiling tx_event_flags_create.c...
+compiling tx_event_flags_delete.c...
+compiling tx_event_flags_get.c...
+compiling tx_event_flags_info_get.c...
+compiling tx_event_flags_initialize.c...
+compiling tx_event_flags_set.c...
+compiling tx_mutex_cleanup.c...
+compiling tx_event_flags_set_notify.c...
+compiling tx_mutex_create.c...
+compiling tx_mutex_delete.c...
+compiling tx_mutex_initialize.c...
+compiling tx_mutex_info_get.c...
+compiling tx_mutex_priority_change.c...
+compiling tx_mutex_get.c...
+compiling tx_mutex_prioritize.c...
+compiling tx_mutex_put.c...
+compiling tx_queue_cleanup.c...
+compiling tx_queue_create.c...
+compiling tx_queue_delete.c...
+compiling tx_queue_flush.c...
+compiling tx_queue_front_send.c...
+compiling tx_queue_info_get.c...
+compiling tx_queue_initialize.c...
+compiling tx_queue_prioritize.c...
+compiling tx_queue_send.c...
+compiling tx_queue_send_notify.c...
+compiling tx_queue_receive.c...
+compiling tx_semaphore_cleanup.c...
+compiling tx_semaphore_ceiling_put.c...
+compiling tx_semaphore_create.c...
+compiling tx_semaphore_delete.c...
+compiling tx_semaphore_get.c...
+compiling tx_semaphore_info_get.c...
+compiling tx_semaphore_initialize.c...
+compiling tx_semaphore_prioritize.c...
+compiling tx_semaphore_put.c...
+compiling tx_semaphore_put_notify.c...
+compiling tx_thread_create.c...
+compiling tx_thread_delete.c...
+compiling tx_thread_entry_exit_notify.c...
+compiling tx_thread_identify.c...
+compiling tx_thread_info_get.c...
+compiling tx_thread_initialize.c...
+compiling tx_thread_preemption_change.c...
+compiling tx_thread_priority_change.c...
+compiling tx_thread_relinquish.c...
+compiling tx_thread_reset.c...
+compiling tx_thread_resume.c...
+compiling tx_thread_shell_entry.c...
+compiling tx_thread_sleep.c...
+compiling tx_thread_stack_analyze.c...
+compiling tx_thread_suspend.c...
+compiling tx_thread_system_preempt_check.c...
+compiling tx_thread_system_suspend.c...
+compiling tx_thread_terminate.c...
+compiling tx_thread_time_slice.c...
+compiling tx_thread_timeout.c...
+compiling tx_thread_time_slice_change.c...
+compiling tx_thread_wait_abort.c...
+compiling tx_time_get.c...
+compiling tx_time_set.c...
+compiling txe_block_allocate.c...
+compiling txe_block_pool_create.c...
+compiling txe_block_pool_delete.c...
+compiling txe_block_pool_info_get.c...
+compiling txe_block_pool_prioritize.c...
+compiling txe_block_release.c...
+compiling txe_byte_allocate.c...
+compiling txe_byte_pool_create.c...
+compiling txe_byte_pool_delete.c...
+compiling txe_byte_pool_info_get.c...
+compiling txe_byte_pool_prioritize.c...
+compiling txe_byte_release.c...
+compiling txe_event_flags_create.c...
+compiling txe_event_flags_delete.c...
+compiling txe_event_flags_get.c...
+compiling txe_event_flags_info_get.c...
+compiling txe_event_flags_set.c...
+compiling txe_event_flags_set_notify.c...
+compiling txe_mutex_create.c...
+compiling txe_mutex_delete.c...
+compiling txe_mutex_get.c...
+compiling txe_mutex_info_get.c...
+compiling txe_mutex_prioritize.c...
+compiling txe_mutex_put.c...
+compiling txe_queue_create.c...
+compiling txe_queue_delete.c...
+compiling txe_queue_flush.c...
+compiling txe_queue_info_get.c...
+compiling txe_queue_front_send.c...
+compiling txe_queue_prioritize.c...
+compiling txe_queue_receive.c...
+compiling txe_queue_send.c...
+compiling txe_queue_send_notify.c...
+compiling txe_semaphore_ceiling_put.c...
+compiling txe_semaphore_create.c...
+compiling txe_semaphore_delete.c...
+compiling txe_semaphore_get.c...
+compiling txe_semaphore_info_get.c...
+compiling txe_semaphore_prioritize.c...
+compiling txe_thread_entry_exit_notify.c...
+compiling txe_semaphore_put.c...
+compiling txe_thread_info_get.c...
+compiling txe_thread_preemption_change.c...
+compiling txe_thread_create.c...
+compiling txe_semaphore_put_notify.c...
+compiling txe_thread_priority_change.c...
+compiling txe_thread_delete.c...
+compiling txe_thread_relinquish.c...
+compiling txe_thread_reset.c...
+compiling txe_thread_resume.c...
+compiling txe_thread_suspend.c...
+compiling txe_thread_terminate.c...
+compiling txe_thread_time_slice_change.c...
+compiling txe_thread_wait_abort.c...
+compiling tx_timer_activate.c...
+compiling tx_timer_change.c...
+compiling tx_timer_create.c...
+compiling tx_timer_deactivate.c...
+compiling tx_timer_delete.c...
+compiling tx_timer_expiration_process.c...
+compiling tx_timer_info_get.c...
+compiling tx_timer_initialize.c...
+compiling tx_timer_system_activate.c...
+compiling tx_timer_system_deactivate.c...
+compiling tx_timer_thread_entry.c...
+compiling txe_timer_activate.c...
+compiling txe_timer_change.c...
+compiling txe_timer_create.c...
+compiling txe_timer_deactivate.c...
+compiling txe_timer_delete.c...
+compiling txe_timer_info_get.c...
+compiling HCBle.c...
compiling gps.c...
-compiling Shake_Motor.c...
compiling Ultrasound.c...
+compiling Buzzer.c...
+compiling Shake_Motor.c...
+compiling IMU.c...
linking...
-Program Size: Code=60986 RO-data=726 RW-data=16 ZI-data=6296
+Program Size: Code=65138 RO-data=726 RW-data=16 ZI-data=6200
FromELF: creating hex file...
"AutoGuideStick\AutoGuideStick.axf" - 0 Error(s), 0 Warning(s).
@@ -59,7 +245,7 @@ Package Vendor: Keil
* Component: ARM::CMSIS:CORE@5.6.0
Include file: CMSIS/Core/Include/tz_context.h
-Build Time Elapsed: 00:00:07
+Build Time Elapsed: 00:00:46