diff --git a/.cproject b/.cproject
index 201a804..1532cd0 100644
--- a/.cproject
+++ b/.cproject
@@ -24,7 +24,7 @@
-
+
@@ -133,7 +133,7 @@
-
+
diff --git a/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs b/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
new file mode 100644
index 0000000..98a69fc
--- /dev/null
+++ b/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}}
diff --git a/Core/Inc/stm32f4xx_it.h b/Core/Inc/stm32f4xx_it.h
index 8276532..a9da789 100644
--- a/Core/Inc/stm32f4xx_it.h
+++ b/Core/Inc/stm32f4xx_it.h
@@ -52,6 +52,10 @@ void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void DebugMon_Handler(void);
+void CAN1_TX_IRQHandler(void);
+void CAN1_RX0_IRQHandler(void);
+void CAN1_RX1_IRQHandler(void);
+void CAN1_SCE_IRQHandler(void);
void TIM1_UP_TIM10_IRQHandler(void);
void TIM1_TRG_COM_TIM11_IRQHandler(void);
void USART1_IRQHandler(void);
diff --git a/Core/Src/can.c b/Core/Src/can.c
index 46c993b..d58ac66 100644
--- a/Core/Src/can.c
+++ b/Core/Src/can.c
@@ -38,16 +38,16 @@ void MX_CAN1_Init(void)
/* USER CODE END CAN1_Init 1 */
hcan1.Instance = CAN1;
- hcan1.Init.Prescaler = 16;
+ hcan1.Init.Prescaler = 4;
hcan1.Init.Mode = CAN_MODE_NORMAL;
- hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
- hcan1.Init.TimeSeg1 = CAN_BS1_1TQ;
- hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;
- hcan1.Init.TimeTriggeredMode = DISABLE;
- hcan1.Init.AutoBusOff = DISABLE;
+ hcan1.Init.SyncJumpWidth = CAN_SJW_3TQ;
+ hcan1.Init.TimeSeg1 = CAN_BS1_14TQ;
+ hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;
+ hcan1.Init.TimeTriggeredMode = ENABLE;
+ hcan1.Init.AutoBusOff = ENABLE;
hcan1.Init.AutoWakeUp = DISABLE;
- hcan1.Init.AutoRetransmission = DISABLE;
- hcan1.Init.ReceiveFifoLocked = DISABLE;
+ hcan1.Init.AutoRetransmission = ENABLE;
+ hcan1.Init.ReceiveFifoLocked = ENABLE;
hcan1.Init.TransmitFifoPriority = DISABLE;
if (HAL_CAN_Init(&hcan1) != HAL_OK)
{
@@ -83,6 +83,15 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ /* CAN1 interrupt Init */
+ HAL_NVIC_SetPriority(CAN1_TX_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
+ HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
+ HAL_NVIC_SetPriority(CAN1_RX1_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(CAN1_RX1_IRQn);
+ HAL_NVIC_SetPriority(CAN1_SCE_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
/* USER CODE BEGIN CAN1_MspInit 1 */
/* USER CODE END CAN1_MspInit 1 */
@@ -106,6 +115,11 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
+ /* CAN1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(CAN1_TX_IRQn);
+ HAL_NVIC_DisableIRQ(CAN1_RX0_IRQn);
+ HAL_NVIC_DisableIRQ(CAN1_RX1_IRQn);
+ HAL_NVIC_DisableIRQ(CAN1_SCE_IRQn);
/* USER CODE BEGIN CAN1_MspDeInit 1 */
/* USER CODE END CAN1_MspDeInit 1 */
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 32014c8..45f8541 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -141,7 +141,7 @@ void SystemClock_Config(void)
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8;
- RCC_OscInitStruct.PLL.PLLN = 168;
+ RCC_OscInitStruct.PLL.PLLN = 144;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
@@ -158,7 +158,7 @@ void SystemClock_Config(void)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}
diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c
index f945a4f..03c828f 100644
--- a/Core/Src/stm32f4xx_it.c
+++ b/Core/Src/stm32f4xx_it.c
@@ -55,6 +55,7 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
+extern CAN_HandleTypeDef hcan1;
extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7;
extern TIM_HandleTypeDef htim10;
@@ -164,6 +165,62 @@ void DebugMon_Handler(void)
/******************************************************************************/
/**
+ * @brief This function handles CAN1 TX interrupts.
+ */
+void CAN1_TX_IRQHandler(void)
+{
+ /* USER CODE BEGIN CAN1_TX_IRQn 0 */
+
+ /* USER CODE END CAN1_TX_IRQn 0 */
+ HAL_CAN_IRQHandler(&hcan1);
+ /* USER CODE BEGIN CAN1_TX_IRQn 1 */
+
+ /* USER CODE END CAN1_TX_IRQn 1 */
+}
+
+/**
+ * @brief This function handles CAN1 RX0 interrupts.
+ */
+void CAN1_RX0_IRQHandler(void)
+{
+ /* USER CODE BEGIN CAN1_RX0_IRQn 0 */
+
+ /* USER CODE END CAN1_RX0_IRQn 0 */
+ HAL_CAN_IRQHandler(&hcan1);
+ /* USER CODE BEGIN CAN1_RX0_IRQn 1 */
+
+ /* USER CODE END CAN1_RX0_IRQn 1 */
+}
+
+/**
+ * @brief This function handles CAN1 RX1 interrupt.
+ */
+void CAN1_RX1_IRQHandler(void)
+{
+ /* USER CODE BEGIN CAN1_RX1_IRQn 0 */
+
+ /* USER CODE END CAN1_RX1_IRQn 0 */
+ HAL_CAN_IRQHandler(&hcan1);
+ /* USER CODE BEGIN CAN1_RX1_IRQn 1 */
+
+ /* USER CODE END CAN1_RX1_IRQn 1 */
+}
+
+/**
+ * @brief This function handles CAN1 SCE interrupt.
+ */
+void CAN1_SCE_IRQHandler(void)
+{
+ /* USER CODE BEGIN CAN1_SCE_IRQn 0 */
+
+ /* USER CODE END CAN1_SCE_IRQn 0 */
+ HAL_CAN_IRQHandler(&hcan1);
+ /* USER CODE BEGIN CAN1_SCE_IRQn 1 */
+
+ /* USER CODE END CAN1_SCE_IRQn 1 */
+}
+
+/**
* @brief This function handles TIM1 update interrupt and TIM10 global interrupt.
*/
void TIM1_UP_TIM10_IRQHandler(void)
diff --git a/mainboard.ioc b/mainboard.ioc
index ba2d893..48783da 100644
--- a/mainboard.ioc
+++ b/mainboard.ioc
@@ -2,10 +2,18 @@
CAD.formats=
CAD.pinconfig=
CAD.provider=
-CAN1.CalculateBaudRate=875000
-CAN1.CalculateTimeBit=1142
-CAN1.CalculateTimeQuantum=380.95238095238096
-CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate
+CAN1.ABOM=ENABLE
+CAN1.BS1=CAN_BS1_14TQ
+CAN1.BS2=CAN_BS2_3TQ
+CAN1.CalculateBaudRate=500000
+CAN1.CalculateTimeBit=2000
+CAN1.CalculateTimeQuantum=111.11111111111111
+CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2,SJW,TTCM,ABOM,NART,RFLM
+CAN1.NART=ENABLE
+CAN1.Prescaler=4
+CAN1.RFLM=ENABLE
+CAN1.SJW=CAN_SJW_3TQ
+CAN1.TTCM=ENABLE
FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_RECURSIVE_MUTEXES,configUSE_NEWLIB_REENTRANT
FREERTOS.Tasks01=defaultTask,0,512,StartDefaultTask,As weak,NULL,Dynamic,NULL,NULL
@@ -49,6 +57,10 @@ Mcu.UserName=STM32F407ZGTx
MxCube.Version=6.9.0
MxDb.Version=DB.6.0.90
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
+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.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
@@ -116,38 +128,38 @@ 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_CAN1_Init-CAN1-false-HAL-true,4-MX_TIM6_Init-TIM6-false-HAL-true,5-MX_TIM7_Init-TIM7-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true
-RCC.48MHZClocksFreq_Value=84000000
-RCC.AHBFreq_Value=168000000
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_CAN1_Init-CAN1-false-HAL-true,4-MX_TIM6_Init-TIM6-false-HAL-true,5-MX_TIM7_Init-TIM7-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART2_UART_Init-USART2-false-HAL-true,8-MX_TIM10_Init-TIM10-false-HAL-true
+RCC.48MHZClocksFreq_Value=72000000
+RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
-RCC.APB1Freq_Value=42000000
-RCC.APB1TimFreq_Value=84000000
+RCC.APB1Freq_Value=36000000
+RCC.APB1TimFreq_Value=72000000
RCC.APB2CLKDivider=RCC_HCLK_DIV2
-RCC.APB2Freq_Value=84000000
-RCC.APB2TimFreq_Value=168000000
-RCC.CortexFreq_Value=168000000
-RCC.EthernetFreq_Value=168000000
-RCC.FCLKCortexFreq_Value=168000000
+RCC.APB2Freq_Value=72000000
+RCC.APB2TimFreq_Value=144000000
+RCC.CortexFreq_Value=144000000
+RCC.EthernetFreq_Value=144000000
+RCC.FCLKCortexFreq_Value=144000000
RCC.FamilyName=M
-RCC.HCLKFreq_Value=168000000
+RCC.HCLKFreq_Value=144000000
RCC.HSE_VALUE=25000000
RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=192000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000
-RCC.MCO2PinFreq_Value=168000000
-RCC.PLLCLKFreq_Value=168000000
+RCC.MCO2PinFreq_Value=144000000
+RCC.PLLCLKFreq_Value=144000000
RCC.PLLM=8
-RCC.PLLN=168
-RCC.PLLQCLKFreq_Value=84000000
+RCC.PLLN=144
+RCC.PLLQCLKFreq_Value=72000000
RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=12500000
-RCC.SYSCLKFreq_VALUE=168000000
+RCC.SYSCLKFreq_VALUE=144000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=384000000
RCC.VCOInputFreq_Value=2000000
-RCC.VCOOutputFreq_Value=336000000
+RCC.VCOOutputFreq_Value=288000000
RCC.VcooutputI2S=192000000
USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC
diff --git a/usrc/main.cpp b/usrc/main.cpp
index ee65cbb..fb9c9e3 100644
--- a/usrc/main.cpp
+++ b/usrc/main.cpp
@@ -320,6 +320,11 @@ void regfn() {
}
motor->moveTo(step);
});
+
+ cmdScheduler.registerCmd("sleep_ms", [](int argc, char** argv, CmdScheduler::CmdProcessContext* context) {
+ CHECK_ARGC(1);
+ HAL_Delay(atoi(argv[1]));
+ });
}
void Main::run() {
@@ -369,7 +374,7 @@ void Main::run() {
OSDefaultSchduler::getInstance()->loop();
cmdScheduler.schedule();
m_IflytopCanMaster.periodicJob();
-
+ // m_IflytopCanMaster.writeReg(1,1,1,10);
osDelay(1);
}
}