diff --git a/Core/Inc/PSE_unit.h b/Core/Inc/PSE_unit.h index 0d3d13e..5d0e822 100644 --- a/Core/Inc/PSE_unit.h +++ b/Core/Inc/PSE_unit.h @@ -23,6 +23,8 @@ typedef struct{ uint32_t step_itvl; uint8_t step_max; uint32_t tick_counter; + int32_t steps_counter; + uint8_t stopAtHome; GPIO_TypeDef* EN_GPIO_Port; uint16_t EN_GPIO_Pin; diff --git a/Core/Inc/pse_stepper_planer.h b/Core/Inc/pse_stepper_planer.h index 1cf181a..c9b9f11 100644 --- a/Core/Inc/pse_stepper_planer.h +++ b/Core/Inc/pse_stepper_planer.h @@ -17,6 +17,7 @@ void pse_sp_start_axis(pse_stepper_conf* conf); void pse_sp_stop_axis(pse_stepper_conf* conf); void pse_sp_set_dir(pse_stepper_conf* conf, int dir); +//int pse_sp_get_dir(pse_stepper_conf* conf); void pse_stepper_planer_tick(pse_unit* units, uint8_t units_num); void pse_sp_start_all(pse_unit* units, int unit_num); diff --git a/Core/Src/PSE_unit_edit_screen.c b/Core/Src/PSE_unit_edit_screen.c index fd83c7f..e5f4b9d 100644 --- a/Core/Src/PSE_unit_edit_screen.c +++ b/Core/Src/PSE_unit_edit_screen.c @@ -160,6 +160,15 @@ static void jog_backward_button_handler(lv_event_t* e){ pse_sp_stop_axis(unit->stepper_conf); } } +static void set_home_button_handler(lv_event_t* e){ + lv_event_code_t code = lv_event_get_code(e); + + pse_unit* unit = lv_event_get_user_data(e); + + if(code == LV_EVENT_CLICKED) { + unit->stepper_conf->steps_counter = 0; + } +} static lv_obj_t* controls_widget(lv_obj_t* parent, pse_unit* unit){ // The main container @@ -189,6 +198,7 @@ static lv_obj_t* controls_widget(lv_obj_t* parent, pse_unit* unit){ lv_obj_t* home_label = lv_label_create(home); lv_obj_set_width(home, lv_pct(100)); lv_obj_set_flex_grow(home, 1); + lv_obj_add_event_cb(home, set_home_button_handler, LV_EVENT_ALL, unit); lv_label_set_text(home_label, LV_SYMBOL_HOME); lv_obj_center(home_label); return cont; diff --git a/Core/Src/home_screen.c b/Core/Src/home_screen.c index 2012bda..e30b85e 100644 --- a/Core/Src/home_screen.c +++ b/Core/Src/home_screen.c @@ -62,6 +62,19 @@ static void unit_widget_enabled_handler(lv_event_t * e){ } } +static void unit_home_handler(lv_event_t * e){ + lv_event_code_t code = lv_event_get_code(e); + + if(code == LV_EVENT_CLICKED) { + pse_unit* unit = lv_event_get_user_data(e); + pse_stepper_conf* c = unit->stepper_conf; + c->stopAtHome = 1; + c->step_max = 1; + pse_sp_set_dir(c, 1); + pse_sp_start_axis(c); + } +} + static void unit_widget_clicked_handler(lv_event_t* e){ lv_event_code_t code = lv_event_get_code(e); @@ -94,6 +107,7 @@ static lv_obj_t* PSE_unit_widget(lv_obj_t* parent, pse_unit* pse_unit){ lv_obj_t* home = lv_btn_create(cont); lv_obj_t* home_label = lv_label_create(home); lv_obj_set_width(home, lv_pct(100)); + lv_obj_add_event_cb(home, unit_home_handler, LV_EVENT_ALL, pse_unit); lv_obj_set_flex_grow(home, 1); lv_obj_center(home_label); lv_label_set_text(home_label, LV_SYMBOL_HOME); diff --git a/Core/Src/main.c b/Core/Src/main.c index 5c770e1..e6de458 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -42,7 +42,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ -#define BUFF_SIZE (320 * 10) +#define BUFF_SIZE (320 * 5) #define LCD_WIDTH 320 #define LCD_HEIGHT 240 /* USER CODE END PD */ @@ -155,7 +155,7 @@ void my_flush_cb(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * buf) drawYmax = area->y2; ILI9341_SetCursor(area->x1,drawY); ILI9341_WriteRam(); - drawLineLen = (area->x2 - area->x1); + drawLineLen = (area->x2 - area->x1)+1; drawY++; drawBuf = buf; drawDisp = disp; @@ -387,7 +387,7 @@ static void MX_TIM4_Init(void) htim4.Instance = TIM4; htim4.Init.Prescaler = 64; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - htim4.Init.Period = 50; + htim4.Init.Period = 100; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) @@ -643,7 +643,7 @@ void XferCpltCallback(DMA_HandleTypeDef *hdma){ ILI9341_SetCursor(drawXmin,drawY); ILI9341_WriteRam(); drawY++; - drawBuf+=drawLineLen+1; + drawBuf+=drawLineLen; hdma_memtomem_dma2_channel1.XferCpltCallback=&XferCpltCallback; HAL_DMA_Start_IT(&hdma_memtomem_dma2_channel1, (uint32_t)drawBuf, (uint32_t)LCD_IO_getDataPt(), drawLineLen); } diff --git a/Core/Src/pse_stepper_planer.c b/Core/Src/pse_stepper_planer.c index e9afc41..b477fff 100644 --- a/Core/Src/pse_stepper_planer.c +++ b/Core/Src/pse_stepper_planer.c @@ -29,6 +29,10 @@ void pse_stepper_planer_tick(pse_unit* units, uint8_t units_num){ } c->tick_counter++; HAL_GPIO_WritePin(c->STEP_GPIO_Port, c->STEP_GPIO_Pin, state); + /*c->steps_counter += (pse_sp_get_dir(c)?1:-1) * (state?1:0); + if(c->stopAtHome && c->steps_counter == 0){ + pse_sp_stop_axis(c); + }*/ } } @@ -54,6 +58,9 @@ void pse_sp_set_dir(pse_stepper_conf* conf, int dir){ HAL_GPIO_WritePin(conf->DIR_GPIO_Port, conf->DIR_GPIO_Pin, dir); } +/*int pse_sp_get_dir(pse_stepper_conf* conf){ + return HAL_GPIO_ReadPin(conf->DIR_GPIO_Port, conf->DIR_GPIO_Pin); +}*/ void pse_stepper_planer_compute_sps(pse_unit* unit){ pse_stepper_conf* c = unit->stepper_conf; diff --git a/Drivers/lv_conf.h b/Drivers/lv_conf.h index 0e10466..ad3403d 100644 --- a/Drivers/lv_conf.h +++ b/Drivers/lv_conf.h @@ -49,7 +49,7 @@ #define LV_MEM_CUSTOM 0 #if LV_MEM_CUSTOM == 0 /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ - #define LV_MEM_SIZE (32U * 1024U) /*[bytes]*/ + #define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/ /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ #define LV_MEM_ADR 0 /*0: unused*/ diff --git a/PSE.ioc b/PSE.ioc index 27f3e56..172b689 100644 --- a/PSE.ioc +++ b/PSE.ioc @@ -312,7 +312,7 @@ SDIO.HardwareFlowControl=SDIO_HARDWARE_FLOW_CONTROL_DISABLE SDIO.IPParameters=ClockDiv,HardwareFlowControl TIM4.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM4.IPParameters=Prescaler,Period,AutoReloadPreload -TIM4.Period=50 +TIM4.Period=100 TIM4.Prescaler=64 USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC diff --git a/PSE.pdf b/PSE.pdf new file mode 100644 index 0000000..16980a6 Binary files /dev/null and b/PSE.pdf differ diff --git a/PSE.txt b/PSE.txt new file mode 100644 index 0000000..e156db6 --- /dev/null +++ b/PSE.txt @@ -0,0 +1,188 @@ +Configuration PSE +STM32CubeMX 6.9.1 +Date 08/24/2023 +MCU STM32F103VETx + + + +PERIPHERALS MODES FUNCTIONS PINS +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 NE1 FSMC_NE1 PD7 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 LCD Interface FSMC_NOE PD4 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 LCD Interface FSMC_NWE PD5 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 A16 FSMC_A16 PD11 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D0 PD14 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D1 PD15 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D2 PD0 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D3 PD1 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D4 PE7 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D5 PE8 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D6 PE9 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D7 PE10 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D8 PE11 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D9 PE12 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D10 PE13 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D11 PE14 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D12 PE15 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D13 PD8 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D14 PD9 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D15 PD10 +SDIO SD 1 bit SDIO_CK PC12 +SDIO SD 1 bit SDIO_CMD PD2 +SDIO SD 1 bit SDIO_D0 PC8 +SYS SysTick SYS_VS_Systick VP_SYS_VS_Systick +TIM4 Internal Clock TIM4_VS_ClockSourceINT VP_TIM4_VS_ClockSourceINT +USART1 Asynchronous USART1_RX PA10 +USART1 Asynchronous USART1_TX PA9 + + + +Pin Nb PINs FUNCTIONs LABELs +1 PE2 GPIO_Output E_STEPPER_DIR +2 PE3 GPIO_Output E_STEPPER_STEP +3 PE4 GPIO_Output E_STEPPER_EN +17 PC2 GPIO_Output LED +33 PC4 GPIO_Output LCD_RST +38 PE7 FSMC_D4 +39 PE8 FSMC_D5 +40 PE9 FSMC_D6 +41 PE10 FSMC_D7 +42 PE11 FSMC_D8 +43 PE12 FSMC_D9 +44 PE13 FSMC_D10 +45 PE14 FSMC_D11 +46 PE15 FSMC_D12 +51 PB12 GPIO_Output ADS7843_CS +52 PB13 GPIO_Output ADS7843_SCK +53 PB14 GPIO_Output ADS7843_MOSI +54 PB15 GPIO_Input ADS7843_MISO +55 PD8 FSMC_D13 +56 PD9 FSMC_D14 +57 PD10 FSMC_D15 +58 PD11 FSMC_A16 +59 PD12 GPIO_Output LCD_CS +61 PD14 FSMC_D0 +62 PD15 FSMC_D1 +63 PC6 GPIO_Input ADS7843_Int +65 PC8 SDIO_D0 +68 PA9 USART1_TX +69 PA10 USART1_RX +80 PC12 SDIO_CK +81 PD0 FSMC_D2 +82 PD1 FSMC_D3 +83 PD2 SDIO_CMD +85 PD4 FSMC_NOE +86 PD5 FSMC_NWE +88 PD7 FSMC_NE1 +89 PB3 GPIO_Output X_STEPPER_DIR +90 PB4 GPIO_Output X_STEPPER_STEP +91 PB5 GPIO_Output X_STEPPER_EN +92 PB6 GPIO_Output Y_STEPPER_DIR +93 PB7 GPIO_Output Y_STEPPER_STEP +95 PB8 GPIO_Output Y_STEPPER_EN +96 PB9 GPIO_Output Z_STEPPER_DIR +97 PE0 GPIO_Output Z_STEPPER_STEP +98 PE1 GPIO_Output Z_STEPPER_EN +PERIPHERALS MODES FUNCTIONS PINS +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 NE1 FSMC_NE1 PD7 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 LCD Interface FSMC_NOE PD4 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 LCD Interface FSMC_NWE PD5 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 A16 FSMC_A16 PD11 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D0 PD14 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D1 PD15 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D2 PD0 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D3 PD1 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D4 PE7 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D5 PE8 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D6 PE9 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D7 PE10 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D8 PE11 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D9 PE12 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D10 PE13 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D11 PE14 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D12 PE15 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D13 PD8 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D14 PD9 +FSMC:NOR Flash/PSRAM/SRAM/ROM/LCD 1 16 bits FSMC_D15 PD10 +SDIO SD 1 bit SDIO_CK PC12 +SDIO SD 1 bit SDIO_CMD PD2 +SDIO SD 1 bit SDIO_D0 PC8 +SYS SysTick SYS_VS_Systick VP_SYS_VS_Systick +TIM4 Internal Clock TIM4_VS_ClockSourceINT VP_TIM4_VS_ClockSourceINT +USART1 Asynchronous USART1_RX PA10 +USART1 Asynchronous USART1_TX PA9 + + + +Pin Nb PINs FUNCTIONs LABELs +1 PE2 GPIO_Output E_STEPPER_DIR +2 PE3 GPIO_Output E_STEPPER_STEP +3 PE4 GPIO_Output E_STEPPER_EN +17 PC2 GPIO_Output LED +33 PC4 GPIO_Output LCD_RST +38 PE7 FSMC_D4 +39 PE8 FSMC_D5 +40 PE9 FSMC_D6 +41 PE10 FSMC_D7 +42 PE11 FSMC_D8 +43 PE12 FSMC_D9 +44 PE13 FSMC_D10 +45 PE14 FSMC_D11 +46 PE15 FSMC_D12 +51 PB12 GPIO_Output ADS7843_CS +52 PB13 GPIO_Output ADS7843_SCK +53 PB14 GPIO_Output ADS7843_MOSI +54 PB15 GPIO_Input ADS7843_MISO +55 PD8 FSMC_D13 +56 PD9 FSMC_D14 +57 PD10 FSMC_D15 +58 PD11 FSMC_A16 +59 PD12 GPIO_Output LCD_CS +61 PD14 FSMC_D0 +62 PD15 FSMC_D1 +63 PC6 GPIO_Input ADS7843_Int +65 PC8 SDIO_D0 +68 PA9 USART1_TX +69 PA10 USART1_RX +80 PC12 SDIO_CK +81 PD0 FSMC_D2 +82 PD1 FSMC_D3 +83 PD2 SDIO_CMD +85 PD4 FSMC_NOE +86 PD5 FSMC_NWE +88 PD7 FSMC_NE1 +89 PB3 GPIO_Output X_STEPPER_DIR +90 PB4 GPIO_Output X_STEPPER_STEP +91 PB5 GPIO_Output X_STEPPER_EN +92 PB6 GPIO_Output Y_STEPPER_DIR +93 PB7 GPIO_Output Y_STEPPER_STEP +95 PB8 GPIO_Output Y_STEPPER_EN +96 PB9 GPIO_Output Z_STEPPER_DIR +97 PE0 GPIO_Output Z_STEPPER_STEP +98 PE1 GPIO_Output Z_STEPPER_EN + + + +SOFTWARE PROJECT + +Project Settings : +Project Name : PSE +Project Folder : /home/leo/STM32CubeIDE/workspace_1.13.1/PSE +Toolchain / IDE : STM32CubeIDE +Firmware Package Name and Version : STM32Cube FW_F1 V1.8.5 + + +Code Generation Settings : +STM32Cube MCU packages and embedded software packs : Copy only the necessary library files +Generate peripheral initialization as a pair of '.c/.h' files per peripheral : No +Backup previously generated files when re-generating : No +Delete previously generated files when not re-generated : Yes +Set all free pins as analog (to optimize the power consumption) : No + + +Toolchains Settings : +Compiler Optimizations : + + + + +