diff --git a/firmware/components/CAN/CAN-B/CAN-B.ioc b/firmware/components/CAN/CAN-B/CAN-B.ioc index f377b18e..5c8dabbd 100644 --- a/firmware/components/CAN/CAN-B/CAN-B.ioc +++ b/firmware/components/CAN/CAN-B/CAN-B.ioc @@ -23,11 +23,11 @@ Mcu.IPNb=4 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC -Mcu.Pin1=PC15-OSC32_OUT -Mcu.Pin2=PD0-OSC_IN -Mcu.Pin3=PD1-OSC_OUT -Mcu.Pin4=PA13 -Mcu.Pin5=PA14 +Mcu.Pin1=PD0-OSC_IN +Mcu.Pin2=PD1-OSC_OUT +Mcu.Pin3=PA13 +Mcu.Pin4=PA14 +Mcu.Pin5=PB7 Mcu.Pin6=PB8 Mcu.Pin7=PB9 Mcu.Pin8=VP_SYS_VS_Systick @@ -40,6 +40,7 @@ MxDb.Version=DB.6.0.130 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.CAN1_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false +NVIC.EXTI9_5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -53,6 +54,10 @@ PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PB7.GPIOParameters=GPIO_PuPd +PB7.GPIO_PuPd=GPIO_PULLDOWN +PB7.Locked=true +PB7.Signal=GPXTI7 PB8.Locked=true PB8.Mode=CAN_Activate PB8.Signal=CAN_RX @@ -61,10 +66,6 @@ PB9.Mode=CAN_Activate PB9.Signal=CAN_TX PC13-TAMPER-RTC.Locked=true PC13-TAMPER-RTC.Signal=GPIO_Output -PC15-OSC32_OUT.GPIOParameters=GPIO_PuPd -PC15-OSC32_OUT.GPIO_PuPd=GPIO_PULLDOWN -PC15-OSC32_OUT.Locked=true -PC15-OSC32_OUT.Signal=GPXTI15 PD0-OSC_IN.Mode=HSE-External-Oscillator PD0-OSC_IN.Signal=RCC_OSC_IN PD1-OSC_OUT.Mode=HSE-External-Oscillator @@ -87,7 +88,7 @@ ProjectManager.KeepUserCode=true ProjectManager.LastFirmware=true ProjectManager.LibraryCopy=0 ProjectManager.MainLocation=Core/Src -ProjectManager.NoMain=false +ProjectManager.NoMain=true ProjectManager.PreviousToolchain= ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=CAN-B.ioc @@ -122,8 +123,8 @@ RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.TimSysFreq_Value=72000000 RCC.USBFreq_Value=72000000 RCC.VCOOutput2Freq_Value=8000000 -SH.GPXTI15.0=GPIO_EXTI15 -SH.GPXTI15.ConfNb=1 +SH.GPXTI7.0=GPIO_EXTI7 +SH.GPXTI7.ConfNb=1 VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=custom diff --git a/firmware/components/CAN/CAN-B/Inc/stm32f1xx_it.h b/firmware/components/CAN/CAN-B/Inc/stm32f1xx_it.h index 0d1cdc6f..2ae46aa6 100644 --- a/firmware/components/CAN/CAN-B/Inc/stm32f1xx_it.h +++ b/firmware/components/CAN/CAN-B/Inc/stm32f1xx_it.h @@ -56,6 +56,7 @@ void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); void CAN1_RX1_IRQHandler(void); +void EXTI9_5_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/firmware/components/CAN/CAN-B/Src/gpio.c b/firmware/components/CAN/CAN-B/Src/gpio.c index 8484501c..f590b159 100644 --- a/firmware/components/CAN/CAN-B/Src/gpio.c +++ b/firmware/components/CAN/CAN-B/Src/gpio.c @@ -60,11 +60,15 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pin : PC15 */ - GPIO_InitStruct.Pin = GPIO_PIN_15; + /*Configure GPIO pin : PB7 */ + GPIO_InitStruct.Pin = GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* EXTI interrupt init*/ + HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); } diff --git a/firmware/components/CAN/CAN-B/Src/main.c b/firmware/components/CAN/CAN-B/Src/main.c index 162a3950..566d2ea4 100644 --- a/firmware/components/CAN/CAN-B/Src/main.c +++ b/firmware/components/CAN/CAN-B/Src/main.c @@ -67,6 +67,10 @@ uint32_t TxMailbox; uint8_t isValidData; uint8_t status; +uint32_t lastDebounceTime = 0; +const uint32_t debounceDelay = 50; +uint8_t delayLED = 0 ; + /* USER CODE END 0 */ /** @@ -112,13 +116,16 @@ int main(void) TxData[0] = 0x1; + // milliseconds + /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { - //HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); + HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); + HAL_Delay(delayLED*100); } /* USER CODE END 3 */ } @@ -126,15 +133,20 @@ int main(void) void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) { HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader, RxData); - HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,RxData[0]); + delayLED+=RxData[0]; } -void HAL_GPIO_EXTI15_Callback(uint16_t GPIO_Pin) +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { - if(GPIO_Pin == GPIO_PIN_15) + if(GPIO_Pin == GPIO_PIN_7) { - TxData[0] ^= 1; - HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); + uint32_t currentTime = HAL_GetTick(); + if ((currentTime - lastDebounceTime) > debounceDelay) + { + lastDebounceTime = currentTime; + TxData[0] ^= 1; + HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); + } } } diff --git a/firmware/components/CAN/CAN-B/Src/stm32f1xx_it.c b/firmware/components/CAN/CAN-B/Src/stm32f1xx_it.c index b4ef83ee..dff63ba7 100644 --- a/firmware/components/CAN/CAN-B/Src/stm32f1xx_it.c +++ b/firmware/components/CAN/CAN-B/Src/stm32f1xx_it.c @@ -212,6 +212,20 @@ void CAN1_RX1_IRQHandler(void) /* USER CODE END CAN1_RX1_IRQn 1 */ } +/** + * @brief This function handles EXTI line[9:5] interrupts. + */ +void EXTI9_5_IRQHandler(void) +{ + /* USER CODE BEGIN EXTI9_5_IRQn 0 */ + + /* USER CODE END EXTI9_5_IRQn 0 */ + HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7); + /* USER CODE BEGIN EXTI9_5_IRQn 1 */ + + /* USER CODE END EXTI9_5_IRQn 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */