From 018f0d4b3385021852ad525e580c244ae1abe290 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Thu, 15 Aug 2024 16:50:06 +0300 Subject: [PATCH] start fixing of this shit --- F3:F303/Multistepper/adc.c | 20 ++--- F3:F303/Multistepper/adc.h | 6 +- F3:F303/Multistepper/commonproto.c | 74 +++++++++++------ F3:F303/Multistepper/commonproto.h | 1 + F3:F303/Multistepper/hashgen/hashgen.c | 4 +- F3:F303/Multistepper/hashgen/hdr.c | 13 ++- F3:F303/Multistepper/hashgen/hdr.h | 2 + F3:F303/Multistepper/main.c | 4 +- F3:F303/Multistepper/multistepper.bin | Bin 30580 -> 30072 bytes .../Multistepper/multistepper.creator.user | 58 ++++++++------ F3:F303/Multistepper/pdnuart.c | 2 +- F3:F303/Multistepper/proto.c | 75 ++++++------------ F3:F303/Multistepper/steppers.c | 7 +- F3:F303/Multistepper/steppers.h | 2 +- F3:F303/Multistepper/version.inc | 2 +- 15 files changed, 140 insertions(+), 130 deletions(-) diff --git a/F3:F303/Multistepper/adc.c b/F3:F303/Multistepper/adc.c index 8817bc3..6cb5a9d 100644 --- a/F3:F303/Multistepper/adc.c +++ b/F3:F303/Multistepper/adc.c @@ -132,18 +132,18 @@ uint16_t getADCval(int nch){ return p[4]; } -// get voltage @input nch (V) -float getADCvoltage(int nch){ +// get voltage @input nch (V) *1000V +int32_t getADCvoltage(int nch){ float v = getADCval(nch) * 3.3; - v /= 4096.f; // 12bit ADC + v /= 4.096f; // 12bit ADC #ifdef EBUG DBG("v="); printf(v); newline(); #endif - return v; + return (uint32_t) v; } -// return MCU temperature (degrees of celsius) -float getMCUtemp(){ +// return MCU temperature (*1000 degrees of celsius) +int32_t getMCUtemp(){ // make correction on Vdd value int32_t ADval = getADCval(ADC_TS); float temperature = (float) *TEMP30_CAL_ADDR - ADval; @@ -153,15 +153,15 @@ float getMCUtemp(){ #ifdef EBUG DBG("t="); printf(temperature); newline(); #endif - return(temperature); + return (uint32_t) (temperature*1000.f); } -// return ADC Vref (V) -float getVdd(){ +// return ADC Vref (V) *1000V +int32_t getVdd(){ float vdd = ((float) *VREFINT_CAL_ADDR) * 3.3f; // 3.3V vdd /= getADCval(ADC_VREF); #ifdef EBUG DBG("vdd="); printf(vdd); newline(); #endif - return vdd; + return (uint32_t) (vdd * 1000.f); } diff --git a/F3:F303/Multistepper/adc.h b/F3:F303/Multistepper/adc.h index ded850a..68970f8 100644 --- a/F3:F303/Multistepper/adc.h +++ b/F3:F303/Multistepper/adc.h @@ -43,7 +43,7 @@ #define ADC2START (9*NUMBER_OF_ADC1_CHANNELS) void adc_setup(); -float getMCUtemp(); -float getVdd(); +int32_t getMCUtemp(); +int32_t getVdd(); uint16_t getADCval(int nch); -float getADCvoltage(int nch); +int32_t getADCvoltage(int nch); diff --git a/F3:F303/Multistepper/commonproto.c b/F3:F303/Multistepper/commonproto.c index 562dfae..872bf3d 100644 --- a/F3:F303/Multistepper/commonproto.c +++ b/F3:F303/Multistepper/commonproto.c @@ -53,22 +53,26 @@ errcodes cu_abspos(uint8_t _U_ par, int32_t _U_ *val){ errcodes cu_accel(uint8_t _U_ par, int32_t _U_ *val){ uint8_t n; CHECKN(n, par); + errcodes ret = ERR_OK; if(ISSETTER(par)){ if(*val/the_conf.microsteps[n] > ACCELMAXSTEPS || *val < 1) return ERR_BADVAL; + uint16_t acc = the_conf.accel[n]; the_conf.accel[n] = *val; - update_stepper(n); + if(!update_stepper(n)){ + the_conf.accel[n] = acc; + ret = ERR_CANTRUN; + } } *val = the_conf.accel[n]; - return ERR_OK; + return ret; } static const uint8_t extADCchnl[NUMBER_OF_EXT_ADC_CHANNELS] = {ADC_AIN0, ADC_AIN1, ADC_AIN2, ADC_AIN3}; -// V*100 +// V*1000 errcodes cu_adc(uint8_t par, int32_t *val){ uint8_t n = PARBASE(par); if(n > NUMBER_OF_EXT_ADC_CHANNELS - 1) return ERR_BADPAR; - float v = getADCvoltage(extADCchnl[n])*100.f; - *val = (int32_t)v; + *val = getADCvoltage(extADCchnl[n]); return ERR_OK; } @@ -121,13 +125,18 @@ errcodes cu_esw(uint8_t par, int32_t *val){ errcodes cu_eswreact(uint8_t _U_ par, int32_t _U_ *val){ uint8_t n; CHECKN(n, par); + errcodes ret = ERR_OK; if(ISSETTER(par)){ if(*val < 0 || *val > ESW_AMOUNT-1) return ERR_BADVAL; + uint8_t react = the_conf.ESW_reaction[n]; the_conf.ESW_reaction[n] = *val; - update_stepper(n); + if(!update_stepper(n)){ + the_conf.ESW_reaction[n] = react; + ret = ERR_CANTRUN; + } } *val = geteswreact(n); - return ERR_OK; + return ret; } errcodes cu_goto(uint8_t _U_ par, int32_t _U_ *val){ @@ -201,13 +210,18 @@ static uint16_t getSPD(uint8_t n, int32_t speed){ errcodes cu_maxspeed(uint8_t _U_ par, int32_t _U_ *val){ uint8_t n; CHECKN(n, par); + errcodes ret = ERR_OK; if(ISSETTER(par)){ if(*val <= the_conf.minspd[n]) return ERR_BADVAL; + uint16_t maxspd = the_conf.maxspd[n]; the_conf.maxspd[n] = getSPD(n, *val); - update_stepper(n); + if(!update_stepper(n)){ + the_conf.maxspd[n] = maxspd; + ret = ERR_CANTRUN; + } } *val = the_conf.maxspd[n]; - return ERR_OK; + return ret; } errcodes cu_maxsteps(uint8_t _U_ par, int32_t _U_ *val){ @@ -222,15 +236,14 @@ errcodes cu_maxsteps(uint8_t _U_ par, int32_t _U_ *val){ errcodes cu_mcut(uint8_t par, int32_t *val){ NOPARCHK(par); - float f = getMCUtemp(); - *val = (uint32_t)(f*10.f); + getMCUtemp(); + *val = getMCUtemp(); return ERR_OK; } errcodes cu_mcuvdd(uint8_t par, int32_t *val){ NOPARCHK(par); - float f = getVdd(); - *val = (uint32_t)(f*10.f); + *val = getVdd(); return ERR_OK; } @@ -241,7 +254,7 @@ errcodes cu_microsteps(uint8_t _U_ par, int32_t _U_ *val){ #if MICROSTEPSMAX > 512 #error "Change the code anywhere!" #endif - uint16_t m = (uint16_t)*val; + uint16_t m = (uint16_t)*val, old = the_conf.microsteps[n]; if(m < 1 || m > MICROSTEPSMAX) return ERR_BADVAL; // find most significant bit if(m != 1<drvtype == DRVTYPE_UART){ if(!pdnuart_microsteps(n, m)) return ERR_CANTRUN; } - update_stepper(n); + if(!update_stepper(n)){ + the_conf.microsteps[n] = old; + return ERR_CANTRUN; + } } *val = the_conf.microsteps[n]; return ERR_OK; @@ -259,13 +275,18 @@ errcodes cu_microsteps(uint8_t _U_ par, int32_t _U_ *val){ errcodes cu_minspeed(uint8_t _U_ par, int32_t _U_ *val){ uint8_t n; CHECKN(n, par); + errcodes ret = ERR_OK; if(ISSETTER(par)){ if(*val >= the_conf.maxspd[n] || *val < 0) return ERR_BADVAL; + uint16_t minspd = the_conf.minspd[n]; the_conf.minspd[n] = getSPD(n, *val); - update_stepper(n); + if(!update_stepper(n)){ + the_conf.minspd[n] = minspd; + ret = ERR_CANTRUN; + } } *val = the_conf.minspd[n]; - return ERR_OK; + return ret; } errcodes cu_motcurrent(uint8_t par, int32_t *val){ @@ -284,12 +305,17 @@ errcodes cu_motcurrent(uint8_t par, int32_t *val){ errcodes cu_motflags(uint8_t _U_ par, int32_t _U_ *val){ uint8_t n; CHECKN(n, par); + errcodes ret = ERR_OK; if(ISSETTER(par)){ + motflags_t flags = the_conf.motflags[n]; the_conf.motflags[n] = *((motflags_t*)val); - update_stepper(n); + if(!update_stepper(n)){ + the_conf.motflags[n] = flags; + ret = ERR_CANTRUN; + } } *(motflags_t*)val = the_conf.motflags[n]; - return ERR_OK; + return ret; } errcodes cu_motno(uint8_t _U_ par, int32_t _U_ *val){ @@ -370,7 +396,7 @@ errcodes cu_stop(uint8_t _U_ par, int32_t _U_ *val){ return ERR_OK; } -static errcodes cu_time(uint8_t par, int32_t *val){ +errcodes cu_time(uint8_t par, int32_t *val){ NOPARCHK(par); *val = Tms; return ERR_OK; @@ -391,15 +417,13 @@ errcodes cu_usartstatus(uint8_t _U_ par, int32_t _U_ *val){ // V*10 errcodes cu_vdrive(uint8_t par, int32_t _U_ *val){ NOPARCHK(par); - float v = getADCvoltage(ADC_VDRIVE)*1000.f; - *val = (int32_t)v; + *val = getADCvoltage(ADC_VDRIVE); return ERR_OK; } errcodes cu_vfive(uint8_t par, int32_t *val){ NOPARCHK(par); - float v = getADCvoltage(ADC_VFIVE)*200.f; - *val = (int32_t)v; + *val = getADCvoltage(ADC_VFIVE) * 2; return ERR_OK; } @@ -475,7 +499,7 @@ const char* cancmds[CCMD_AMOUNT] = { [CCMD_RELPOS] = "relpos", [CCMD_RELSLOW] = "relslow", [CCMD_EMERGSTOP] = "emstop N", - [CCMD_EMERGSTOPALL] = "emstop", + [CCMD_EMERGSTOPALL] = "emstop all", [CCMD_STOP] = "stop", [CCMD_REINITMOTORS] = "motreinit", [CCMD_MOTORSTATE] = "state", diff --git a/F3:F303/Multistepper/commonproto.h b/F3:F303/Multistepper/commonproto.h index 0b369bb..40c6672 100644 --- a/F3:F303/Multistepper/commonproto.h +++ b/F3:F303/Multistepper/commonproto.h @@ -140,6 +140,7 @@ errcodes cu_screen(uint8_t par, int32_t *val); errcodes cu_speedlimit(uint8_t par, int32_t *val); errcodes cu_state(uint8_t par, int32_t *val); errcodes cu_stop(uint8_t par, int32_t *val); +errcodes cu_time(uint8_t par, int32_t *val); errcodes cu_tmcbus(uint8_t par, int32_t *val); errcodes cu_udata(uint8_t par, int32_t *val); errcodes cu_usartstatus(uint8_t par, int32_t *val); diff --git a/F3:F303/Multistepper/hashgen/hashgen.c b/F3:F303/Multistepper/hashgen/hashgen.c index d303007..a708d39 100644 --- a/F3:F303/Multistepper/hashgen/hashgen.c +++ b/F3:F303/Multistepper/hashgen/hashgen.c @@ -175,9 +175,7 @@ static const char *fhdr = int i = 0;\n\ while(*str > '@' && i < CMD_MAXLEN){ cmd[i++] = *str++; }\n\ cmd[i] = 0;\n\ - if(*str){\n\ - while(*str <= ' ') ++str;\n\ - }\n\ + while(*str && *str <= ' ') ++str;\n\ char *args = (char*) str;\n\ uint32_t h = hashf(cmd);\n\ switch(h){\n\n" diff --git a/F3:F303/Multistepper/hashgen/hdr.c b/F3:F303/Multistepper/hashgen/hdr.c index 0f6e5bf..2d59d0f 100644 --- a/F3:F303/Multistepper/hashgen/hdr.c +++ b/F3:F303/Multistepper/hashgen/hdr.c @@ -8,6 +8,8 @@ #define WAL __attribute__ ((weak, alias ("__f1"))) #endif +char lastcmd[CMD_MAXLEN + 1]; + static int __f1(uint32_t _U_ h, char _U_ *a){return 1;} int fn_abspos(uint32_t _U_ hash, char _U_ *args) WAL; // "abspos" (3056382221) @@ -137,16 +139,13 @@ static uint32_t hashf(const char *str){ } int parsecmd(const char *str){ - char cmd[CMD_MAXLEN + 1]; if(!str || !*str) return RET_CMDNOTFOUND; int i = 0; - while(*str > '@' && i < CMD_MAXLEN){ cmd[i++] = *str++; } - cmd[i] = 0; - if(*str){ - while(*str <= ' ') ++str; - } + while(*str > '@' && i < CMD_MAXLEN){ lastcmd[i++] = *str++; } + lastcmd[i] = 0; + while(*str && *str <= ' ') ++str; char *args = (char*) str; - uint32_t h = hashf(cmd); + uint32_t h = hashf(lastcmd); switch(h){ case CMD_ABSPOS: diff --git a/F3:F303/Multistepper/hashgen/hdr.h b/F3:F303/Multistepper/hashgen/hdr.h index 872029f..202d42f 100644 --- a/F3:F303/Multistepper/hashgen/hdr.h +++ b/F3:F303/Multistepper/hashgen/hdr.h @@ -13,6 +13,8 @@ enum{ int parsecmd(const char *cmdwargs); +extern char lastcmd[]; + #define CMD_ABSPOS (3056382221) #define CMD_ACCEL (1490521981) #define CMD_ADC (2963026093) diff --git a/F3:F303/Multistepper/main.c b/F3:F303/Multistepper/main.c index 6fa117f..e76ddcb 100644 --- a/F3:F303/Multistepper/main.c +++ b/F3:F303/Multistepper/main.c @@ -42,9 +42,9 @@ int main(void){ StartHSI(); SysTick_Config((uint32_t)48000); // 1ms } + hw_setup(); // GPIO, ADC, timers, watchdog etc. USBPU_OFF(); // make a reconnection flashstorage_init(); - hw_setup(); // GPIO, ADC, timers, watchdog etc. init_steppers(); USB_setup(); CAN_setup(the_conf.CANspeed); @@ -60,7 +60,7 @@ int main(void){ LED_blink(); } CAN_proc(); - USB_proc(); + USB_proc(); // TODO: remove deprecated trash code! process_steppers(); if(CAN_get_status() == CAN_FIFO_OVERRUN){ USB_sendstr("CAN bus fifo overrun occured!\n"); diff --git a/F3:F303/Multistepper/multistepper.bin b/F3:F303/Multistepper/multistepper.bin index 2830ca3dd7f4a7ce919cc2a885a636e72643767a..f06205dfee23369d1a07d797ce67e5295782be55 100755 GIT binary patch delta 11031 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 T2eDq^F6QUI!$I<*$7B8%?SF)> diff --git a/F3:F303/Multistepper/multistepper.creator.user b/F3:F303/Multistepper/multistepper.creator.user index aa79e75..c02f8ee 100644 --- a/F3:F303/Multistepper/multistepper.creator.user +++ b/F3:F303/Multistepper/multistepper.creator.user @@ -1,14 +1,14 @@ - + EnvironmentId - {7bd84e39-ca37-46d3-be9d-99ebea85bc0d} + {cf63021e-ef53-49b0-b03b-2f2570cdf3b6} ProjectExplorer.Project.ActiveTarget - 0 + 0 ProjectExplorer.Project.EditorSettings @@ -28,7 +28,7 @@ QmlJSGlobal - 2 + 2 KOI8-R false 4 @@ -37,10 +37,11 @@ true true 1 + 0 false - true + false false - 0 + 1 true true 0 @@ -49,11 +50,12 @@ false 1 true - false + true true *.md, *.MD, Makefile - false + true true + true @@ -74,7 +76,8 @@ true true Builtin.DefaultTidyAndClazy - 2 + 4 + true @@ -88,12 +91,12 @@ Desktop Desktop Desktop - {65a14f9e-e008-4c1b-89df-4eaa4774b6e3} - 0 - 0 - 0 + {91347f2c-5221-46a7-80b1-0a054ca02f79} + 0 + 0 + 0 - /Big/Data/00__Electronics/STM32/F303-nolib/blink + /home/eddy/Docs/SAO/ELECTRONICS/STM32/F3-srcs/Multistepper @@ -102,7 +105,7 @@ true GenericProjectManager.GenericMakeStep - 1 + 1 Сборка Сборка ProjectExplorer.BuildSteps.Build @@ -115,7 +118,7 @@ true GenericProjectManager.GenericMakeStep - 1 + 1 Очистка Очистка ProjectExplorer.BuildSteps.Clean @@ -125,13 +128,13 @@ false - Default + По умолчанию GenericProjectManager.GenericBuildConfiguration - 1 + 1 - 0 + 0 Развёртывание Развёртывание ProjectExplorer.BuildSteps.Deploy @@ -141,24 +144,31 @@ false ProjectExplorer.DefaultDeployConfiguration - 1 + 1 + true + true + 0 + true + 2 + false + -e cpu-cycles --call-graph dwarf,4096 -F 250 + ProjectExplorer.CustomExecutableRunConfiguration - false + false true - false true - 1 + 1 ProjectExplorer.Project.TargetCount - 1 + 1 ProjectExplorer.Project.Updater.FileVersion diff --git a/F3:F303/Multistepper/pdnuart.c b/F3:F303/Multistepper/pdnuart.c index c1e5686..9d33110 100644 --- a/F3:F303/Multistepper/pdnuart.c +++ b/F3:F303/Multistepper/pdnuart.c @@ -169,7 +169,7 @@ int pdnuart_microsteps(uint8_t no, uint32_t val){ return writeregister(no, TMC2209Reg_CHOPCONF, regval.value); } -// init driver number `no` +// init driver number `no`, return FALSE if failed int pdnuart_init(uint8_t no){ TMC2209_gconf_reg_t gconf; if(!readregister(no, TMC2209Reg_GCONF, &gconf.value)) return FALSE; diff --git a/F3:F303/Multistepper/proto.c b/F3:F303/Multistepper/proto.c index d79191b..34b9317 100644 --- a/F3:F303/Multistepper/proto.c +++ b/F3:F303/Multistepper/proto.c @@ -309,11 +309,8 @@ int fn_cansend(uint32_t _U_ hash, char *args){ int fn_canfloodt(uint32_t _U_ hash, char *args){ uint32_t N; const char *n = getnum(args, &N); - if(args == n){ - USB_sendstr("floodT="); printu(floodT); USB_putbyte('\n'); - return RET_GOOD; - } - floodT = N; + if(args != n) floodT = N; + USB_sendstr("canfloodT="); printu(floodT); USB_putbyte('\n'); return RET_GOOD; } @@ -396,14 +393,6 @@ int fn_reset(uint32_t _U_ hash, char _U_ *args){ // "reset" (1907803304) return RET_GOOD; } -int fn_time(uint32_t _U_ hash, char _U_ *args){ // "time" (19148340) - USB_sendstr("Time (ms): "); - printu(Tms); - USB_putbyte('\n'); - return RET_GOOD; -} - - static const char* motfl[MOTFLAGS_AMOUNT] = { "0: reverse - invert motor's rotation", "1: [reserved]", @@ -433,12 +422,12 @@ int fn_dumpmotflags(uint32_t _U_ hash, char _U_ *args){ // "dumpmotflags" (3615 } static const char* errtxt[ERR_AMOUNT] = { - [ERR_OK] = "all OK", - [ERR_BADPAR] = "wrong parameter's value", - [ERR_BADVAL] = "wrong setter of parameter", - [ERR_WRONGLEN] = "bad message length", - [ERR_BADCMD] = "unknown command", - [ERR_CANTRUN] = "temporary can't run given command", + [ERR_OK] = "OK", + [ERR_BADPAR] = "BADPAR", + [ERR_BADVAL] = "BADVAL", + [ERR_WRONGLEN] = "WRONGLEN", + [ERR_BADCMD] = "BADCMD", + [ERR_CANTRUN] = "CANTRUN", }; int fn_dumperr(uint32_t _U_ hash, char _U_ *args){ // "dumperr" (1223989764) USND("Error codes:"); @@ -490,9 +479,11 @@ static int canusb_function(uint32_t hash, char *args){ uint32_t N; int32_t val = 0; uint8_t par = CANMESG_NOPAR; - float f; - USB_sendstr("CMD: hash="); printu(hash); USB_sendstr(", args="); + DBG("CMD: hash="); +#ifdef EBUG + printu(hash); USB_sendstr(", args="); USND(args); +#endif if(*args){ const char *n = getnum(args, &N); if(n != args){ // get parameter @@ -511,29 +502,17 @@ static int canusb_function(uint32_t hash, char *args){ } } } +#ifdef EBUG USB_sendstr("par="); printuhex(par); USB_sendstr(", val="); printi(val); newline(); +#endif switch(hash){ case CMD_ADC: - par = PARBASE(par); - if(par >= NUMBER_OF_ADC_CHANNELS){ - USB_sendstr("Wrong channel number\n"); - return RET_BAD; - } - USB_sendstr("ADC"); USB_putbyte('0'+par); - USB_putbyte('='); USB_sendstr(u2str(getADCval(par))); - f = getADCvoltage(par); - USB_sendstr("\nADCv");USB_putbyte('0'+par); - USB_putbyte('='); USB_sendstr(float2str(f, 2)); - newline(); - return RET_GOOD; + e = cu_adc(par, &val); break; case CMD_BUTTON: e = cu_button(par, &val); - if(val == CANMESG_NOPAR){ - USB_sendstr("Wrong button number\n"); - return RET_BAD; - } + if(val == CANMESG_NOPAR) break; // no button number const char *kstate = "none"; switch(e){ case EVT_PRESS: @@ -548,9 +527,9 @@ static int canusb_function(uint32_t hash, char *args){ default: break; } - USB_sendstr("KEY"); USB_putbyte('0'+PARBASE(par)); + USB_sendstr("button"); USB_putbyte('0'+PARBASE(par)); USB_putbyte('='); USB_sendstr(kstate); - USB_sendstr("\nKEYTIME="); USB_sendstr(u2str(val)); + USB_sendstr("\nbuttontm="); USB_sendstr(u2str(val)); newline(); return RET_GOOD; break; @@ -597,18 +576,10 @@ static int canusb_function(uint32_t hash, char *args){ e = cu_maxsteps(par, &val); break; case CMD_MCUT: - f = getMCUtemp(); - USB_sendstr("T="); - USB_sendstr(float2str(f, 1)); - newline(); - return RET_GOOD; + e = cu_mcut(par, &val); break; case CMD_MCUVDD: - f = getVdd(); - USB_sendstr("VDD="); - USB_sendstr(float2str(f, 1)); - newline(); - return RET_GOOD; + e = cu_mcuvdd(par, &val); break; case CMD_MICROSTEPS: e = cu_microsteps(par, &val); @@ -658,6 +629,9 @@ static int canusb_function(uint32_t hash, char *args){ case CMD_STOP: e = cu_stop(par, &val); break; + case CMD_TIME: + e = cu_time(par, &val); + break; case CMD_TMCBUS: e = cu_tmcbus(par, &val); break; @@ -683,7 +657,7 @@ static int canusb_function(uint32_t hash, char *args){ if(ERR_OK != e){ USB_sendstr(errtxt[e]); newline(); }else{ - USB_sendstr("OK par"); + USB_sendstr(lastcmd); if(PARBASE(par) != CANMESG_NOPAR) printu(PARBASE(par)); USB_putbyte('='); printi(val); newline(); @@ -728,6 +702,7 @@ int fn_screen(uint32_t _U_ hash, char _U_ *args) AL; //* "screen" (2100809349) int fn_speedlimit(uint32_t _U_ hash, char _U_ *args) AL; //* "speedlimit" (1654184245) int fn_state(uint32_t _U_ hash, char _U_ *args) AL; //* "state" (2216628902) int fn_stop(uint32_t _U_ hash, char _U_ *args) AL; //* "stop" (17184971) +int fn_time(uint32_t _U_ hash, char _U_ *args) AL; // "time" (19148340) int fn_tmcbus(uint32_t _U_ hash, char _U_ *args) AL; //* "tmcbus" (1906135955) int fn_udata(uint32_t _U_ hash, char _U_ *args) AL; //* "udata" (2736127636) int fn_usartstatus(uint32_t _U_ hash, char _U_ *args) AL; //* "usartstatus" (4007098968) diff --git a/F3:F303/Multistepper/steppers.c b/F3:F303/Multistepper/steppers.c index da82221..9ae0aca 100644 --- a/F3:F303/Multistepper/steppers.c +++ b/F3:F303/Multistepper/steppers.c @@ -78,18 +78,19 @@ TRUE_INLINE void recalcARR(int i){ } // update stepper's settings -void update_stepper(uint8_t i){ - if(i >= MOTORSNO) return; +int update_stepper(uint8_t i){ + if(i >= MOTORSNO) return FALSE; accdecsteps[i] = (the_conf.maxspd[i] * the_conf.maxspd[i]) / the_conf.accel[i] / 2; ustepsshift[i] = MSB(the_conf.microsteps[i]); ESW_reaction[i] = the_conf.ESW_reaction[i]; switch(the_conf.motflags[i].drvtype){ case DRVTYPE_UART: - pdnuart_init(i); + return pdnuart_init(i); break; default: break; } + return TRUE; } // run this function after each steppers parameters changing diff --git a/F3:F303/Multistepper/steppers.h b/F3:F303/Multistepper/steppers.h index 0ae3e81..0c44f76 100644 --- a/F3:F303/Multistepper/steppers.h +++ b/F3:F303/Multistepper/steppers.h @@ -53,7 +53,7 @@ enum{ void addmicrostep(uint8_t i); void init_steppers(); -void update_stepper(uint8_t i); +int update_stepper(uint8_t i); errcodes setmotpos(uint8_t i, int32_t position); errcodes getpos(uint8_t i, int32_t *position); diff --git a/F3:F303/Multistepper/version.inc b/F3:F303/Multistepper/version.inc index 84585f2..a6f8163 100644 --- a/F3:F303/Multistepper/version.inc +++ b/F3:F303/Multistepper/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "107" +#define BUILD_NUMBER "114" #define BUILD_DATE "2024-08-15"