From 25b2c54451ccea8e1614a30879dac475e8ebe5d4 Mon Sep 17 00:00:00 2001 From: Yury Vostrenkov Date: Sat, 7 Mar 2020 19:32:08 +0300 Subject: [PATCH] Fixed USB crash if no analog pin defined --- Inc/common_defines.h | 2 +- Inc/main.h | 2 +- MDK-ARM/FreeJoy.bin | Bin 24400 -> 24432 bytes MDK-ARM/FreeJoy.uvoptx | 19 +------------------ Src/analog.c | 9 ++++++--- Src/periphery.c | 9 ++++----- Src/usb_endp.c | 1 - 7 files changed, 13 insertions(+), 29 deletions(-) diff --git a/Inc/common_defines.h b/Inc/common_defines.h index 1ae1d7e..e83242b 100644 --- a/Inc/common_defines.h +++ b/Inc/common_defines.h @@ -11,7 +11,7 @@ //#define DEBUG -#define FIRMWARE_VERSION 0x1412 // v1.4.1b2 +#define FIRMWARE_VERSION 0x1413 // v1.4.1b3 #define USED_PINS_NUM 30 // constant for BluePill and BlackPill boards #define MAX_AXIS_NUM 8 // max 8 #define MAX_BUTTONS_NUM 128 // power of 2, max 128 diff --git a/Inc/main.h b/Inc/main.h index ef3ec1a..2499307 100644 --- a/Inc/main.h +++ b/Inc/main.h @@ -18,7 +18,7 @@ static const dev_config_t init_config = { - .firmware_version = 0x1412, // do not change + .firmware_version = 0x1413, // do not change /* Name of device in devices dispatcher diff --git a/MDK-ARM/FreeJoy.bin b/MDK-ARM/FreeJoy.bin index c0e827c7c8005d9cdbecdafbe177b5f0cdd8889d..797400971c4fd0e7b827fddad384b8389217886b 100644 GIT binary patch delta 2415 zcmZ8j4Qx}_6~6cR+PRMH#rXlpFHZ981Y+l>aT0zSAjBr*#SY0rps=t(38kw7Q^1rV zr9~})6}1|oOLkiZrBwqZ12(ZHd&{P(3oEO-35Bdifoh0G1g45m+G0Ao=h%7i&UFAy zvvlwM&Uel|=e~2!eb3?ZIC37>4CEupi4ons4AB?7i0*>bl#b}T>kvi%_j})us6Bs{ zzquUIZM`*BhIw{GFWY;Ui@2hvy;mjuLlw=&aJB5>L;Z#~PcDm(+`mY3EQRI!NAmPZ7DddiYIf_S7 zQa_fE@tf_(5oR0Y;Ltkv@ToK8vGLOE@KHby+JU@br(kJ87u{Myg1tfBP^r zj8Ie=G}d4{cJ>TVSr=Ip!_JlmB&3T3V@Se<&CF!7?`vpA(vs|7MkPsKEQDz>37aO0 zyVf|0Ln#y6yM((3bolPibZZ>h&um6Oz!Ri2sh;etnU1tPXqQIsSPX}w%X&;_SIRy(@XIqi842|n^9+)> z+v)2!qHnVkrks60pLy0nOYdEGL-xwUxlIyeXidT%z-ODhsAo=~&%1xpFLZ-T((Xfs zo^CXHC&lm)%tpgDnOk3lyv~OCM&m(_&+xfw2J(BEqmxOwFezIHh9@JhA{59#63;Ip zh1j>6Rhti0>&;UUhojt0d4|J2T35*K!R8@cF+Sz3N;|)1)lrl`^&*@CEI1o(R1b% z)@v)l(`?vwx|7Q%1tdKM>m?Ys;DjWAI=Wv(ZXv7->LuFFy>UCP$3c>0IMxM75OsXi z6=E7|64Tp%ivw)XzMJq$F`t;N_(Y#Dhx;%?rXsMe z-iUmt9r;q(n-1lBT*Gt7wMeh5&pm*hoI@a&HNrKAoSp*tLJ(0s$lOCJo67qX-(nZ@ z`|%#OQ(B1qtY0d@CG4_Pgl%jJW*u`n?G{b_F7c$C=PEy@sS(!TtO;IDSnh8?X|6(G zMiSzgG*`i~E4R-$(p)9L{1vpVpe+XcXV{tM@&Ni1useZuAN$MgG}jqN5pd_&s8hjf z*?w0Eu3_g~McBix!aRp*E}O}isOC|RYARv*1vLx5m`QV4?%Q!8FgF0Fo-H_f<@Q+~ z6`0SG+H_nDI6PC$qXHUXy#<;00_!hW481g7up9q`wH9v1naW_{Qf%qShNOLsCJ2h@ zZz)sr-ov<$y;HQ;-baxH@0=m1Sm^mb8UmyP<)aQweMYHpGXXDBJ}IsxrnArybf`nt z)JB$8eg}`Rsq!j(k(GH%aF4RVyO^Z%GLYG_ytQCH#$I+|VGGRZi)!_KMkIOJxyois=ZD#e$>kPA{Wv?&aVd1^`xcbak+rV#R?HHb5 z^L#DfZ;$T~zQVA74DeNd3qGaHTfwmBc+}L0Wvd)l+Y@@Z;XjFxw9@OJR(}!o09TkG z!MJ*HW?DU|+^pM*;Xc&YZ?^p|(Gq#NH4bl=?1!75n~AGK?8EvI%ZkL#h#qlv{6G4(eZk;#NJX?qGV z2JH^5TV5HAsoS+WnA0>raL;Ofz{VtgTB`-DOX4=I2Cz1*m;EmIhQ!p>$pFn-1>kR| zdGLGF)$omtG{n>|+3_FjG8r|!T#>XT%+_`gA7byc*>E}=YOB-p%${djTR+^X_cmB` zxnIHG0{FWjfdc(H1<}xEM7dF)h>(MgZhYO1(=*%|c^PTNsXaJ1BTvkl?-4|UkU>O2 zz*#@EyWgVjpm4F99oV!a<%GxVA)W~Pc+&#h$)cM+-#4Cb&Z2vkkyQH~$NtP7p-RdS zPtr<{I6^CbFaCj68Z*Dk&Z6VC9D1LM|0bEEb93mhRU9N@D-r97*h~DCzRZ_&RT2^R x)5`hcX<8|Xf2WnAD17Yc7T;_#&V5@Pblmx-Ng#%-Qb9*ZsUd~Fi*w<@{tE<#Ol$xE delta 2454 zcmZ8jeNatLmR;kX}kwrI5Lj*hjW zPPevxEcDh6?$lPdWfyj5x569SI$dgA$E|M56i0VlM$x#_t+Fl}X00zIyu3X(X#d#E z+hhuoLu?Inf2J|5mot)%2pJ4GpZ4AeFQIT;tC1`S)76{a4Gkg`kp>Nwcn_L`oo}6* zFA`B3DT-ld!$U5lja0>ufb)aF>Kt?y-Rsccd;2s#N9MM-wqD&zJl|bM!c$pqMg>7v zpcy6w+F?Vu-7!9(59{y!GHLq@hiTiR0iPqs^Y81k`j-T_h$Y@@M{{pQuXZ#(S@dzJZAr^#E%@L=)rX~uXxx|CqV8R)vSP_udal2S_3Ca z_TKetI$)QyRv((#*@5bZ#?tklqoJ`3J?UfSS0LrnTgMc(@yP_6%M+0L%MA4<<$|Pa zIW>4U@)|-uGZIif_SMnmw1Z_uQ)$Ok`E=}dFs<{zGun}GP?cL^y6~+aNTZ`5eGp6Q z91W&*t8xz@Rh}bd8e6m&(RPzf7q%dwo4#(Ehd0xYO`B%BqNs=rbF7->EC4>L37{RG zP-w7MT9lEiHS}g6!Gqx;X`SUDw(50A_*RRAha3dehvvg8YIF z5kHK27-zB&@c@T|+DOA0gqA+WLBJ)CaW&uoVA9V8LN#0v3x+nb4+)_fgo=P?KH2ld zVCSQUZL@WZ>7akK72+rzvHdQC$?s~A&(D>Ef<{Qtn(xEA?PEAr`S zzeAeIG%PVpJH<)cviD&p9iXYvNpO@%yAVTQ{)8Q-~zxm6Xh%pKqE=E7<;-|9DNQqa9`7Nc}t*yCi7mxJ866V z25gpw@++{hH46!8<0#CbnC_-zo%=q<-Smumm%W=H0bW6;A?KlOAL#>J8_Gp(iX4*a zJye4iO1BHDxYQnKRC2maROBDh!s0Rf1+|ux;R`faQiu;p+e?;kGgz6>blE;yI2U6N z9bMD_^Ss4Xx^4sOjjf9du}3<-Smt2wqZJjnRk~cUYq}j+Az6{1v;(0VmsRVhOHY5l zY_pLy0mG~*|tp5)n>Lm|Awibw3(KN zY7QLe;Ioo9GD>l6Uh;+@>aBgv$PRb^i5EIpTWnxV(l7n4HutfmeZ{V%<&%qm=*bmT zNlTVJM8{U_!Y@icuG3;{r7zUKigW0L`t61^2!y@;x~29XjBDKAPIBT>IR8HmmVF;Yub#O0Nf$dv-?Xf!UDNqd`Qth))dzesnlEHfUOJzWDFcZ3q)JMP*d&&SG5JsQ!7BHj!1r>s zq8I(52Q+UhPM9l{eWDY-EHU|r;)VHu(j=nrl5kA^MBzj(>`dAY0LGwwS?Lg$2V?RM zr5fgJ#Sh#z#Shq)#4jpUfHRW#CrTyYR7EHHU7`Sn>ysO-Q5FD3$<39ia`+HOYGQJf ze*E0lR2vvCNZOid+3HvAG+HW5$@AlufGV$3G6RbI##BZiF5Btl)zvzd>)%j&OAp+= zvn@t#_AvZ|fPW?eD9~?H5NX_i2s3(z2bPYlJ>s4)d(1iJ^nw{jaJD&zx6Jiwc)iBV z@fr=bJa6~>ns|bmORv!P);*Q7*E_?@dGFKkx`p^>)Vlu0%ja^_ETrXWZiaoxu{ZOO zrc5yN?~+n4{{<->;7^fKL*_`9g`Bg^CVwaVH7>J%)@*Xp#2@AOMI7(t`0bp()R(za zTPAS)Zc;jzf1i{J{CQH!^P2PC4t{5yVb(kRQODT*It{0{6lt^^SENrN@8RtK0mXoL A0RR91 diff --git a/MDK-ARM/FreeJoy.uvoptx b/MDK-ARM/FreeJoy.uvoptx index 2896770..57da301 100644 --- a/MDK-ARM/FreeJoy.uvoptx +++ b/MDK-ARM/FreeJoy.uvoptx @@ -148,24 +148,7 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)) - - - 0 - 0 - 90 - 1 -
134237344
- 0 - 0 - 0 - 0 - 0 - 1 - ..\Src\leds.c - - \\FreeJoy\../Src/leds.c\90 -
-
+ 0 diff --git a/Src/analog.c b/Src/analog.c index a469c85..037a230 100644 --- a/Src/analog.c +++ b/Src/analog.c @@ -48,6 +48,9 @@ analog_data_t deadband_buffer[MAX_AXIS_NUM][DEADBAND_BUF_SIZE]; buttons_state_t axes_buttons[MAX_AXIS_NUM][3]; +uint8_t adc_cnt = 0; +uint8_t sensors_cnt = 0; + adc_channel_config_t channel_config[MAX_AXIS_NUM] = { {ADC_Channel_0, 0}, {ADC_Channel_1, 1}, @@ -389,9 +392,6 @@ analog_data_t ShapeFunc (axis_config_t * p_axis_cfg, analog_data_t value, uint8 */ void AxesInit (dev_config_t * p_dev_config) { - uint8_t adc_cnt = 0; - uint8_t sensors_cnt = 0; - ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; @@ -506,6 +506,8 @@ void AxesInit (dev_config_t * p_dev_config) */ void ADC_Conversion (void) { + if (adc_cnt > 0) + { DMA_SetCurrDataCounter(DMA1_Channel1, MAX_AXIS_NUM); DMA_Cmd(DMA1_Channel1, ENABLE); ADC_Cmd(ADC1, ENABLE); @@ -517,6 +519,7 @@ void ADC_Conversion (void) ADC_Cmd(ADC1, DISABLE); DMA_Cmd(DMA1_Channel1, DISABLE); + } } /** diff --git a/Src/periphery.c b/Src/periphery.c index c6448e7..f641339 100644 --- a/Src/periphery.c +++ b/Src/periphery.c @@ -86,7 +86,7 @@ void Timers_Init(dev_config_t * p_dev_config) RCC_GetClocksFreq(&RCC_Clocks); - // Encoders and HID timer + // Encoders, Axes and HID timer RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure); @@ -100,12 +100,11 @@ void Timers_Init(dev_config_t * p_dev_config) TIM_Cmd(TIM1, ENABLE); - // Axes timer - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); - + // PWM timer + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseInitStructure); TIM_TimeBaseInitStructure.TIM_Prescaler = RCC_Clocks.PCLK1_Frequency/100000 - 1; - TIM_TimeBaseInitStructure.TIM_Period = 400 - 1; // 2ms + TIM_TimeBaseInitStructure.TIM_Period = 400 - 1; // 2ms, 500Hz TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure); diff --git a/Src/usb_endp.c b/Src/usb_endp.c index 9e5c4fe..b402b85 100644 --- a/Src/usb_endp.c +++ b/Src/usb_endp.c @@ -79,7 +79,6 @@ void EP1_OUT_Callback(void) // 2 second delay for joy report joy_millis = GetTick() + 2000; - //Timers_Pause(2000); /* Read received data (2 bytes) */ USB_SIL_Read(EP1_OUT, hid_buf);