diff --git a/firmware/components/CAN/CAN-B/.project b/firmware/components/CAN/CAN-B/.project new file mode 100644 index 00000000..fdb178ce --- /dev/null +++ b/firmware/components/CAN/CAN-B/.project @@ -0,0 +1,11 @@ + + + CAN-B + + + + + + + + diff --git a/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json b/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json index a17400b1..315a1570 100644 --- a/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json +++ b/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json @@ -15,6 +15,7 @@ "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/STM32F1xx_HAL_Driver/Inc", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/STM32F1xx_HAL_Driver/Src", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/CMSIS/DSP/Include", + "/home/kymkim/Projects/modular-kbd/firmware/components/CAN/CAN-B/.pio/libdeps/bluepill_f103c8/Unity/src", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/BSP/Components/Common", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/BSP/Components/ak4343", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/BSP/Components/cs43l22", @@ -68,6 +69,7 @@ "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/STM32F1xx_HAL_Driver/Inc", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/STM32F1xx_HAL_Driver/Src", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/CMSIS/DSP/Include", + "/home/kymkim/Projects/modular-kbd/firmware/components/CAN/CAN-B/.pio/libdeps/bluepill_f103c8/Unity/src", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/BSP/Components/Common", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/BSP/Components/ak4343", "/home/kymkim/.platformio/packages/framework-stm32cubef1/Drivers/BSP/Components/cs43l22", diff --git a/firmware/components/CAN/CAN-B/CAN-B.ioc b/firmware/components/CAN/CAN-B/CAN-B.ioc index 8e7f69f3..f377b18e 100644 --- a/firmware/components/CAN/CAN-B/CAN-B.ioc +++ b/firmware/components/CAN/CAN-B/CAN-B.ioc @@ -2,11 +2,13 @@ CAD.formats= CAD.pinconfig= CAD.provider= -CAN.CalculateBaudRate=800000 -CAN.CalculateTimeBit=1250 -CAN.CalculateTimeQuantum=416.6666666666667 -CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,SJW -CAN.Prescaler=15 +CAN.BS1=CAN_BS1_13TQ +CAN.BS2=CAN_BS2_2TQ +CAN.CalculateBaudRate=125000 +CAN.CalculateTimeBit=8000 +CAN.CalculateTimeQuantum=500.0 +CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,SJW,BS1,BS2 +CAN.Prescaler=18 CAN.SJW=CAN_SJW_1TQ File.Version=6 GPIO.groupedBy= @@ -21,14 +23,15 @@ Mcu.IPNb=4 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC -Mcu.Pin1=PD0-OSC_IN -Mcu.Pin2=PD1-OSC_OUT -Mcu.Pin3=PA11 -Mcu.Pin4=PA12 -Mcu.Pin5=PA13 -Mcu.Pin6=PA14 -Mcu.Pin7=VP_SYS_VS_Systick -Mcu.PinsNb=8 +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin2=PD0-OSC_IN +Mcu.Pin3=PD1-OSC_OUT +Mcu.Pin4=PA13 +Mcu.Pin5=PA14 +Mcu.Pin6=PB8 +Mcu.Pin7=PB9 +Mcu.Pin8=VP_SYS_VS_Systick +Mcu.PinsNb=9 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx @@ -46,16 +49,22 @@ 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.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false -PA11.Mode=CAN_Activate -PA11.Signal=CAN_RX -PA12.Mode=CAN_Activate -PA12.Signal=CAN_TX PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PB8.Locked=true +PB8.Mode=CAN_Activate +PB8.Signal=CAN_RX +PB9.Locked=true +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 @@ -65,7 +74,7 @@ ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false ProjectManager.CompilerOptimize=6 ProjectManager.ComputerToolchain=false -ProjectManager.CoupleFile=false +ProjectManager.CoupleFile=true ProjectManager.CustomerFirmwarePackage= ProjectManager.DefaultFWLocation=true ProjectManager.DeletePrevious=true @@ -86,12 +95,12 @@ ProjectManager.ProjectName=CAN-B ProjectManager.ProjectStructure= ProjectManager.RegisterCallBack= ProjectManager.StackSize=0x400 -ProjectManager.TargetToolchain=EWARM V8.32 +ProjectManager.TargetToolchain=CMake ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort= +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 RCC.ADCFreqValue=36000000 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 @@ -113,6 +122,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 VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=custom diff --git a/firmware/components/CAN/CAN-B/Src/can.c b/firmware/components/CAN/CAN-B/Src/can.c index 7d2fd349..779eff55 100644 --- a/firmware/components/CAN/CAN-B/Src/can.c +++ b/firmware/components/CAN/CAN-B/Src/can.c @@ -38,11 +38,11 @@ void MX_CAN_Init(void) /* USER CODE END CAN_Init 1 */ hcan.Instance = CAN1; - hcan.Init.Prescaler = 15; + hcan.Init.Prescaler = 18; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; - hcan.Init.TimeSeg1 = CAN_BS1_1TQ; - hcan.Init.TimeSeg2 = CAN_BS2_1TQ; + hcan.Init.TimeSeg1 = CAN_BS1_13TQ; + hcan.Init.TimeSeg2 = CAN_BS2_2TQ; hcan.Init.TimeTriggeredMode = DISABLE; hcan.Init.AutoBusOff = DISABLE; hcan.Init.AutoWakeUp = DISABLE; @@ -56,7 +56,7 @@ void MX_CAN_Init(void) /* USER CODE BEGIN CAN_Init 2 */ CAN_FilterTypeDef canfilterconf; canfilterconf.FilterActivation = CAN_FILTER_ENABLE; - canfilterconf.FilterBank = 18; + canfilterconf.FilterBank = 0; canfilterconf.FilterFIFOAssignment = CAN_FILTER_FIFO1; canfilterconf.FilterIdHigh = 0x399 << 5; canfilterconf.FilterIdLow = 0x0000; @@ -81,20 +81,22 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) /* CAN1 clock enable */ __HAL_RCC_CAN1_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); /**CAN GPIO Configuration - PA11 ------> CAN_RX - PA12 ------> CAN_TX + PB8 ------> CAN_RX + PB9 ------> CAN_TX */ - GPIO_InitStruct.Pin = GPIO_PIN_11; + GPIO_InitStruct.Pin = GPIO_PIN_8; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - GPIO_InitStruct.Pin = GPIO_PIN_12; + GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + __HAL_AFIO_REMAP_CAN1_2(); /* CAN1 interrupt Init */ HAL_NVIC_SetPriority(CAN1_RX1_IRQn, 0, 0); @@ -117,10 +119,10 @@ void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle) __HAL_RCC_CAN1_CLK_DISABLE(); /**CAN GPIO Configuration - PA11 ------> CAN_RX - PA12 ------> CAN_TX + PB8 ------> CAN_RX + PB9 ------> CAN_TX */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12); + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_8|GPIO_PIN_9); /* CAN1 interrupt Deinit */ HAL_NVIC_DisableIRQ(CAN1_RX1_IRQn); diff --git a/firmware/components/CAN/CAN-B/Src/gpio.c b/firmware/components/CAN/CAN-B/Src/gpio.c index e293e461..8484501c 100644 --- a/firmware/components/CAN/CAN-B/Src/gpio.c +++ b/firmware/components/CAN/CAN-B/Src/gpio.c @@ -48,6 +48,7 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); @@ -59,11 +60,11 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pin : PA10 (Input with Pull-Down) */ - GPIO_InitStruct.Pin = GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + /*Configure GPIO pin : PC15 */ + GPIO_InitStruct.Pin = GPIO_PIN_15; + GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); } diff --git a/firmware/components/CAN/CAN-B/Src/main.c b/firmware/components/CAN/CAN-B/Src/main.c index 1f77f04a..162a3950 100644 --- a/firmware/components/CAN/CAN-B/Src/main.c +++ b/firmware/components/CAN/CAN-B/Src/main.c @@ -65,6 +65,7 @@ uint8_t RxData[8]; uint32_t TxMailbox; uint8_t isValidData; +uint8_t status; /* USER CODE END 0 */ @@ -102,17 +103,14 @@ int main(void) HAL_CAN_Start(&hcan); HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO1_MSG_PENDING); + HAL_Delay(50); - TxHeader.DLC = 2; + TxHeader.DLC = 1; TxHeader.IDE = CAN_ID_STD; TxHeader.RTR = CAN_RTR_DATA; TxHeader.StdId = 0x399; - TxData[0] = 100; - TxData[1] = 255; - - int GPIOSTATUS = 0; - int oldGPIOSTATUS = 0; + TxData[0] = 0x1; /* USER CODE END 2 */ @@ -120,35 +118,27 @@ int main(void) /* USER CODE BEGIN WHILE */ while (1) { - /* USER CODE END WHILE */ - GPIOSTATUS = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10); - if(GPIOSTATUS && !oldGPIOSTATUS){ - HAL_Delay(20); - HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); - } - oldGPIOSTATUS = GPIOSTATUS; - - if(isValidData){ - isValidData = 0; - for(int i = 0; i < RxData[0]; i++){ - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); - HAL_Delay(RxData[1]); - } - } - /* USER CODE BEGIN 3 */ + //HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); } /* USER CODE END 3 */ } -void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan){ - if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader, RxData) != HAL_OK) { - return; - }; - if(RxHeader.DLC == 2){ - isValidData = 1; +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]); +} + +void HAL_GPIO_EXTI15_Callback(uint16_t GPIO_Pin) +{ + if(GPIO_Pin == GPIO_PIN_15) + { + TxData[0] ^= 1; + HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); } } + /** * @brief System Clock Configuration * @retval None