From 2d7a1ff4d0866ca6a3ba34d5a76f6c163fa7c768 Mon Sep 17 00:00:00 2001 From: Kymkim Date: Wed, 25 Jun 2025 15:18:25 -0700 Subject: [PATCH] Add CAN communication and GPIO control functionality - Created HAL configuration file for STM32F1xx (stm32f1xx_hal_conf.h). - Added interrupt handler definitions in stm32f1xx_it.h. - Implemented CAN initialization and configuration in can.c. - Configured GPIO pins for output and external interrupts in gpio.c. - Developed main application logic in main.c for toggling an LED and sending CAN messages. - Implemented MSP initialization and de-initialization for CAN in stm32f1xx_hal_msp.c. - Defined interrupt service routines in stm32f1xx_it.c for CAN and EXTI interrupts. - Added README for project-specific libraries and PlatformIO configuration. - Created platformio.ini for project build settings. - Added stm32pio.ini for CubeMX integration with PlatformIO. - Included README for testing directory to guide unit testing setup. --- firmware/components/CAN/CAN-A/ModuleCAN.ioc | 139 ------------------ firmware/components/CAN/CAN-A/stm32pio.ini | 22 --- .../canblinker}/.gitignore | 0 .../CAN-B => can_testing/canblinker}/.project | 0 .../canblinker}/.vscode/c_cpp_properties.json | 0 .../canblinker}/.vscode/extensions.json | 0 .../canblinker}/.vscode/launch.json | 0 .../canblinker}/CAN-B.ioc | 0 .../canblinker}/Inc/can.h | 0 .../canblinker}/Inc/gpio.h | 0 .../canblinker}/Inc/main.h | 0 .../canblinker}/Inc/stm32f1xx_hal_conf.h | 0 .../canblinker}/Inc/stm32f1xx_it.h | 0 .../canblinker}/Src/can.c | 0 .../canblinker}/Src/gpio.c | 0 .../canblinker}/Src/main.c | 0 .../canblinker}/Src/stm32f1xx_hal_msp.c | 0 .../canblinker}/Src/stm32f1xx_it.c | 0 .../canblinker}/lib/README | 0 .../canblinker}/platformio.ini | 0 .../canblinker}/stm32pio.ini | 0 .../canblinker}/test/README | 0 22 files changed, 161 deletions(-) delete mode 100644 firmware/components/CAN/CAN-A/ModuleCAN.ioc delete mode 100644 firmware/components/CAN/CAN-A/stm32pio.ini rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/.gitignore (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/.project (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/.vscode/c_cpp_properties.json (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/.vscode/extensions.json (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/.vscode/launch.json (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/CAN-B.ioc (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Inc/can.h (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Inc/gpio.h (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Inc/main.h (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Inc/stm32f1xx_hal_conf.h (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Inc/stm32f1xx_it.h (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Src/can.c (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Src/gpio.c (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Src/main.c (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Src/stm32f1xx_hal_msp.c (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/Src/stm32f1xx_it.c (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/lib/README (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/platformio.ini (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/stm32pio.ini (100%) rename firmware/components/{CAN/CAN-B => can_testing/canblinker}/test/README (100%) diff --git a/firmware/components/CAN/CAN-A/ModuleCAN.ioc b/firmware/components/CAN/CAN-A/ModuleCAN.ioc deleted file mode 100644 index ef4df49c..00000000 --- a/firmware/components/CAN/CAN-A/ModuleCAN.ioc +++ /dev/null @@ -1,139 +0,0 @@ -#MicroXplorer Configuration settings - do not modify -CAD.formats= -CAD.pinconfig= -CAD.provider= -CAN.CalculateBaudRate=533333 -CAN.CalculateTimeBit=1875 -CAN.CalculateTimeQuantum=625.0 -CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler -CAN.Prescaler=15 -File.Version=6 -GPIO.groupedBy= -KeepUserPlacement=false -Mcu.CPN=STM32F103C8T6 -Mcu.Family=STM32F1 -Mcu.IP0=CAN -Mcu.IP1=NVIC -Mcu.IP2=RCC -Mcu.IP3=SYS -Mcu.IP4=USB -Mcu.IP5=USB_DEVICE -Mcu.IPNb=6 -Mcu.Name=STM32F103C(8-B)Tx -Mcu.Package=LQFP48 -Mcu.Pin0=PC13-TAMPER-RTC -Mcu.Pin1=PD0-OSC_IN -Mcu.Pin10=VP_SYS_VS_Systick -Mcu.Pin11=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS -Mcu.Pin2=PD1-OSC_OUT -Mcu.Pin3=PA4 -Mcu.Pin4=PA11 -Mcu.Pin5=PA12 -Mcu.Pin6=PA13 -Mcu.Pin7=PA14 -Mcu.Pin8=PB8 -Mcu.Pin9=PB9 -Mcu.PinsNb=12 -Mcu.ThirdPartyNb=0 -Mcu.UserConstants= -Mcu.UserName=STM32F103C8Tx -MxCube.Version=6.13.0 -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.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 -NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 -NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false -NVIC.USB_LP_CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true -NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -PA11.Mode=Device -PA11.Signal=USB_DM -PA12.Mode=Device -PA12.Signal=USB_DP -PA13.Locked=true -PA13.Mode=Serial_Wire -PA13.Signal=SYS_JTMS-SWDIO -PA14.Locked=true -PA14.Mode=Serial_Wire -PA14.Signal=SYS_JTCK-SWCLK -PA4.Locked=true -PA4.Signal=GPIO_Input -PB8.Mode=CAN_Activate -PB8.Signal=CAN_RX -PB9.Mode=CAN_Activate -PB9.Signal=CAN_TX -PC13-TAMPER-RTC.Locked=true -PC13-TAMPER-RTC.Signal=GPIO_Output -PD0-OSC_IN.Mode=HSE-External-Oscillator -PD0-OSC_IN.Signal=RCC_OSC_IN -PD1-OSC_OUT.Mode=HSE-External-Oscillator -PD1-OSC_OUT.Signal=RCC_OSC_OUT -PinOutPanel.RotationAngle=0 -ProjectManager.AskForMigrate=true -ProjectManager.BackupPrevious=false -ProjectManager.CompilerOptimize=6 -ProjectManager.ComputerToolchain=false -ProjectManager.CoupleFile=true -ProjectManager.CustomerFirmwarePackage= -ProjectManager.DefaultFWLocation=true -ProjectManager.DeletePrevious=true -ProjectManager.DeviceId=STM32F103C8Tx -ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.8.6 -ProjectManager.FreePins=false -ProjectManager.HalAssertFull=false -ProjectManager.HeapSize=0x200 -ProjectManager.KeepUserCode=true -ProjectManager.LastFirmware=true -ProjectManager.LibraryCopy=1 -ProjectManager.MainLocation=Core/Src -ProjectManager.NoMain=false -ProjectManager.PreviousToolchain= -ProjectManager.ProjectBuild=false -ProjectManager.ProjectFileName=ModuleCAN.ioc -ProjectManager.ProjectName=ModuleCAN -ProjectManager.ProjectStructure= -ProjectManager.RegisterCallBack= -ProjectManager.StackSize=0x400 -ProjectManager.TargetToolchain=CMake -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_CAN_Init-CAN-false-HAL-true,4-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false -RCC.ADCFreqValue=24000000 -RCC.AHBFreq_Value=48000000 -RCC.APB1CLKDivider=RCC_HCLK_DIV2 -RCC.APB1Freq_Value=24000000 -RCC.APB1TimFreq_Value=48000000 -RCC.APB2Freq_Value=48000000 -RCC.APB2TimFreq_Value=48000000 -RCC.FCLKCortexFreq_Value=48000000 -RCC.FamilyName=M -RCC.HCLKFreq_Value=48000000 -RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value -RCC.MCOFreq_Value=48000000 -RCC.PLLCLKFreq_Value=48000000 -RCC.PLLMCOFreq_Value=24000000 -RCC.PLLMUL=RCC_PLL_MUL6 -RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE -RCC.SYSCLKFreq_VALUE=48000000 -RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK -RCC.TimSysFreq_Value=48000000 -RCC.USBFreq_Value=48000000 -RCC.VCOOutput2Freq_Value=8000000 -USB_DEVICE.CLASS_NAME_FS=CDC -USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,PRODUCT_STRING_CDC_FS -USB_DEVICE.PRODUCT_STRING_CDC_FS=Modular Keyboard - Module VCOM -USB_DEVICE.VirtualMode=Cdc -USB_DEVICE.VirtualModeFS=Cdc_FS -VP_SYS_VS_Systick.Mode=SysTick -VP_SYS_VS_Systick.Signal=SYS_VS_Systick -VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS -VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS -board=custom diff --git a/firmware/components/CAN/CAN-A/stm32pio.ini b/firmware/components/CAN/CAN-A/stm32pio.ini deleted file mode 100644 index f2c2ec4e..00000000 --- a/firmware/components/CAN/CAN-A/stm32pio.ini +++ /dev/null @@ -1,22 +0,0 @@ -[app] -platformio_cmd = platformio -cubemx_cmd = /opt/stm32cubemx/STM32CubeMX -java_cmd = java - -[project] -cubemx_script_content = config load ${ioc_file_absolute_path} - generate code ${project_dir_absolute_path} - exit -platformio_ini_patch_content = [platformio] - include_dir = Inc - src_dir = Src -board = -ioc_file = ModuleCAN.ioc -cleanup_ignore = ModuleCAN.ioc -cleanup_use_git = False -inspect_ioc = True -last_error = PlatformIO board is not specified, it will be needed on PlatformIO project creation. Type 'pio boards' or go to https://platformio.org to find an appropriate identifier - Traceback (most recent call last): - File "/home/kymkim/.local/share/pipx/venvs/stm32pio/lib/python3.13/site-packages/stm32pio/cli/app.py", line 195, in main - raise Exception(no_board_message) - diff --git a/firmware/components/CAN/CAN-B/.gitignore b/firmware/components/can_testing/canblinker/.gitignore similarity index 100% rename from firmware/components/CAN/CAN-B/.gitignore rename to firmware/components/can_testing/canblinker/.gitignore diff --git a/firmware/components/CAN/CAN-B/.project b/firmware/components/can_testing/canblinker/.project similarity index 100% rename from firmware/components/CAN/CAN-B/.project rename to firmware/components/can_testing/canblinker/.project diff --git a/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json b/firmware/components/can_testing/canblinker/.vscode/c_cpp_properties.json similarity index 100% rename from firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json rename to firmware/components/can_testing/canblinker/.vscode/c_cpp_properties.json diff --git a/firmware/components/CAN/CAN-B/.vscode/extensions.json b/firmware/components/can_testing/canblinker/.vscode/extensions.json similarity index 100% rename from firmware/components/CAN/CAN-B/.vscode/extensions.json rename to firmware/components/can_testing/canblinker/.vscode/extensions.json diff --git a/firmware/components/CAN/CAN-B/.vscode/launch.json b/firmware/components/can_testing/canblinker/.vscode/launch.json similarity index 100% rename from firmware/components/CAN/CAN-B/.vscode/launch.json rename to firmware/components/can_testing/canblinker/.vscode/launch.json diff --git a/firmware/components/CAN/CAN-B/CAN-B.ioc b/firmware/components/can_testing/canblinker/CAN-B.ioc similarity index 100% rename from firmware/components/CAN/CAN-B/CAN-B.ioc rename to firmware/components/can_testing/canblinker/CAN-B.ioc diff --git a/firmware/components/CAN/CAN-B/Inc/can.h b/firmware/components/can_testing/canblinker/Inc/can.h similarity index 100% rename from firmware/components/CAN/CAN-B/Inc/can.h rename to firmware/components/can_testing/canblinker/Inc/can.h diff --git a/firmware/components/CAN/CAN-B/Inc/gpio.h b/firmware/components/can_testing/canblinker/Inc/gpio.h similarity index 100% rename from firmware/components/CAN/CAN-B/Inc/gpio.h rename to firmware/components/can_testing/canblinker/Inc/gpio.h diff --git a/firmware/components/CAN/CAN-B/Inc/main.h b/firmware/components/can_testing/canblinker/Inc/main.h similarity index 100% rename from firmware/components/CAN/CAN-B/Inc/main.h rename to firmware/components/can_testing/canblinker/Inc/main.h diff --git a/firmware/components/CAN/CAN-B/Inc/stm32f1xx_hal_conf.h b/firmware/components/can_testing/canblinker/Inc/stm32f1xx_hal_conf.h similarity index 100% rename from firmware/components/CAN/CAN-B/Inc/stm32f1xx_hal_conf.h rename to firmware/components/can_testing/canblinker/Inc/stm32f1xx_hal_conf.h diff --git a/firmware/components/CAN/CAN-B/Inc/stm32f1xx_it.h b/firmware/components/can_testing/canblinker/Inc/stm32f1xx_it.h similarity index 100% rename from firmware/components/CAN/CAN-B/Inc/stm32f1xx_it.h rename to firmware/components/can_testing/canblinker/Inc/stm32f1xx_it.h diff --git a/firmware/components/CAN/CAN-B/Src/can.c b/firmware/components/can_testing/canblinker/Src/can.c similarity index 100% rename from firmware/components/CAN/CAN-B/Src/can.c rename to firmware/components/can_testing/canblinker/Src/can.c diff --git a/firmware/components/CAN/CAN-B/Src/gpio.c b/firmware/components/can_testing/canblinker/Src/gpio.c similarity index 100% rename from firmware/components/CAN/CAN-B/Src/gpio.c rename to firmware/components/can_testing/canblinker/Src/gpio.c diff --git a/firmware/components/CAN/CAN-B/Src/main.c b/firmware/components/can_testing/canblinker/Src/main.c similarity index 100% rename from firmware/components/CAN/CAN-B/Src/main.c rename to firmware/components/can_testing/canblinker/Src/main.c diff --git a/firmware/components/CAN/CAN-B/Src/stm32f1xx_hal_msp.c b/firmware/components/can_testing/canblinker/Src/stm32f1xx_hal_msp.c similarity index 100% rename from firmware/components/CAN/CAN-B/Src/stm32f1xx_hal_msp.c rename to firmware/components/can_testing/canblinker/Src/stm32f1xx_hal_msp.c diff --git a/firmware/components/CAN/CAN-B/Src/stm32f1xx_it.c b/firmware/components/can_testing/canblinker/Src/stm32f1xx_it.c similarity index 100% rename from firmware/components/CAN/CAN-B/Src/stm32f1xx_it.c rename to firmware/components/can_testing/canblinker/Src/stm32f1xx_it.c diff --git a/firmware/components/CAN/CAN-B/lib/README b/firmware/components/can_testing/canblinker/lib/README similarity index 100% rename from firmware/components/CAN/CAN-B/lib/README rename to firmware/components/can_testing/canblinker/lib/README diff --git a/firmware/components/CAN/CAN-B/platformio.ini b/firmware/components/can_testing/canblinker/platformio.ini similarity index 100% rename from firmware/components/CAN/CAN-B/platformio.ini rename to firmware/components/can_testing/canblinker/platformio.ini diff --git a/firmware/components/CAN/CAN-B/stm32pio.ini b/firmware/components/can_testing/canblinker/stm32pio.ini similarity index 100% rename from firmware/components/CAN/CAN-B/stm32pio.ini rename to firmware/components/can_testing/canblinker/stm32pio.ini diff --git a/firmware/components/CAN/CAN-B/test/README b/firmware/components/can_testing/canblinker/test/README similarity index 100% rename from firmware/components/CAN/CAN-B/test/README rename to firmware/components/can_testing/canblinker/test/README