From 470f4fc4da8feaa84388d1d7393f21caa8432477 Mon Sep 17 00:00:00 2001 From: Kymkim Date: Thu, 12 Jun 2025 19:06:44 -0700 Subject: [PATCH] update USB product string and include paths for CAN module. starting code with CAN as loopback to check if its working. not yet tested --- .../CAN/CAN-B/.vscode/c_cpp_properties.json | 2 + firmware/components/CAN/CAN-B/ModuleCAN.ioc | 2 +- firmware/components/CAN/CAN-B/Src/main.c | 138 ++++++++---------- firmware/components/CAN/CAN-B/Src/usbd_desc.c | 2 +- 4 files changed, 67 insertions(+), 77 deletions(-) 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 a5c9a876..8e174318 100644 --- a/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json +++ b/firmware/components/CAN/CAN-B/.vscode/c_cpp_properties.json @@ -19,6 +19,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", @@ -72,6 +73,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/ModuleCAN.ioc b/firmware/components/CAN/CAN-B/ModuleCAN.ioc index ef4df49c..dea97251 100644 --- a/firmware/components/CAN/CAN-B/ModuleCAN.ioc +++ b/firmware/components/CAN/CAN-B/ModuleCAN.ioc @@ -129,7 +129,7 @@ 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.PRODUCT_STRING_CDC_FS=ModularKeyboardCOM USB_DEVICE.VirtualMode=Cdc USB_DEVICE.VirtualModeFS=Cdc_FS VP_SYS_VS_Systick.Mode=SysTick diff --git a/firmware/components/CAN/CAN-B/Src/main.c b/firmware/components/CAN/CAN-B/Src/main.c index b438e06f..14889cfb 100644 --- a/firmware/components/CAN/CAN-B/Src/main.c +++ b/firmware/components/CAN/CAN-B/Src/main.c @@ -1,63 +1,24 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.c - * @brief : Main program body - ****************************************************************************** - * @attention - * - * Copyright (c) 2025 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ +/* +Sub-module CAN. Sends data to the master (CAN-A) +*/ + #include "main.h" #include "can.h" #include "usb_device.h" +#include "usbd_cdc_if.h" +#include "string.h" #include "gpio.h" -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); -/* USER CODE BEGIN PFP */ -/* USER CODE END PFP */ +CAN_TxHeaderTypeDef TxHeader; +CAN_RxHeaderTypeDef RxHeader; -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ +uint8_t TxData[8]; //Buffer for output data +uint8_t RxData[8]; //Buffer for input data (probably will never get used) -/* USER CODE END 0 */ +//Think of this as a location that will hold the pending data to send untill its ready. +uint32_t TxMailbox; /** * @brief The application entry point. @@ -66,43 +27,70 @@ void SystemClock_Config(void); int main(void) { - /* USER CODE BEGIN 1 */ - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ SystemClock_Config(); + /* + FIXME: USB CDC would be super useful in debugging. This might be also + Related to doing the USB HID since there are something going on with the + USB not getting detected on my device properly + + At the mmoment, I'm getting device "address not responding" error using dmesg } grep usb + Some searching up hints that this is a common problem with Bluepills but because BP comes from many + Manufacturers its pretty hard to track it down to one problem. Can't find the schematic for ours too + The problem seems to be related to the resistor on the DP+ and DP- on the USB + + Either that or we got a counterfiet STM32 board. I'll test it with a reputable brand to see. Other functionalities work though + */ /* USER CODE BEGIN SysInit */ + GPIO_InitTypeDef USB_RESISTOR = {0}; + USB_RESISTOR.Pin = GPIO_PIN_12; + USB_RESISTOR.Mode = GPIO_MODE_OUTPUT_OD; + USB_RESISTOR.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA,&USB_RESISTOR); - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ + //Force Reset USB + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET); + HAL_Delay(50); + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); + MX_GPIO_Init(); MX_CAN_Init(); + + //Enables an interrupt when a data is recieved. + //This includes your own data you sent so this is when filters comes to play + HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING); + + HAL_CAN_Start(&hcan); + + TxHeader.DLC = 1; //The lenght of data to send (in bytes) + TxHeader.ExtId = 0; //The ext. ID of the device + TxHeader.IDE = CAN_ID_STD; //No need for us to use ext. ID + TxHeader.RTR = CAN_RTR_DATA; //We are sending data... + TxHeader.StdId = 0x100; //The ID of this module is now 100. Any devices with a filter matching this ID would read it + TxHeader.TransmitGlobalTime = DISABLE; + + //Sample message send + TxData[0] = 0xf1; + MX_USB_DEVICE_Init(); - /* USER CODE BEGIN 2 */ - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ while (1) { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ + HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); + HAL_Delay(1000); } - /* USER CODE END 3 */ + +} + +void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + //Read message from the RxCAN and store it on RxHeader + HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData); + HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); + char *buf = RxData[0]; + CDC_Transmit_FS((uint8_t *)buf,strlen(buf)); } /** diff --git a/firmware/components/CAN/CAN-B/Src/usbd_desc.c b/firmware/components/CAN/CAN-B/Src/usbd_desc.c index 973c8061..d46f04e4 100644 --- a/firmware/components/CAN/CAN-B/Src/usbd_desc.c +++ b/firmware/components/CAN/CAN-B/Src/usbd_desc.c @@ -66,7 +66,7 @@ #define USBD_LANGID_STRING 1033 #define USBD_MANUFACTURER_STRING "STMicroelectronics" #define USBD_PID_FS 22336 -#define USBD_PRODUCT_STRING_FS "Modular Keyboard - Module VCOM" +#define USBD_PRODUCT_STRING_FS "ModularKeyboardCOM" #define USBD_CONFIGURATION_STRING_FS "CDC Config" #define USBD_INTERFACE_STRING_FS "CDC Interface"