From 0e7a574ebbf882d96bc74ea47d09bc9289764f5d Mon Sep 17 00:00:00 2001 From: Thomas Roell Date: Sun, 12 Aug 2018 07:17:11 -0600 Subject: [PATCH 1/5] Avoid glitches on repeated analogWrite() PWM --- cores/stm32l4/stm32l4_wiring_analog.c | 67 ++++++++++++++++----------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/cores/stm32l4/stm32l4_wiring_analog.c b/cores/stm32l4/stm32l4_wiring_analog.c index f7b3f635..d0b72de3 100644 --- a/cores/stm32l4/stm32l4_wiring_analog.c +++ b/cores/stm32l4/stm32l4_wiring_analog.c @@ -38,6 +38,7 @@ static stm32l4_dac_t stm32l4_dac; #endif /* defined(PIN_DAC0) || defined(PIN_DAC1) */ static stm32l4_timer_t stm32l4_pwm[PWM_INSTANCE_COUNT]; +static uint8_t _channels[PWM_INSTANCE_COUNT]; static int _readResolution = 10; static int _writeResolution = 8; @@ -48,6 +49,7 @@ static uint8_t _writeCalibrate = 3; void analogReference(eAnalogReference reference) { + (void)reference; } void analogReadResolution(int resolution) @@ -264,32 +266,6 @@ void analogWrite(uint32_t pin, uint32_t value) { instance = g_APinDescription[pin].pwm_instance; - if (stm32l4_pwm[instance].state == TIMER_STATE_NONE) - { - stm32l4_timer_create(&stm32l4_pwm[instance], g_PWMInstances[instance], STM32L4_PWM_IRQ_PRIORITY, 0); - - if (_writeFrequency[instance] && _writeRange[instance]) - { - carrier = _writeFrequency[instance] * _writeRange[instance]; - modulus = _writeRange[instance]; - } - else - { - carrier = 2000000; - modulus = 4095; - } - - divider = stm32l4_timer_clock(&stm32l4_pwm[instance]) / carrier; - - if (divider == 0) - { - divider = 1; - } - - stm32l4_timer_enable(&stm32l4_pwm[instance], divider -1, modulus -1, 0, NULL, NULL, 0); - stm32l4_timer_start(&stm32l4_pwm[instance], false); - } - if (_writeFrequency[instance] && _writeRange[instance]) { if (value > _writeRange[instance]) @@ -302,9 +278,44 @@ void analogWrite(uint32_t pin, uint32_t value) value = mapResolution(value, _writeResolution, 12); } - stm32l4_gpio_pin_configure(g_APinDescription[pin].pin, (GPIO_PUPD_NONE | GPIO_OSPEED_HIGH | GPIO_OTYPE_PUSHPULL | GPIO_MODE_ALTERNATE)); + if (_channels[instance] & (1u << g_APinDescription[pin].pwm_channel)) + { + stm32l4_timer_compare(&stm32l4_pwm[instance], g_APinDescription[pin].pwm_channel, value); + } + else + { + _channels[instance] |= (1u << g_APinDescription[pin].pwm_channel); - stm32l4_timer_channel(&stm32l4_pwm[instance], g_APinDescription[pin].pwm_channel, value, TIMER_CONTROL_PWM); + if (stm32l4_pwm[instance].state == TIMER_STATE_NONE) + { + stm32l4_timer_create(&stm32l4_pwm[instance], g_PWMInstances[instance], STM32L4_PWM_IRQ_PRIORITY, 0); + + if (_writeFrequency[instance] && _writeRange[instance]) + { + carrier = _writeFrequency[instance] * _writeRange[instance]; + modulus = _writeRange[instance]; + } + else + { + carrier = 2000000; + modulus = 4095; + } + + divider = stm32l4_timer_clock(&stm32l4_pwm[instance]) / carrier; + + if (divider == 0) + { + divider = 1; + } + + stm32l4_timer_enable(&stm32l4_pwm[instance], divider -1, modulus -1, 0, NULL, NULL, 0); + stm32l4_timer_start(&stm32l4_pwm[instance], false); + } + + stm32l4_gpio_pin_configure(g_APinDescription[pin].pin, (GPIO_PUPD_NONE | GPIO_OSPEED_HIGH | GPIO_OTYPE_PUSHPULL | GPIO_MODE_ALTERNATE)); + + stm32l4_timer_channel(&stm32l4_pwm[instance], g_APinDescription[pin].pwm_channel, value, TIMER_CONTROL_PWM); + } return; } From 34199589c08a0ff0437a7ed86d5c65055463d757 Mon Sep 17 00:00:00 2001 From: Thomas Roell Date: Sun, 16 Sep 2018 10:09:35 -0600 Subject: [PATCH 2/5] add analogReadPeriod() --- cores/stm32l4/STM32.cpp | 10 ++-- cores/stm32l4/stm32l4_wiring.h | 1 + cores/stm32l4/stm32l4_wiring_analog.c | 9 ++- system/STM32L4xx/Include/stm32l4_adc.h | 6 +- system/STM32L4xx/Lib/boot_stm32l432.o | Bin 19455 -> 19407 bytes system/STM32L4xx/Lib/boot_stm32l433.o | Bin 19491 -> 19443 bytes system/STM32L4xx/Lib/boot_stm32l476.o | Bin 19935 -> 19887 bytes system/STM32L4xx/Lib/boot_stm32l496.o | Bin 20115 -> 20067 bytes system/STM32L4xx/Lib/libstm32l432.a | Bin 1262610 -> 1263814 bytes system/STM32L4xx/Lib/libstm32l433.a | Bin 1328618 -> 1329826 bytes system/STM32L4xx/Lib/libstm32l476.a | Bin 1432038 -> 1433246 bytes system/STM32L4xx/Lib/libstm32l496.a | Bin 1440040 -> 1441248 bytes system/STM32L4xx/Source/stm32l4_adc.c | 77 +++++++++++++++---------- 13 files changed, 64 insertions(+), 39 deletions(-) diff --git a/cores/stm32l4/STM32.cpp b/cores/stm32l4/STM32.cpp index e943390b..27f914eb 100644 --- a/cores/stm32l4/STM32.cpp +++ b/cores/stm32l4/STM32.cpp @@ -67,8 +67,8 @@ float STM32Class::getVBAT() stm32l4_adc_enable(&stm32l4_adc, 0, NULL, NULL, 0); } - vref_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VREFINT); - vbat_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VBAT); + vref_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VREFINT, ADC_VREFINT_PERIOD); + vbat_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VBAT, ADC_VBAT_PERIOD); stm32l4_adc_disable(&stm32l4_adc); @@ -93,7 +93,7 @@ float STM32Class::getVREF() stm32l4_adc_enable(&stm32l4_adc, 0, NULL, NULL, 0); } - vref_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VREFINT); + vref_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VREFINT, ADC_VREFINT_PERIOD); stm32l4_adc_disable(&stm32l4_adc); @@ -118,8 +118,8 @@ float STM32Class::getTemperature() stm32l4_adc_enable(&stm32l4_adc, 0, NULL, NULL, 0); } - vref_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VREFINT); - ts_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_TS); + vref_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_VREFINT, ADC_VREFINT_PERIOD); + ts_data = stm32l4_adc_convert(&stm32l4_adc, ADC_CHANNEL_ADC1_TS, ADC_TSENSE_PERIOD); stm32l4_adc_disable(&stm32l4_adc); diff --git a/cores/stm32l4/stm32l4_wiring.h b/cores/stm32l4/stm32l4_wiring.h index a07761ed..5081c8fe 100644 --- a/cores/stm32l4/stm32l4_wiring.h +++ b/cores/stm32l4/stm32l4_wiring.h @@ -84,6 +84,7 @@ typedef enum _eAnalogReference { extern void analogReference(eAnalogReference reference); extern void analogReadResolution(int resolution); +extern void analogReadPeriod(int period); extern uint32_t analogRead(uint32_t pin); extern void analogWriteResolution(int resolution); extern void analogWriteFrequency(uint32_t pin, uint32_t frequency); diff --git a/cores/stm32l4/stm32l4_wiring_analog.c b/cores/stm32l4/stm32l4_wiring_analog.c index d0b72de3..351e60cd 100644 --- a/cores/stm32l4/stm32l4_wiring_analog.c +++ b/cores/stm32l4/stm32l4_wiring_analog.c @@ -39,7 +39,9 @@ static stm32l4_dac_t stm32l4_dac; static stm32l4_timer_t stm32l4_pwm[PWM_INSTANCE_COUNT]; static uint8_t _channels[PWM_INSTANCE_COUNT]; + static int _readResolution = 10; +static int _readPeriod = 2; static int _writeResolution = 8; static uint32_t _writeFrequency[PWM_INSTANCE_COUNT]; @@ -57,6 +59,11 @@ void analogReadResolution(int resolution) _readResolution = resolution; } +void analogReadPeriod(int period) +{ + _readPeriod = period; +} + static inline uint32_t mapResolution(uint32_t value, uint32_t from, uint32_t to) { if (from == to) @@ -115,7 +122,7 @@ uint32_t analogRead(uint32_t pin) stm32l4_gpio_pin_configure(g_APinDescription[pin].pin, (GPIO_PUPD_NONE | GPIO_MODE_ANALOG | GPIO_ANALOG_SWITCH)); - input = stm32l4_adc_convert(&stm32l4_adc, g_APinDescription[pin].adc_input); + input = stm32l4_adc_convert(&stm32l4_adc, g_APinDescription[pin].adc_input, _readPeriod); stm32l4_adc_disable(&stm32l4_adc); diff --git a/system/STM32L4xx/Include/stm32l4_adc.h b/system/STM32L4xx/Include/stm32l4_adc.h index d9d57f4e..744cdf2f 100644 --- a/system/STM32L4xx/Include/stm32l4_adc.h +++ b/system/STM32L4xx/Include/stm32l4_adc.h @@ -71,6 +71,10 @@ enum { typedef void (*stm32l4_adc_callback_t)(void *context, uint32_t events); +#define ADC_VREFINT_PERIOD 4 +#define ADC_VBAT_PERIOD 12 +#define ADC_TSENSE_PERIOD 5 + #define ADC_STATE_NONE 0 #define ADC_STATE_INIT 1 #define ADC_STATE_BUSY 2 @@ -93,7 +97,7 @@ extern bool stm32l4_adc_disable(stm32l4_adc_t *adc); extern bool stm32l4_adc_configure(stm32l4_adc_t *adc, uint32_t option); extern bool stm32l4_adc_calibrate(stm32l4_adc_t *adc); extern bool stm32l4_adc_notify(stm32l4_adc_t *adc, stm32l4_adc_callback_t callback, void *context, uint32_t events); -extern uint32_t stm32l4_adc_convert(stm32l4_adc_t *adc, unsigned int channel); +extern uint32_t stm32l4_adc_convert(stm32l4_adc_t *adc, unsigned int channel, unsigned int period); #ifdef __cplusplus } diff --git a/system/STM32L4xx/Lib/boot_stm32l432.o b/system/STM32L4xx/Lib/boot_stm32l432.o index 040478335d015c15c8d6af08026318ee93936436..ef7e5781c5a986da040b26a5fbc67f43675ff252 100644 GIT binary patch delta 2946 zcmai#e{fXQ702Iw``+Ho-Rx!wA<2?O1MDUXY)G2Tj|~P0kfBi{2_;n#+ero}0rRU6 zAmP_08Zr^+h+dt<3R2sl&?*+XbOc+3ravGATZj5{WLmY@3Dr@cg8{9z=X*lc|C*V+ zcR%NQzUQ2K_wCy+`o*97#qMlj9GTqdH1BcfJaoJ7r!I24p0K>wH_ET=dLE;B^rK`2)k3gjWcRfZyYKoI$Nc&-agItOu3wN`wT-s`T#==+42U} zw9hgGWik2fVTQ2$Bb0Lt5gD`+-AR7o{RrNu`2sZ$$R+xq>JD@5IUK5z&CusERLhNk z3Wi$Qtrxp<#d+Q7&Ne@=^;7Op)=7-G${eI(KFO6EIXO-4)Ni}}^IwGi0PESjMZ1ah zpu9*HyP1`+Y(rWLLqz%ktqcWnxh_eL#(Ac8c2>$O(ATqGB_9H8V5pW8FzrT$+Og3) z*i$EGKSZ^SE$mq#Kf{Duq3DrhUw8nA8Rx_{xf6+9oY*dB z($ipfv(h2UbhgJIegb+A>pk*3U_0x5avz|Vm0faJH+cNwJ-ykpDP=Z4lQ(RA+*=s`D+)Zv zu|`>m>_ZGqavJ(P&(J210)D~JE)(z^X6TTU;5ovuMUDb~$H z;}m}d&}&jAc`u^gG1dm;i~5O_oUn;Pzv0k9nFKh&@SI$YsxL7dmKXKkQ!2!xI_N9+ zz5>DRz+-30T;1aHi`R9ZFH(I6?Bg82PcjToKP8Fzlw#0X8DfujDFWX_;7$5sianjm zFjBri@OFF~@aOwEDTgU;jQhi5<8F`FyGZrZ(t;vQ_ZFRHMp{5gA z4>D{~3sLSNhAuS$U3=KnquxV>?X2{vrvSaI>{4&I^_&Tr@lnJc=7a&mU58P2m{aH* zoBR*@q@4CN{5W~asewHmPpaYh5bGIOo1S!)7e=Ncf2wa@d2zBC~a@1w!&;ucg}MU(jK(kQ(u#wLk< zZIZIDO)`ro@p#eYHmseVT1;CGtIN}Y`0TOnl~mK7!_5sZLJKG*k2V_{pBcVO}27SJKC4luE z(m&T(8IjO&XnRRAzDxgNPb)R?bFsasa0~tWC+Vh)EZ$NQ4uUi{}c_p&LqS#9@7;WTU9k(@JYZo9--~ zA&T|>(y8XPJbkt_N1W1EN^`{t?T_V(3Oz5DYhEkRYhpQKrhb${yY+Fpo=UtMyJh@; E0n(Woy8r+H delta 3036 zcmb`I{Zmxu702&$_uhThXIWSfk(G^ux(l1QvcRsqDD`~|HXFrAqfM+M1u7_Sg(ZM5 zthVSF>vT+>$w(5hnPgIFn^Y-nqmw30iJ3?wV1j4qD*Dq&7ghGTgHmbWdvR0eW3QlfQTj36W* z0E{!ZWV7y-(RGJV^HUB5q%EM z)DL-5>GnAWzq~?a>`{hX zc^2>vLqIMhzkQw|B%gpX#t@b_9K-vj`9$g&6pEU!P;eJMj+ zt^h1!sFHEL-kmQ7bdNjNbU5|1?qJRb7;&39LdCq2D>ra*rhGwPar;)h4}Aygxx7WY ziS>ZIMi#r7m5^MFv=)Z2yoR2w427~lm!w3KJX3<5tK>8~e7lqNO8G3Dk1@pMRqVHm zp=xUMZuV5m&!P0NvPpgk*vYV2{texBF>IA_z;5=`$vc>E4-|bp#T%-HE6Is%@?j+I z<-~+sje+*D(k<8PT#qlb6?z}*eR2S>pY?-sJKz8-hvmn*#^Vz&>s_9mX)Xv)bCzFz zVreTi7#hUx1~?X$hcUo$hC=DY=lnB3jCZyRk8pxonWYz=}vtnwK(|; z6nKea4KfYcFEcdB&j7z>Xp>`TdXga_d*M07&@Hb6h8T9s5qN&XuvfkX&oD!uoP*xK zWjH9Caf-hK=avRbOW~CI6*APFp56 z>wvc+^*RK%1CO00m+BU;PkgEmdc*M<7%JUycA8;$PEwLsK`92El_8F$1`xO(fy?y8 z6vuj$VWiEZVZ|DJ8}R4-B`K#UZloW1GJQ?5+eK;-T^@BCMmDDy#$PGNq`nk(SaxGe z!Z2O7Pg2ljc`1)xSNTL%BbC1Ux;jEd>2-CUZdN{$@|vieY055|)mo28X)hv{{Zp7z zsk-?<*%1!OILIZRM@36sAd7ANiX_^RTjp0 zm!Z&bSLp9d&rN31KCLP0k4GPJ20c=oaj zQ~pB_yVJh6mcG)SYHDELhbPtWSd?SW$J+F)rYY<&)|O#ipaZiP6jOf66SRwLJMs#= z4Yalku{1odA*Be9zuWUi#50TeDfe6kM6vdI+V%Jhe{u&6W-n|(wIogAwM(P){+ODi z>>HDme`AtGJc(xl*2P#mJq?(=0#=u25Z%8u)qOM7w3l#mBNd^Ql#+Iw7N%hpr5Ks? zBm6!!w?3pq@yv@PSRd*Btde;{R9%b;yaO{awix9n+u$%S-_sLW(`Wjrn>ZgNW7Y)H z#^A`hs&i(BgX7Q!NHVt2zc|)PO?+Hz02OA_zt7N3GjqISG{1Q6CuF5Rm;Wh!bmoBQ z&?3gFFr6A;MX;?X_Q}jzHZ;AEEf%L)S}${zDj#QEUvp zhy8xBpBhd=`~F=N-wj^E9w)QOS6~`pBkLTDx9}ng9>tuu3uw8O9-bT?`_BKy4xZJ* zcc8i$yUu@va%}pUF^r6ITKaq7T;29{6o=tIgTA{Cd>zH*kODpUajm=y8fkJrrGM z8s*xItu?*n`XRdImh0zZYsIGFiP%yh26a)%I&oF+E9ny5`WCI9(`!oSi+bHzI?oIi v=x0jv#7+ID(tPoW9;a)YPA|(hgGG8#S)SOUYs&J)8~Sm&-W(n(n?3!%>q|Ej diff --git a/system/STM32L4xx/Lib/boot_stm32l433.o b/system/STM32L4xx/Lib/boot_stm32l433.o index 2da51d7fa701c3159e0ca0a2657eb5600923c291..d47e2e5aa10a1ec540b6cb550f96fcf33acba506 100644 GIT binary patch delta 2990 zcmbW2e{fXQ702Iwd2jFLZg#VTkYvrK2G~s&*pM{4BpVD8LW+oyq$EYL)`khG(BVf0 zf(?RfB0m~PkkA_>P=d7%qYkAbT{@)L7EOzq@ypp6@y5-hKP_nO^bHF43JU0*A)#c9{1i>0dhX3My^GFooj{!!WD}T}*!+uEKf9 zq7T!4n?K~g>BCy1Q)M{tK@#h8$!J}mOVY&IFh5TjNi!B>S!nBT%RqJ)C0ZB707CK} zzmtuIj9U2;I^Pf#1PyWlx_v5&2wJ3HuXUcUjnVY>DfVZ{M$+xm41Vbayv~p- zZ%|G93`0OpA-{c=AtYacGQ<#;0W0xz@&w^|AKtsnBh=h4>-5{IJ;b%=acH(&2EC4< zT7C~u&rmDdb-OEH4C&`xx#lHXpKt}Uk72~M<^UD*O0K+)lhb9VcBS|#k3x^Lp37Ub z+gK0CVY1lmtb}AU(jI3BOCMkZLy>IM-${wYd8Q6_R>=>cZ()75+yL0hP%Xz`+D?Yr zk{%plV!|Czbe7v2>cwGdPHdK)NbKRn z7CD)22YV+gt+Gtlx_zOY(0f_mD2D*MS?`cf0rs%cB~R!bZl8EZA8&hpD~ zwvKv&p>7O!h+|>-G6wh=Ly>ggdrmM!rB}Cms{I#H;3$V`Wd>$?k)dARu=RVM;`pCX z;3bYNmQ~1pnPI7%fIb5Z&GIndHw-N@0ncw4T4fGA#~IeiYk*f6+T=laUS-%QlhOM% zh7P$5r#J}Eds1^e!>D(XwO)BtA5YB-nJ9FIL(j=%z*&Z$$R(&c#PEU~)}y@@Vu!Bx zmV3@XC{My|XUTlM&+8NCb-y=UJqPy6q;tuJ;oe0_qLNY!Ix9o$^(;W(E(EUAFH`K@ zq6{PTKM3B9Ujts=-;weH#f?$NbsRk&mUL^sVY6NF4Bipg`~WtRL(SI4^_67BT~8^5zBrA=1)-X zo>(`BWR!ZDPPr8oEqR$Nwsn9c2R#a>lh?XHms^jz1LRC9SxBn2pSmT@ScT>7I+9ir ztw#IlB0&*b%?DJ7U!zX)%z1`2L;RW6PSpURQk)}5QNPlCX}5`d-Jdo#`&~@-8fRI` zMKf80w=B=-kJAF*3SpE}9LgFgf11IsI-tDHkgL3Ko?!^6S%9+)A@wE>V~8QFA{gTh zh9bii(5px1#)na-)x?~Zx&m0k;8e#j+oKFA>I9Uv3|{pa>Z~)dopkjtIzsC)R527I5PV&tql*i)tcj?!CLnXTFYTN$dA1AFK+oP%uVwbmgKB}&&7MW77$fXpWw8?Y27bV>R1IK5nxR>(ho^@G1)vec?3 z5?N0&tW&d4ZWlwF8iTIAY}%;aL51C{bf_N!_OQ~W-g4=O#$?5>A=bwUy@snEqwF)s z(N8wzZ}d$$>s!+ja+Nm!fi44T3YV{IAMQ`FclD5m_BpVBU}?7}1P z*3#N8!qRYWL&{fi`@7s15Kk}WyWD*h5W(8(-ma4~{P7MN%$~9w)gGovymo1Xo)sgL z#J)61*_S4n%9FS~=yC_v4tFi4Er-?VZbf|BNcSqLY2V4s4G%&yDJ69uElk4_DMq?s zPscxpH9(1C&wdiDS9O0z$@tSWm>3inDL)-!i$T7#b2!Y)emyF4bY>ZK6DNXX%-o6~&m6`25O!JE$b&{1{PXA;2NM@h- zrv66O*!VRRxr%%-Kgec=hw1Scy1q&1e-^u76!!)D zvEOT(s39KH{yCqcSP;B|eO%8X-(=GW8yWAycw;xOiLxz!7Moa%fIA=9~5yfHnpGM!co4<(S^g_RtX%J7-h{#ILdNH{};b?FyR0I delta 3039 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 delta 2982 zcmbW2e{fXQ702Iwc`tV%H@h1WlHKG*lOe2|ur!MaNfc1fh@k|tiY?H>Oj4j`+XP|~ z$tp-v%FyV<40_X!EkDPWQKpU-qtg+U)?Yw?@Ixa%6a;~EuyzF0B!oci`JQ#eznhud zy`S?v-*e8rdHeG6261|WSf3-d?#O*T(OhrqlZkFsxEqOlK}u;d;-a z57YjFKV%Z6S?hG642>H~VEyNalq4EPLO})0Z&G5yj9P4`>eX_5mZm)Gf_MiJxf1X> zgG+ALyJS(-2V}6m1hh=6Gr5qT7yhsAV)YFUSFS4EhhS+?j6uA>X@p%d6~zfZ0p-TsD)IdU9efFVa3 zfI)^lSxtU>h#@F@shfR;AtXzYHp~!~ZMt_~;@>Bh%p7$B-lI z^j781dK}5U916(*;2=X-uF!p|DB6a~AMzOGayI;ZtXIfWNdAbSQU;NBlp!LY1RP_} zgYpi*aaQKbdjTgH7RsAY;A4hr*`*tj1Hmo0s82c6AU7lVG?!_XPoVV~R$`RAE7>1> z0s1-C*UEmtdDh$ID}a7hI^=l$ZSwEj5rl?VcVwaNatDI{M*k5Gh2&mzzQz!ilkms8 z&QL6WrO&!6%>he?Jw7p4&+-(t_9J<80`9(6&O_xShB{e-nu?)8x-oMyL$llokDDPT z!|-?*R!IvUFGHJ@@T4%Tm5Tvm7~18-)Xh!>=n+r0`wP@dXYE<}whnj$!BME1$)Ojd z1IS`{QLaD>hv9GX4&CgXE}qq|d8fJy&|w`5mRzI1_4-9v`%^-57Qx<;Fm|+IBwr@C zxQp5wbT5Y3=>8=F_abnC9xt(RA7yzKP$@AB&ntesJ4v}raU*}I(UMbWMBDl+Ns06>>qN4;WTNoTj}?y#e8V(MOfN9ECc)&N6}dJ4`# zhCKByV2B~8^3eGTLr8T3h8e=~nXZcS)Vf%`NcUikuu`rL;<~N@ZZ;~^G?cr}Ql+|x zyZtXi#7KTx-;$Qo+J;HqHREUK1iZ)KQj=kQpFydIpzLPws&Y)ShapWx(QhwmD8B0bCN42gwZn4&N~;l6ui~0|IWMHLQ2QW5IDTh`*i@`+)IQ8gneqUR zFicg~Q0@bU>G7NSkUiyU9Y*M5r9wG?j~FUd4f-54TXFD+dLML*O%JNy1CDdve6<;H zf?=V00F!>qP^}I@`Gh@7)E10zl9gJu8pEAps8cCO`;?(UodBF>PqTW1=9z7sVJW6| zW4g~6R;g~3JIm0fYS8r@o7Spnfb*=ht3j0OXQe|mX-|4)>k;(6U^da$+&!17B-;7U z(|f?Po%VJC9&W=Er5t+#_NM0*YHNqEw+w3vU?ToKy06o-;UJxp5?Y*1s-e zGwc(0QjSgk%?xAAA8DI?Ot)r^4chRp{MQW)HyNBs(Zq5&L}A%Oj{NlQH#1{N-O+$$ z78TYmuU}f&OlwV3;f%&5k3^R(FRZO;T+&k0xU}%0#z*QK9$j9yq#^p)V>N|M&GkjM z*6FH1W_Nw?YC`wM&?WJISLparSE8uZxs$6zgMOISHvKlO>vc*=mDt-|Q*x&;eN*&v zrT2-5zFgWODs;3Axv!T^5Jz->**Nj29(CI-;-7jFtqb)6S|j>5w07z3wD#&Fv~JbI Mv>xuxy}dK_e=TQ7hX4Qo diff --git a/system/STM32L4xx/Lib/boot_stm32l496.o b/system/STM32L4xx/Lib/boot_stm32l496.o index aabbe79de48fda5b8693d8174764852ec49cdae8..d86df5549c250a6f8697c61a70c15e25e8512ecc 100644 GIT binary patch delta 3010 zcmai$e^6A{702Iw``+F~?*2f2E$l;Ag=N82wt%>-D4-0Y#lQ$gZLOnGJJJGLCDBYw zU@{tQwN`UYCNhw*No|wZB()6n4`VWR+8QRtq$$wOP$speV|APsqm3HVPS5wyiTSTP zvv2R`e9!lsb1!e-qWi^_K5-;$-Y!2q^If;u>(V#ekvT8ghG7c#gkc!ge7cxU3$DWB zg<#s{{2{+VAJ&Mjma$ni7VEDel5iV_tGEGXo7h#m70ZMAuq+6Tx@h@#@oPlnVZb#8 zkG!ET$+D&p3jBjZ`Emgjwf@NvmEBa;nqY{@PvN}D5SMoVpE8uoKMR6e3<-H$H+#yW z*(h^YL`=hImgDGrPt*`>kb_V@7jc3v`M5si8C`db2Cx$*1`Nt~NVh8)9N7*?GKA$a zzygMRxs&{M6+=`8pe$sF$sWKWhPWKk<0%o}4%&ykm_v>7gMqXu#lp87O-Ic$)YOr0 z>Sd|d&6$>-r>2XgdX@T6bLhHkmLG?-bnPX^k=j4Ika6~MREa`>5>Q0I>O3s`Me(U=0tBo zFJgVKoQq<`tRIl~q0DCGkSx@WFGnoW6~6tx;}EJj%aKp%_k0om4H%bjC?->_XZ=CZ zu50c>LU zx%@4vZD#m|tkI_eHDXNP2vkL5sC5;EyEM#-inU!kzevfDbl4AW!pkQDS-XH)SEarY2eXK36npE|V=OnVP~ zSRY{>X{S=ADKn|5^#vmHpF+g4Ct%)1)y=Obj&Mj0f;@5p6)o9C7TY>SlAE4q@1x{4 z_2u)b0CQDrB-N@U$yK`(%Ub=XsrA0Upjn$3pop!m>sWfQ=r%&_Vwgfo6`*y8_?RG& z+T7G=Se*G|Ei!Y~OA1=V$wu4Hgjh$gg> z3}JN?&IJtl>H?sOA*#Lw&q9Wnx&T~~RNmw!B!yfO-;jybKwt1O0pq zLA4PcKZB!|!V_Q!D?aQr7fv=`9fD^nlx`!cZsC~HIWMMKQ9FYnK6z%DY${hNsGY@1 zLZt(;8LE^42r|@6o=gsV>eQ1MA(xc~l@16oG^$?oaa`Tlc(cOIZsoD5Rb2v1(o(98fMs_Jb)SO*{oj1j%Kp5RXvS)W-+v@X$T6w-sS& zw>pRE3K{mOGbk5j=uszNDq_=K^%$U-l>@2-Fq@S_>N_Y9W93Ndl9rW*HHYDtI*7En z3@@l@C|$zPXL!3uFl*d}Up(JxlH7LDd3sFvU#GQQ{5GAA;qRavdp6dl|5fT@$FQ~x zs}wK?zYD$!+Gfx$$)u-<|M&EKu;W-7{xDL$hVNLae>3ISrTpdce;@0zVd`Q8{DCRj zn;qKV(46+XizxR#-O>Sj{!x_UQ4(JnrSdDIBzYA7aab2%?e?F?=vAgINAQk z`argmeGHN6IH^`KC5qmYWU?Cc+3boHk5CmcBi-NI&M&$QXmT{QgqVF0>Ib6CQrKiz5=d}J&Fch0hhb&H9 zqssL1IE6621neZvdksBa28z{rSM+GGU!2!nIWxL{fV_X9mU!6V!VFK-W7*-k8BY@C zZrZWwf2re8KSaaN_S1EOFs}roGm6y?Z}SeenNBxG-p^=i!6?=`&tR0h&ysJMX~c}I z4jAwC6Fc{Cpr7Nn;0dyYcuV&mY)RMTKGQl5dwiI3Z2CPljHv^(%o~HV{`!L`4k}L~ z`h_p}nc0lC9f1wv=?yb>q&GjXO3!+Sa*kPD|^G zveHId_Y`oEcXVxNhDWJ#}EyroCxHHqKof{G?{IH@12c*y)Dsef1T zkZ=Yv=T{5*cVkteN&G~gOzaXDbzWtYdAnYBRu+qQ_3_GC6gpQ~DC+dz==!GiCJW8s gWx666F|U^D^~s0`>wU>Wk*{B;YwN&B^6m8h0w3@a-T(jq delta 3058 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 JlI_QK{{_>3RdN6T delta 4793 zcmc&%3s6+o89w*ky}Qe~3*6mRc9Dm`@=%@&LBLnQKrr%L5PV1R5g!4>L2WcXHdc)! z!*n#ZJx(+VWzyI*G2-in_z1DaR$H|)=@>-~qH)qR#YdZjrdIm@yLT7YiJ2Om>CXJ; z`~L6$&wn2G?A^1+Hx<9uP`q)F&Yqb%EX|(Q8u^CCx!OVK!ym%96}$$oDY*M zO)4Tk%6_w(NcY>RokTjd(}~SvF~ib#h++LUUwiu#Vn922=Kk%=oj((t{G1BaHVZ|qc7+R0m$gamH*C|_yqJgzp=R|?$0 zHRpPzl(9mv^5<@DrNLWyv*Un8slLIr&G2Tq%IB8yGe`So{jQN;U!qEBcE!=jUmW9g z8MqduFif~K)T=45ki=D9*PXKBm|#rxYOdjb`?authOgwT)cmK;Bc(!Ckn;M+nmz4a z35!{knwQ1hPkJ?1+K7+E??Qd0@^0}+tgm!4HlSHxXAD}KS9ed(=&!Ae^J=b&>(aIL zAzsOyHqfEvQu?*sak5p(aB7zfQ+F|KL+d^*m<~*@wC?j;v`p^=%N>3aXNETZq*yM0<4-=(pUE}iXd z&Mzry_Afsa|MoObqJ;1G+kQ#2X0CPl;UhNZ5L*j-cN|R;ueKSJ2C>h^(bNF0i$wGu z&dTpSOvu0WEUJKx=4x0~0ksY|Ariv#qCtzG`#>N>{55MVpozApG$3*MWe^dk=?D?x z3kcAUpo1{xd88)RSwKtu7ei39?-(csX#&eEq&BXYO)aD;6%!#>bEpj>i4sA67_;n> zi2MlhbcrJW5P6mqh`b&7D4JJJG#??&k!GTN6wBmE)$DR1wQx(>H-&WMXeUNao`A?A zX%0@~kJ#fSX{!eKpOCMU7NC9#d4seN`Dx^h(kpCX5w-bm#u6P^e5dpV+g?O7(~42* zM2SeQC0s$d}~B&>G|( zsO>MuLD2wt1hj#22;|6eGPFh+x)PII2$^Pi07M7KO~41rd!Y@Ibr%3E^50o`37x@> zVS7qwk$Dvi#O1_5$C22Z=lFxnSW1()<1D+Bj<6Q#38{usR<2Am_Vx8GCBYStSHm`y z(otLxJ6%c#a~oJsDGka0737BGLDWU?G`@?<5+Lsbu`~cV2P6!}gnB|=UNi~b4&p5k zt(=2{zNW3L)Irk&aHqL$+-a_Sz&WR}rxrqY)fF z*KwdkX!`wm;9EvP02k2>JC2LU$&Dr!+!9>GH!jh^>-Eb>a0iG*Y#9n5R&YqCmB1i=4vpGjAwmQXoUc!SW2EakX28m_5dvG`D6=9 z*cmEwO4~Hr&e@~GY@um_Uj*SbTnaWxsdj{--1P`)F8*Y;5RfdqkSrJ?Sle`(PMe$s z!c~$S$#bmEDg`P2GiazrvCpQB9IMxuLs|D6dR{sD96iag!Hak^+kKuI*y-b(ff-(r z46J<~ZQ^>^*{OOnYac?BSZTe;R%Yk!fq_Pxxht zY;_Iz4TK{b*dM%CO#~av@S{f_X2N3cy+jPUv%$qBKH=Xqags=sXhX!D!7yKTwnc06i-?0?Bv?)?yLE*Q z=BwhBCl}EYf$t&8&lb}R-h>B_CKKX7Od;enQSL6K86vlfty-zII8VU0iw^-EaR4D# zRs2>(3BDjajAua%f?rP6AEjckinS^>sMw<7E*0BU{8Yu;Zd7b5=>j463jR{S=%1_j zm5Mjnn@$?%90)7KaIlIIDn_fApkj)O87huY5#MaszgR^)0O(Ir5#My^SF5;K#TVSD ztXM<0a=sU=VQcBr!#$D$7qj&l9uKcu7A5*0v}b{@WPeu5FY}dtzDv4b^GeO{87xX; zhjjfdUuoluhK@jA>7`cm+AhJO|;%F;Le zpIzhCT(?%Z;T{uwqzxVM0ZK=F;B=jjtdyh$PWjq1hVovVJluPWRc=g^ThDpYGhF{n zl=gIE)k+`DqGY!kCpUPsOr>eKscWv+bzhlxG?~htxlarHtEn=xUvsTxZG?GTfLC*^ L<;!IA#o+$}b2}mc diff --git a/system/STM32L4xx/Lib/libstm32l433.a b/system/STM32L4xx/Lib/libstm32l433.a index 9a3eb630dd61388aec1fa9463adb682288094647..0bf071a9328200d0222f49a523ee34fe7bfee6ee 100644 GIT binary patch delta 6138 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 diff --git a/system/STM32L4xx/Lib/libstm32l476.a b/system/STM32L4xx/Lib/libstm32l476.a index 639ffb5bc6497b9b3a6b96e1b311f2480dd3a285..1f29ed4a0b349c4c051aa1dc2517b649deda9af5 100644 GIT binary patch delta 6391 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 Ibwc#N0rw+!YXATM delta 5254 zcmc&%2~X$6frCOO)~6E#+iMya-LsWh7QXtmY;|I8bPNlw#aN?8K60_n>;T^5qa>xls}%R)?N=rCCK#PLIYWO^o@eyk z3Ax=xS+Ui*(^A&=g#gvs4AiuJ2WJGR8mrllM@Zv)1vqcqwFc?uLjs&P?v+;QSG@xqzh#M3 zhb748QncGHS2RqbPId5Lx%-liRHVB8lsqxNBjr?+Ez0GlV5-|5<^I%m>R5y1R0kyM zUOuQ%dBSE2{O^Q_acxyD`Dk=Y942lY*&jlk|t=U}{;tewlytTKPV!^;=_u zqpW-MeX@h8DcAI~^0lSN%fW4NE|TL6AVv_AD#wLPGzI(BCCMQT{e!p&wWvNsx*Ehe z)p4U)m*V#Bo`xM)@^f-?mfOm@N@Z^KlQ-B9Ddo;?d9G3?r|J7y`u+4+`P{I5>u=g* zn%4QWEv56ZjdkT;OY+8=jdf>5Z^7aVE*S2doa1_M`~CyHTWVF@q}AYVqNenO2`dli zzUnKH1o^IX%amR_eu1~$xoCMAac>m4Z?bgVrM@a<16|)Ud*nceF^QQ?8%jD znA`FbtZ)Tu|AtKyS!-CibYCxKf=l|BB37?qRi2^CWkOgTgy<^KBy1WkY}FYs6_)E= zcq2QGYdEqS@Mg9dI@DEThn$#|^%At+LHDQ}2o0tBWW9|OIF@yVdW`4C_n{3@(s1ozwnaB?e*D3ULLa#4IG z=xF{f=uRBQLt^-5NQmXLVJ$lI4Ib%BUpAaG8l z*F>jAmQH($fsL#v>IjVO64Z*MRXW>)2M=bFs1Xo%-6-B_WId(ZdU2+ab*|OHTKotn z24S)p0wQT8?L|7}f$0KYrwYG;XFm;@8DMk=!?_rYkzn8t0`ldGibN9C2;@{Cu@2!1F?D@w_--3mo2zTFe-TJF;2a zU&jX12Jyt(tk9$NAQ_*5wO=?K>m^t!xto&d&m8pr2rPlUF!7@~2$V~tP%CtOyZNSwH;IGicaAxv5_ z&LL69fjeRp3)eHZXCv^&6+lQNx*P^U3wHsdgMx4{mV=ql3jG)>3?G86-wLezBOnav zI3N7!TD{6UJF{{K$V3x#r$3KdXT_;>2uL)*9Q0q}&S@@&6}-t^c8Kf^EG`SD5J>U) z+^H}!Lk7m-Tmo*AG*X?nft^vrQ{!}cPh}QFj0T~k8sRCgS&4Aj$0A(yu?XJHAk|>C zKZRgXQib5FG%`@BDo|-8R=VzsMZijBl;C^Z``}9X`W)qVQ!+|(65JImE0ON&u;$M| zC>btF`#WNUtBDoLP*2=^NpXn!CYEKv>i(x#-O|L4N?D1q?wB0e5$t+6tusyU**lx>ZVrYihrViN4=1bDH4Drc6xNJYm z5HZbwtr=nxBFPlZ&1{xwKqkIQ;YA|;8e)hOV_R6VG&)l(Y+?f*yxH@J_&N|8vg@7mldPk;23mP(Xh=pAeTKzTVFgqy=`-y2~CRQV%dL-RU8U z53nTZtX*X72J(3%%ZkKOAa(9A*mhr)BgnsBB+el}A%c)9Q3V}~==T|?yM%2Fb=p3J z5x_v}{e#FCH(!*T;yDP>)w|$m`eu3(!aA-8=_z6+IFfXu!Vl*MY)7rn+@GA}VFcZv+ z*RY$01sYasSg#=rkBDDSH^r!_M_HL1bqV$x$8kl&HVtoy1;<^)?qJAQ{oso^JCMGrrv!l&t< z3;iFjxx)LuVM2fNFQ$BpWAB+?8t%^$kmXdHOqQIaK$z>I#i`!Qw8ZXc=TzXXhWfMA z&|8*+UH#5H{NRpI+oG(4651n5i><5XwYM%bTMv(Gk5{)vhAv&=Z|3{b$8HK;eL0w0 zWM9Hn`x4vT_HTDBHg$#Vy?^>+yL-R))dvmsUhV$@yj+Aj_G5eP=|Eh4c6g+EZe7^Y zhIUQ`Zqssqv%t4%xgUm`CI&d~zpZf@j&}zIagl1`T*n)M^*^w~G2R*!5uuhGbkxND E8*qx6b^rhX diff --git a/system/STM32L4xx/Lib/libstm32l496.a b/system/STM32L4xx/Lib/libstm32l496.a index 3b8f4d8417ccc8670f5ef3d3f56e153d6126a2c1..fde2f242197e98239f53eab77cb40d9b368c5301 100644 GIT binary patch delta 6372 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 YpK^R9yPR>{I?(JZ+2rYqRzvLn02%ivXaE2J diff --git a/system/STM32L4xx/Source/stm32l4_adc.c b/system/STM32L4xx/Source/stm32l4_adc.c index 55681a9a..011b753a 100644 --- a/system/STM32L4xx/Source/stm32l4_adc.c +++ b/system/STM32L4xx/Source/stm32l4_adc.c @@ -282,10 +282,10 @@ bool stm32l4_adc_calibrate(stm32l4_adc_t *adc) return true; } -uint32_t stm32l4_adc_convert(stm32l4_adc_t *adc, unsigned int channel) +uint32_t stm32l4_adc_convert(stm32l4_adc_t *adc, unsigned int channel, unsigned int period) { ADC_TypeDef *ADCx = adc->ADCx; - uint32_t convert, adc_smp; + uint32_t convert, threshold, adcclk, adc_smp; if (adc->state != ADC_STATE_READY) { @@ -296,51 +296,64 @@ uint32_t stm32l4_adc_convert(stm32l4_adc_t *adc, unsigned int channel) * calibration and first conversion or between 2 consecutive conversions is too long. */ - if ((adc->instance == ADC_INSTANCE_ADC1) && - ((channel == ADC_CHANNEL_ADC1_TS) || (channel == ADC_CHANNEL_ADC1_VBAT) || (channel == ADC_CHANNEL_ADC1_VREFINT))) + if ((adc->instance == ADC_INSTANCE_ADC1) && (channel == ADC_CHANNEL_ADC1_TS)) { - if (channel == ADC_CHANNEL_ADC1_TS) - { - ADCx->CR |= ADC_CR_ADDIS; + ADCx->CR |= ADC_CR_ADDIS; - while (ADCx->CR & ADC_CR_ADEN) - { - } + while (ADCx->CR & ADC_CR_ADEN) + { + } #if defined(STM32L476xx) || defined(STM32L496xx) - armv7m_atomic_or(&ADC123_COMMON->CCR, ADC_CCR_TSEN); + armv7m_atomic_or(&ADC123_COMMON->CCR, ADC_CCR_TSEN); #else /* defined(STM32L476xx) || defined(STM32L496xx) */ - armv7m_atomic_or(&ADC1_COMMON->CCR, ADC_CCR_TSEN); + armv7m_atomic_or(&ADC1_COMMON->CCR, ADC_CCR_TSEN); #endif /* defined(STM32L476xx) || defined(STM32L496xx) */ - ADCx->ISR = ADC_ISR_ADRDY; - - do - { - ADCx->CR |= ADC_CR_ADEN; - } - while (!(ADCx->ISR & ADC_ISR_ADRDY)); - - armv7m_core_udelay(120); + ADCx->ISR = ADC_ISR_ADRDY; - /* min time is 5us */ - adc_smp = ADC_SAMPLE_TIME_247_5; - } - else if (channel == ADC_CHANNEL_ADC1_VBAT) - { - /* min time is 12us */ - adc_smp = ADC_SAMPLE_TIME_640_5; - } - else + do { - adc_smp = ADC_SAMPLE_TIME_47_5; + ADCx->CR |= ADC_CR_ADEN; } + while (!(ADCx->ISR & ADC_ISR_ADRDY)); + + armv7m_core_udelay(120); + } + + if ((stm32l4_system_hclk() <= 48000000) && (stm32l4_system_hclk() == stm32l4_system_sysclk())) + { + adcclk = stm32l4_system_hclk(); } else { - adc_smp = ADC_SAMPLE_TIME_47_5; + adcclk = stm32l4_system_hclk() / 2; } + /* period is in uS. 1e6 / adcclk is one tick in terms of uS. + * + * (period * adcclk) / 1e6 is the threshold for the sampling time. + * + * The upper limit for period is 50uS, and adcclk limited to 48MHz, + * which means no overflow handling is needed. + */ + + if (period > 50) + { + period = 50; + } + + threshold = ((uint32_t)period * adcclk); + + if (threshold < (uint32_t)( 2.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_2_5; } + else if (threshold < (uint32_t)( 6.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_6_5; } + else if (threshold < (uint32_t)( 12.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_12_5; } + else if (threshold < (uint32_t)( 24.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_24_5; } + else if (threshold < (uint32_t)( 47.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_47_5; } + else if (threshold < (uint32_t)( 92.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_92_5; } + else if (threshold < (uint32_t)(247.5 * 1e6)) { adc_smp = ADC_SAMPLE_TIME_247_5; } + else { adc_smp = ADC_SAMPLE_TIME_640_5; } + ADCx->SQR1 = (channel << 6); ADCx->SMPR1 = (channel < 10) ? (adc_smp << (channel * 3)) : 0; ADCx->SMPR2 = (channel >= 10) ? (adc_smp << ((channel * 3) - 30)) : 0; From ed5e31fcaa54936ea7730f061c354e3e0f29a2f8 Mon Sep 17 00:00:00 2001 From: Thomas Roell Date: Mon, 17 Sep 2018 21:30:07 -0600 Subject: [PATCH 3/5] make "config" for Hardware serial a uint32_t type --- cores/stm32l4/CDC.cpp | 4 ++-- cores/stm32l4/HardwareSerial.h | 2 +- cores/stm32l4/USBAPI.h | 2 +- cores/stm32l4/Uart.cpp | 4 ++-- cores/stm32l4/Uart.h | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cores/stm32l4/CDC.cpp b/cores/stm32l4/CDC.cpp index aa5ee0bc..fbca22ee 100644 --- a/cores/stm32l4/CDC.cpp +++ b/cores/stm32l4/CDC.cpp @@ -72,10 +72,10 @@ CDC::CDC(struct _stm32l4_usbd_cdc_t *usbd_cdc, bool serialEvent) void CDC::begin(unsigned long baudrate) { - begin(baudrate, (uint8_t)SERIAL_8N1); + begin(baudrate, SERIAL_8N1); } -void CDC::begin(unsigned long baudrate, uint16_t config) +void CDC::begin(unsigned long baudrate, uint32_t config) { /* If USBD_CDC has already been enabled/initialized by STDIO, just add the notify. */ diff --git a/cores/stm32l4/HardwareSerial.h b/cores/stm32l4/HardwareSerial.h index 655bc84b..7f8d35f2 100644 --- a/cores/stm32l4/HardwareSerial.h +++ b/cores/stm32l4/HardwareSerial.h @@ -57,7 +57,7 @@ class HardwareSerial : public Stream { public: virtual void begin(unsigned long); - virtual void begin(unsigned long baudrate, uint16_t config); + virtual void begin(unsigned long baudrate, uint32_t config); virtual void end(); virtual int available(void) = 0; virtual int peek(void) = 0; diff --git a/cores/stm32l4/USBAPI.h b/cores/stm32l4/USBAPI.h index d4ccde73..479dc638 100644 --- a/cores/stm32l4/USBAPI.h +++ b/cores/stm32l4/USBAPI.h @@ -59,7 +59,7 @@ class CDC : public HardwareSerial public: CDC(struct _stm32l4_usbd_cdc_t *usbd_cdc, bool serialEvent); void begin(unsigned long baudRate); - void begin(unsigned long baudrate, uint16_t config); + void begin(unsigned long baudrate, uint32_t config); void end(void); int available(void); diff --git a/cores/stm32l4/Uart.cpp b/cores/stm32l4/Uart.cpp index 102caa69..c56c3284 100644 --- a/cores/stm32l4/Uart.cpp +++ b/cores/stm32l4/Uart.cpp @@ -61,7 +61,7 @@ void Uart::begin(unsigned long baudrate) begin(baudrate, SERIAL_8N1, &_rx_data[0], sizeof(_rx_data)); } -void Uart::begin(unsigned long baudrate, uint16_t config) +void Uart::begin(unsigned long baudrate, uint32_t config) { begin(baudrate, config, &_rx_data[0], sizeof(_rx_data)); } @@ -71,7 +71,7 @@ void Uart::begin(unsigned long baudrate, uint8_t *buffer, size_t size) begin(baudrate, SERIAL_8N1, buffer, size); } -void Uart::begin(unsigned long baudrate, uint16_t config, uint8_t *buffer, size_t size) +void Uart::begin(unsigned long baudrate, uint32_t config, uint8_t *buffer, size_t size) { if (_uart->state != UART_STATE_INIT) { flush(); diff --git a/cores/stm32l4/Uart.h b/cores/stm32l4/Uart.h index 3a3bf42e..20ed7de0 100644 --- a/cores/stm32l4/Uart.h +++ b/cores/stm32l4/Uart.h @@ -38,9 +38,9 @@ class Uart : public HardwareSerial public: Uart(struct _stm32l4_uart_t *uart, unsigned int instance, const struct _stm32l4_uart_pins_t *pins, unsigned int priority, unsigned int mode, bool serialEvent); void begin(unsigned long baudRate); - void begin(unsigned long baudrate, uint16_t config); + void begin(unsigned long baudrate, uint32_t config); void begin(unsigned long baudRate, uint8_t *buffer, size_t size); - void begin(unsigned long baudrate, uint16_t config, uint8_t *buffer, size_t size); + void begin(unsigned long baudrate, uint32_t config, uint8_t *buffer, size_t size); void end(); int available(); int availableForWrite(void); From 7548c239e625337e0db0a9f416ad7cc1d82f1579 Mon Sep 17 00:00:00 2001 From: Thomas Roell Date: Mon, 17 Sep 2018 21:39:12 -0600 Subject: [PATCH 4/5] Fix _tx_active handling for Wire Slave --- libraries/Wire/src/Wire.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/Wire/src/Wire.cpp b/libraries/Wire/src/Wire.cpp index 35b43d8c..b5fb7fa9 100644 --- a/libraries/Wire/src/Wire.cpp +++ b/libraries/Wire/src/Wire.cpp @@ -404,10 +404,13 @@ void TwoWire::EventCallback(uint32_t events) if (events & I2C_EVENT_TRANSMIT_REQUEST) { _tx_write = 0; + _tx_active = true; if(_requestCallback) { (*_requestCallback)(); } + + _tx_active = false; stm32l4_i2c_service(_i2c, &_tx_data[0], _tx_write); } From ac659033eadd50cfe001ba1590a1362b2d87bb76 Mon Sep 17 00:00:00 2001 From: Thomas Roell Date: Sun, 30 Dec 2018 06:07:21 -0700 Subject: [PATCH 5/5] Remove CMSIS-DAP from STM32L433-Butterfly --- boards.txt | 4 ---- cores/stm32l4/stm32l4_wiring_analog.c | 9 +++++++-- variants/STM32L433CC-Butterfly/variant.cpp | 5 ----- variants/STM32L433CC-Butterfly/variant.h | 3 --- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/boards.txt b/boards.txt index f1f78147..805a5895 100644 --- a/boards.txt +++ b/boards.txt @@ -229,10 +229,6 @@ Butterfly-L433CC.menu.usb.cdc_hid=Serial + Keyboard + Mouse Butterfly-L433CC.menu.usb.cdc_hid.build.usb_type=USB_TYPE_CDC_HID Butterfly-L433CC.menu.usb.cdc_msc_hid=Serial + Mass Storage + Keyboard + Mouse Butterfly-L433CC.menu.usb.cdc_msc_hid.build.usb_type=USB_TYPE_CDC_MSC_HID -Butterfly-L433CC.menu.usb.cdc_dap=Serial + CMSIS-DAP -Butterfly-L433CC.menu.usb.cdc_dap.build.usb_type=USB_TYPE_CDC_DAP -Butterfly-L433CC.menu.usb.cdc_msc_dap=Serial + Mass Storage + CMSIS-DAP -Butterfly-L433CC.menu.usb.cdc_msc_dap.build.usb_type=USB_TYPE_CDC_MSC_DAP Butterfly-L433CC.menu.usb.none=No USB Butterfly-L433CC.menu.usb.none.build.usb_type=USB_TYPE_NONE diff --git a/cores/stm32l4/stm32l4_wiring_analog.c b/cores/stm32l4/stm32l4_wiring_analog.c index 351e60cd..ef6f7a2c 100644 --- a/cores/stm32l4/stm32l4_wiring_analog.c +++ b/cores/stm32l4/stm32l4_wiring_analog.c @@ -49,6 +49,8 @@ static uint32_t _writeRange[PWM_INSTANCE_COUNT]; static uint8_t _writeCalibrate = 3; +bool _analogReadFast = false; + void analogReference(eAnalogReference reference) { (void)reference; @@ -115,7 +117,7 @@ uint32_t analogRead(uint32_t pin) stm32l4_adc_enable(&stm32l4_adc, 0, NULL, NULL, 0); stm32l4_adc_calibrate(&stm32l4_adc); } - else + else if (stm32l4_adc.state != ADC_STATE_READY) { stm32l4_adc_enable(&stm32l4_adc, 0, NULL, NULL, 0); } @@ -124,7 +126,10 @@ uint32_t analogRead(uint32_t pin) input = stm32l4_adc_convert(&stm32l4_adc, g_APinDescription[pin].adc_input, _readPeriod); - stm32l4_adc_disable(&stm32l4_adc); + if (!_analogReadFast) + { + stm32l4_adc_disable(&stm32l4_adc); + } return mapResolution(input, 12, _readResolution); } diff --git a/variants/STM32L433CC-Butterfly/variant.cpp b/variants/STM32L433CC-Butterfly/variant.cpp index 37bb0e42..eff7126e 100644 --- a/variants/STM32L433CC-Butterfly/variant.cpp +++ b/variants/STM32L433CC-Butterfly/variant.cpp @@ -45,13 +45,8 @@ extern const PinDescription g_APinDescription[NUM_TOTAL_PINS] = { GPIOB, GPIO_PIN_MASK(GPIO_PIN_PB12), GPIO_PIN_PB12, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_INPUT_NONE }, { GPIOB, GPIO_PIN_MASK(GPIO_PIN_PB13), GPIO_PIN_PB13_TIM15_CH1N, (PIN_ATTR_PWM | PIN_ATTR_EXTI), PWM_INSTANCE_TIM15, PWM_CHANNEL_1, ADC_INPUT_NONE }, { GPIOB, GPIO_PIN_MASK(GPIO_PIN_PB14), GPIO_PIN_PB14_TIM1_CH2N, (PIN_ATTR_PWM | PIN_ATTR_EXTI), PWM_INSTANCE_TIM1, PWM_CHANNEL_2, ADC_INPUT_NONE }, -#if (USBD_TYPE == USBD_TYPE_CDC_DAP) || (USBD_TYPE == USBD_TYPE_CDC_MSC_DAP) - { NULL, GPIO_PIN_MASK(GPIO_PIN_PB15), GPIO_PIN_PB15, 0, PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_INPUT_NONE }, - { NULL, GPIO_PIN_MASK(GPIO_PIN_PB8), GPIO_PIN_PB8, 0, PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_INPUT_NONE }, -#else /* (USBD_TYPE == USBD_TYPE_CDC_DAP) || (USBD_TYPE == USBD_TYPE_CDC_MSC_DAP) */ { GPIOB, GPIO_PIN_MASK(GPIO_PIN_PB15), GPIO_PIN_PB15_TIM1_CH3N, (PIN_ATTR_PWM | PIN_ATTR_EXTI), PWM_INSTANCE_TIM1, PWM_CHANNEL_3, ADC_INPUT_NONE }, { GPIOB, GPIO_PIN_MASK(GPIO_PIN_PB8), GPIO_PIN_PB8_TIM16_CH1, (PIN_ATTR_PWM | PIN_ATTR_EXTI), PWM_INSTANCE_TIM16, PWM_CHANNEL_1, ADC_INPUT_NONE }, -#endif /* (USBD_TYPE == USBD_TYPE_CDC_DAP) || (USBD_TYPE == USBD_TYPE_CDC_MSC_DAP) */ { GPIOB, GPIO_PIN_MASK(GPIO_PIN_PB9), GPIO_PIN_PB9, (PIN_ATTR_EXTI), PWM_INSTANCE_NONE, PWM_CHANNEL_NONE, ADC_INPUT_NONE }, { GPIOA, GPIO_PIN_MASK(GPIO_PIN_PA15), GPIO_PIN_PA15_TIM2_CH1, (PIN_ATTR_PWM | PIN_ATTR_EXTI), PWM_INSTANCE_TIM2, PWM_CHANNEL_1, ADC_INPUT_NONE }, { GPIOA, GPIO_PIN_MASK(GPIO_PIN_PA2), GPIO_PIN_PA2_TIM2_CH3, (PIN_ATTR_PWM | PIN_ATTR_EXTI | PIN_ATTR_WKUP4), PWM_INSTANCE_TIM2, PWM_CHANNEL_3, ADC_INPUT_NONE }, diff --git a/variants/STM32L433CC-Butterfly/variant.h b/variants/STM32L433CC-Butterfly/variant.h index 7dbf8475..6b61b4be 100644 --- a/variants/STM32L433CC-Butterfly/variant.h +++ b/variants/STM32L433CC-Butterfly/variant.h @@ -41,9 +41,6 @@ #define STM32L4_CONFIG_SYSOPT 0 #define STM32L4_CONFIG_USB_VBUS GPIO_PIN_PB2 -#define STM32L4_CONFIG_DAP_SWCLK GPIO_PIN_PB15 -#define STM32L4_CONFIG_DAP_SWDIO GPIO_PIN_PB8 - #define USBCON /** Master clock frequency */