From 9470b22c88ff6b478cd14208180209c1312cf8cb Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Tue, 2 Jul 2024 11:46:35 +0300 Subject: [PATCH] fixed bug with LEDs --- F0:F030,F042,F072/usbcan_ringbuffer/Makefile | 4 +- .../usbcan_ringbuffer/hardware.c | 17 ++-- .../usbcan_ringbuffer/hardware.h | 13 +-- .../usbcan_ringbuffer/openocd.cfg | 96 ++++++++++++++++++ .../usbcan_ringbuffer/usbcan.bin | Bin 11348 -> 11392 bytes .../usbcan_ringbuffer/usbcanrb.creator.user | 56 +++++----- 6 files changed, 140 insertions(+), 46 deletions(-) create mode 100644 F0:F030,F042,F072/usbcan_ringbuffer/openocd.cfg diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/Makefile b/F0:F030,F042,F072/usbcan_ringbuffer/Makefile index 3ecb35b..03d8a04 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/Makefile +++ b/F0:F030,F042,F072/usbcan_ringbuffer/Makefile @@ -1,8 +1,8 @@ BINARY := usbcan # MCU code -MCU := F042x6 +MCU := F072xB # change this linking script depending on particular MCU model, -LDSCRIPT := stm32f042x6.ld +LDSCRIPT := stm32f072x8.ld DEFINES := -DUSB2_16 diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/hardware.c b/F0:F030,F042,F072/usbcan_ringbuffer/hardware.c index d74ea6f..a71c422 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/hardware.c +++ b/F0:F030,F042,F072/usbcan_ringbuffer/hardware.c @@ -21,13 +21,14 @@ uint8_t ledsON = 0; void gpio_setup(void){ - RCC->AHBENR |= RCC_AHBENR_GPIOBEN; - // Set LEDS (PB0/1) as output + RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; + // Set LEDS (PB15/PA8) as output pin_set(LED0_port, LED0_pin); // clear LEDs pin_set(LED1_port, LED1_pin); - GPIOB->MODER = (GPIOB->MODER & ~(GPIO_MODER_MODER0 | GPIO_MODER_MODER1) - ) | - GPIO_MODER_MODER0_O | GPIO_MODER_MODER1_O; + GPIOB->MODER = (GPIOB->MODER & ~(GPIO_MODER_MODER15)) | + GPIO_MODER_MODER15_O; + GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER8)) | + GPIO_MODER_MODER8_O; } void iwdg_setup(){ @@ -53,12 +54,6 @@ void iwdg_setup(){ IWDG->KR = IWDG_REFRESH; /* (6) */ } -// pause in milliseconds for some purposes -void pause_ms(uint32_t pause){ - uint32_t Tnxt = Tms + pause; - while(Tms < Tnxt) nop(); -} - void Jump2Boot(){ void (*SysMemBootJump)(void); volatile uint32_t addr = 0x1FFFC800; diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/hardware.h b/F0:F030,F042,F072/usbcan_ringbuffer/hardware.h index 69fbdb0..0c63074 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/hardware.h +++ b/F0:F030,F042,F072/usbcan_ringbuffer/hardware.h @@ -27,28 +27,23 @@ #define FORMUSART(X) CONCAT(USART, X) #define USARTX FORMUSART(USARTNUM) -// LEDS: 0 - PB0, 1 - PB1 +// LEDS: 0 - PB15, 1 - PA8 // LED0 #define LED0_port GPIOB -#define LED0_pin (1<<0) +#define LED0_pin (1<<15) // LED1 -#define LED1_port GPIOB -#define LED1_pin (1<<1) +#define LED1_port GPIOA +#define LED1_pin (1<<8) #define LED_blink(x) do{if(ledsON) pin_toggle(x ## _port, x ## _pin);}while(0) #define LED_on(x) do{if(ledsON) pin_clear(x ## _port, x ## _pin);}while(0) #define LED_off(x) do{pin_set(x ## _port, x ## _pin);}while(0) -// CAN address - PB14(0), PB15(1), PA8(2) -#define READ_CAN_INV_ADDR() (((GPIOA->IDR & (1<<8))>>6)|((GPIOB->IDR & (3<<14))>>14)) - - extern volatile uint32_t Tms; extern uint8_t ledsON; void gpio_setup(void); void iwdg_setup(); -void pause_ms(uint32_t pause); void Jump2Boot(); diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/openocd.cfg b/F0:F030,F042,F072/usbcan_ringbuffer/openocd.cfg new file mode 100644 index 0000000..4d268f6 --- /dev/null +++ b/F0:F030,F042,F072/usbcan_ringbuffer/openocd.cfg @@ -0,0 +1,96 @@ +# script for stm32f0x family + +# +# stm32 devices support SWD transports only. +# +source [find interface/stlink-v2-1.cfg] +source [find target/swj-dp.tcl] +source [find mem_helper.tcl] + +if { [info exists CHIPNAME] } { + set _CHIPNAME $CHIPNAME +} else { + set _CHIPNAME stm32f0x +} + +set _ENDIAN little + +# Work-area is a space in RAM used for flash programming +# By default use 4kB +if { [info exists WORKAREASIZE] } { + set _WORKAREASIZE $WORKAREASIZE +} else { + set _WORKAREASIZE 0x1000 +} + +# Allow overriding the Flash bank size +if { [info exists FLASH_SIZE] } { + set _FLASH_SIZE $FLASH_SIZE +} else { + # autodetect size + set _FLASH_SIZE 0 +} + +#jtag scan chain +if { [info exists CPUTAPID] } { + set _CPUTAPID $CPUTAPID +} else { + # See STM Document RM0091 + # Section 29.5.3 + set _CPUTAPID 0x0bb11477 +} + +swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID +dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu + +set _TARGETNAME $_CHIPNAME.cpu +target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap + +$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0 + +# flash size will be probed +set _FLASHNAME $_CHIPNAME.flash +flash bank $_FLASHNAME stm32f1x 0x08000000 $_FLASH_SIZE 0 0 $_TARGETNAME + +# adapter speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz +adapter speed 1000 + +adapter srst delay 100 + +reset_config srst_nogate + +if {![using_hla]} { + # if srst is not fitted use SYSRESETREQ to + # perform a soft reset + cortex_m reset_config sysresetreq +} + +proc stm32f0x_default_reset_start {} { + # Reset clock is HSI (8 MHz) + adapter speed 1000 +} + +proc stm32f0x_default_examine_end {} { + # Enable debug during low power modes (uses more power) + mmw 0x40015804 0x00000006 0 ;# DBGMCU_CR |= DBG_STANDBY | DBG_STOP + + # Stop watchdog counters during halt + mmw 0x40015808 0x00001800 0 ;# DBGMCU_APB1_FZ |= DBG_IWDG_STOP | DBG_WWDG_STOP +} + +proc stm32f0x_default_reset_init {} { + # Configure PLL to boost clock to HSI x 6 (48 MHz) + mww 0x40021004 0x00100000 ;# RCC_CFGR = PLLMUL[2] + mmw 0x40021000 0x01000000 0 ;# RCC_CR[31:16] |= PLLON + mww 0x40022000 0x00000011 ;# FLASH_ACR = PRFTBE | LATENCY[0] + sleep 10 ;# Wait for PLL to lock + mmw 0x40021004 0x00000002 0 ;# RCC_CFGR |= SW[1] + + # Boost JTAG frequency + adapter speed 8000 +} + +# Default hooks +$_TARGETNAME configure -event examine-end { stm32f0x_default_examine_end } +$_TARGETNAME configure -event reset-start { stm32f0x_default_reset_start } +$_TARGETNAME configure -event reset-init { stm32f0x_default_reset_init } diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/usbcan.bin b/F0:F030,F042,F072/usbcan_ringbuffer/usbcan.bin index 2fd182c3e08358b60d59698e9cf999199805a68c..f3cbb5876edbe08e928064c0e153c0803f56457a 100755 GIT binary patch delta 3618 zcmb7HdvH@_7C$#h+Zc+Jlo6X2NN-wcn~Hs*h4P3=xlM9WDpXC=qDdc+v{bt+?o{kf zQb6rvkkad;q_~UgV^nY#T40NHv?#l**LkS>XPJny~V)yLiL)r&ph|<26m^CtDALF~_&ROhr zVtG!k8ZsLdsl?TFeKQqOi86%*`D>{lKY?HoKr&?fi;3NtAisL#3+iF&ergp38umyD z^KpFAOqsV+<0eOA*2+Bg70i|R65=lAo|)^2WTs9+3%d9kToUs4`a&}o z5-SUE79GNZ*n%k4g1i-F4x$sW7janR)4`$fh{p~Y;N8R)(HD0XF%`2aWW?1No_Tjx z^KDZ4o!;kydFceo_MkWm$iT>~PB0S>F)t;U2qWW9n7ig9nmwX&d}LG@R5q)l^@`I?fI^IV)OKr7{)NM12RH^C*M0+)m9-Fnk-C(WmHz(xI#_@k`BnGky$ab4FPhlG*%bjN>3WL?|CVyvA zO4{w6YB%Xl8;n^C+w2O*cuW^`$w`C4CULxEQs~^NCiIrrTFGIjGDc!>t4Hjr`fUbP zwY7e>!A+J|cS)X8(JdwkOB8`t;x*PM=tJJwZ-@h7;!0NNxao{Nf@z_ZZxZG zA|#~M_PE(&+i=t4yaO^rzKwLfxqb~EqHUm|?tUo)8VTd1dnjoY>7+*;Dm{4T`=#Ut zI@u}mRDT8iD2A(|dz=+<;7#*OyD_)EB7X&SyZ1+eS_|!Qu$qb( zm0s%Aw-H+f?%B!Ww4(JgE%<0=ZsHnZBeOAaAz@;6C1$R>C3d&nN}X+xbU_y3Bl09& z1!Qj}WP$ewRs*2@!$_m^kh4|4#S0g5{RPf_dKh($N#T3P5*899y7+!UE(kwF1R*R4 z!k~~HnPg_nNse);eN(B(;(ega9<`<@Ro!~xV!re2?Ku#iA{tl)P2f8oD1t&*oi9tZw$eaw%bXVh^n?nZ5vYuEha4(0x?cJ-t zHoTfrpuI7q!4u5ZTq`4b#Jvm!>>4ZOEAs}j$-`xYr%jB7X*v-2Q$PwGSQ*QL*Bnxo z$ls#}-`&BlF!3(lCk+C*+1`s~7R{q~UQi6SF!%_a+@u0(>Dk^zS<+#LsSDaIFHz;@ zwM~!}=PNE6?akIohpWv!aL)33stPx8nU4=PQGlCR#@!l{EZ(>3%7rVK6R~hkm$}K}Xhq!UmLB{4IBbyrBJiwcMRdC9 z2|io55Sj-gORA2ho60~;mh4{OZ zZ_%VjV@-bxeN}+gZM>Sk1beAYO%Hgenqt=C?iIM)&?5Y{gIryqzuLpcxPT_OmcDq5m#CUV3E}=e&NI_o~U$4DcAYXO|$Xzo0*?}J} zq~rU7=tk^Ayoor7XvA+8lz&@&8W*VKZ4QBZoIiy;p5KSu$^R93EYBjZ=1(98UhNdP z^?Y*RxG}@OP(b!omg~#!JyeEiUgquo>KM8O1Q{lfzyuyOo-T`U zUkH;EN6I82fWHKsz zd>>ATO)@5}o6=J|=^jU-KF*r~b#0m0FxQ79c>fMf5X&I@itn9?7jV?qOl{KQRl6ph zF~+_naEtgI^ma`7AN{f2xfw9r;%}k5^>F?%znH6%unSjU6=J(1+!f)s$jgMy6U~~b zO2wVvYi7PoTCgg@3BnGH@Rr|A#`Y))Y~klh{LSR1l=0pMc(1J9IA`f^llHHTaGB9K z?+Y6-jz&;JgzFa+>InC+P{bHisl*wkR(03HBLcQ&U#?&Fa`K(h^D@6$yJ(omkv4%g z98*Q$QQz`8>@=^?b{& zqhubHO^40_vq7MyWEx`gN zbjPrs`)2^~Sf_K+KrYtz^T_uh62w?oyM`u$`7&AKddAoV+e`QB+CXnn8T6$PeIK^7 z@+H%{8Qa$r-j>v6qv+v5k0A{z>~koV%!S}ZegS*^jRQn;ITpgmS~pZ^;oY>W@Tqh>viIkxbMdn))o5fpRU*)fm15 z*?q|B!|BM3QxUFk@`Hb^*+tSC^N3Akksuv?20{S?HR_6kq3;9p&@~?iJrJI*vt6(Y zPGOB)K!~+*N#s~3O^9sdCr}zumZ3~Rc^G9O$}NaZ$WP!HFJcJs8bWM!mr$l)t)?O1 zJ78sSJ*GRY@0t0E87{|6kk=p{L0AxFh*E?ZQH;2xPCxASU0QoY+^HWu4b&o|6sa=gxg)(A0!``liE zmzkx81zQywVkoaGP9c>f4rxH%fM`RUL)_3XWbDt9>K1@}==@)(_0*%(Y6`Tz^Az)O zY;ug$>n2yxt&(=fD(36hM~F;jS=>4zg*hBoGQAr>4KgsDsRDg$CFlY5qg|o6`9!Xq z1o<>X2Ev3$)q%VWr3_Jt*oruWkdQ0st>@bvkOtm5-wOJ(!^@c`;!9;P^tHfTjNdau zMxXXP7tEd~LD?J>R})uZiV`e@mFY+@Z%WAk`BF6XM1z{p{QC$OY2SIJ^P)*%RN8IM zmNOE)&8~F5W0L5VD1SXJZO#iQ9WV_u~+ibK|bXgLzreeH@ zp{M4$I%!3g&8g7K)5Gi~^$GJy%gF+ZoveZAL`kATVkFCfY_?0Y6?QjSQhiOLFxngh z8LvKWZgvpa%?^cguTim7VpP}B*=>LiW-R~ z$yiao*@9CnhjfXzq9z%q*g|iyDD5I7q|LtB(r&Ms^tk1O1tE4LU1O;!#0#>&Q(yh4 zlmV@Tanc=>lyuU4PNf07D!-JhqE*!*pHtws(LciJ9CSx@=@js4{L(heB)imKN{!U_ z)psbfYZ(Jv%S64eK3uh)Zg={$rBOYzKsY%SP+CuLIyHWOZ0;4eIdaIzAZDcl)eO?SX7LD+Dc*t z#&Vf%d`fXI=F4iM1{JD>{u*IT|8td}`ZalT0&;nUPsg#Os zaO0-$ib>$^hCZ@fq4A#EMZdcN@%SCeKj@(6PJkdkpt0b!Qc}YFZsJzi{s5>2?(?ve zyy%*^T-FyL&~!80O}~vdd|~2-+0O!Rr*R4_OYHE0;{Q_tXnqIJ7$dFh)HQayALvyCIr-je>cgyWgvY0`yj^1sB&6GE&wJ z#1esfGxS$ar(w9KfKuRHxI$X!3uI`Ai-`{LEPoC-v^I(@z8=UR&lMBxP2yyjq+bO* z0V%X#HRJ_{ol+mM__zVshl01u6zM!G3j(>#;laupPoj5DP@F3*SVpTFlt3+aUGpqT zm-bYdTcO$d0`<6MZ3CoFVe@nQJQ+G^kKNJ%*R4ONp1@O#@o~XDc(HAiI7Lf;9+aZ> z?>wYBm#9JD4uq_zf5E3661Yb~M2>if*&)f26RW@abO=)-R?U@S15ISNV|!?KtU>SV zF1|l-P`h$`nTd(}0$5=4j#CPskt&t9Q8ZNw$0;L4ED@KzilYW9$uQ(yh2iJ;G+fvm z%0vE3{s5Ulw?c>2Lg8~|wf#%c`Z6#6J;66>=Z&v1F~;3qjMihknr2>_ndr(7EkyMo zzmD=*Ay(j4gchLg;-A-cfX~`axjh1x9ZE&p(~~~wA@O{#@~;H#T7sNo8YvdIjr@-T z0#_J*DzFDnJ5szQ&>aQpVQl__C|SO&_E3dD!_0B?5++&=y?ay5Sf`7`{7 z$d$Yg`40XA0y9Wp2H!GWDUNV|7bJo6Xupds2D2CzxW@5#HUI748MNOPBHT45COLQJ^}%Cw zsk3hid~(+RGA=kP6g3Cf%glyk)$}Jr5`1ZI4-zXN<14mn@EDGdF^7|vn2!zq)D-=? zz!~`c^gc}HX@7KERvPrU{f%^+0d8&fi#aI?yKt?|LUfzJN%?1xJB5b9J=(D{#X?|r z`*+einJr4yYJp4Q_v0+D`Q2o6MLD_v4WJ9L zW{l(_X&Ct|)34Mxh6g}qA%-H>-bx0O^b2vvLI>$GYWjvdsUROlV7HOSB4k)fcTjdCtcY0%xGc<-n(yusKMrCY5;h8pl+a(mn(dAO zxT?h%gjmB)l-m&lIH!yuQWm%lm|9_9(J6fs7_3U8p$Nu%|6ZSb*@SMv=Cs}0sM&22 zJ=)Qufj&xhQeVOjx+=dFP8G?rPZb#{scyShrhCLI(G_}+kcqPB4nhM=DUoD6O4i{T zr;7B;_gPzv`-*DtW~WE=RD^pY;>DO#w#s!nxE6IU>b`Ih zvX7DVg&RpdZmiK7gPUp!9?;}X9&u;TgkIg~bvY~^=0?zn&9aO&qV+Ude-j2x6J^F! zejT_FT!q$`(CP{2A$xI5NB<2vsiWFT{H(N7{nkF_mD%ww)nE>eHjRnR$?b`7DLOF!s5#qloG8l=fL;tRGbL26u zjd36^N0cERN32CWiZCGzh?NL?GRU8u@x!40|6*MKHStXh?EH`5?aCjvxVTwy1Nj)& zI}5J_^?ULDq|NpH0S^we|7&ny_Qcr!N$2nT-aFy{;zbzin~9r1-0O4oJAE4N48Bv4 z2M}*EYjmrY&BEU!1NdvF8}TNh6QPJsAh46@#XoBNmZc#w5jlu_L@~n3{9gCYKLKV9 BTTK7} diff --git a/F0:F030,F042,F072/usbcan_ringbuffer/usbcanrb.creator.user b/F0:F030,F042,F072/usbcan_ringbuffer/usbcanrb.creator.user index 3f190b9..fc3798c 100644 --- a/F0:F030,F042,F072/usbcan_ringbuffer/usbcanrb.creator.user +++ b/F0:F030,F042,F072/usbcan_ringbuffer/usbcanrb.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,23 +37,25 @@ true true 1 + 0 false - true + false false - 0 + 1 true true 0 8 true false - 1 + 2 true - false + true true *.md, *.MD, Makefile - false + true true + true @@ -74,7 +76,8 @@ true true Builtin.DefaultTidyAndClazy - 2 + 4 + false @@ -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/F0-nolib/usbcan_ringbuffer + /home/eddy/Docs/SAO/ELECTRONICS/STM32/F0-srcs/usbcan_ringbuffer @@ -102,7 +105,7 @@ true GenericProjectManager.GenericMakeStep - 1 + 1 Сборка Сборка ProjectExplorer.BuildSteps.Build @@ -115,7 +118,7 @@ true GenericProjectManager.GenericMakeStep - 1 + 1 Очистка Очистка ProjectExplorer.BuildSteps.Clean @@ -128,10 +131,10 @@ По умолчанию GenericProjectManager.GenericBuildConfiguration - 1 + 1 - 0 + 0 Развёртывание Развёртывание ProjectExplorer.BuildSteps.Deploy @@ -141,24 +144,29 @@ false ProjectExplorer.DefaultDeployConfiguration - 1 + 1 + true + true + 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