From 7886dce59313ddbef9e2c6b4e78d8f536887c575 Mon Sep 17 00:00:00 2001 From: eddyem Date: Mon, 5 Nov 2018 19:47:19 +0300 Subject: [PATCH] preparing some cleaning up and union of F0 and F1 base include files and ld scripts --- .gitignore | 4 + F0-nolib/blink/Makefile | 2 +- F0-nolib/canbus/src/Makefile | 2 +- F0-nolib/canbus/src/can.c | 14 + F0-nolib/canbus/src/canbus.bin | Bin 5648 -> 5500 bytes F0-nolib/canbus/src/ld/stm32f042k.ld | 12 - F0-nolib/ch340/Makefile | 2 +- F0-nolib/ch340/ld/stm32f042k.ld | 12 - F0-nolib/htu21d_nucleo/Makefile | 2 +- F0-nolib/htu21d_nucleo/ld/stm32f042k.ld | 12 - F0-nolib/{morze => inc}/ld/stm32f030f.ld | 0 F0-nolib/{blink => inc}/ld/stm32f042k.ld | 0 F0-nolib/morze/Makefile | 2 +- F0-nolib/tsys01_nucleo/Makefile | 2 +- F0-nolib/tsys01_nucleo/ld/stm32f042k.ld | 12 - F0-nolib/tsys01_nucleo/tsys01.bin | Bin 2784 -> 2764 bytes F0-nolib/uart_blink/Makefile | 2 +- F0-nolib/uart_blink/ld/stm32f030f.ld | 12 - F0-nolib/uart_blink/uartblink.bin | Bin 1556 -> 1560 bytes F0-nolib/uart_blink_dma/Makefile | 2 +- F0-nolib/uart_blink_dma/ld/stm32f030f.ld | 12 - F0-nolib/uart_blink_dma/uartblink.bin | Bin 1644 -> 1652 bytes F0-nolib/uart_nucleo/Makefile | 2 +- F0-nolib/uart_nucleo/ld/stm32f042k.ld | 12 - F0-nolib/uart_nucleo/usart.bin | Bin 2176 -> 2180 bytes F0-nolib/usbcdc/Makefile | 2 +- F0-nolib/usbcdc/ld/stm32f042k.ld | 12 - F0-nolib/usbcdc/usbcan.bin | Bin 6688 -> 6688 bytes F1-nolib/{led_blink => inc}/ld/stm32f103x4.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103x6.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103x8.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103xB.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103xC.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103xD.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103xE.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103xF.ld | 0 F1-nolib/{led_blink => inc}/ld/stm32f103xG.ld | 0 F1-nolib/led_blink/Makefile | 2 +- F1-nolib/led_blink/ld/devices.data | 9 - F1-nolib/uart/Makefile | 137 ++++++++++ F1-nolib/uart/README | 5 + F1-nolib/uart/main.c | 131 ++++++++++ F1-nolib/uart/uart.bin | Bin 0 -> 2032 bytes F1-nolib/uart/usart.c | 242 ++++++++++++++++++ F1-nolib/uart/usart.h | 58 +++++ F1/client-term/client.c | 2 +- 46 files changed, 603 insertions(+), 117 deletions(-) delete mode 100644 F0-nolib/canbus/src/ld/stm32f042k.ld delete mode 100644 F0-nolib/ch340/ld/stm32f042k.ld delete mode 100644 F0-nolib/htu21d_nucleo/ld/stm32f042k.ld rename F0-nolib/{morze => inc}/ld/stm32f030f.ld (100%) rename F0-nolib/{blink => inc}/ld/stm32f042k.ld (100%) delete mode 100644 F0-nolib/tsys01_nucleo/ld/stm32f042k.ld delete mode 100644 F0-nolib/uart_blink/ld/stm32f030f.ld delete mode 100644 F0-nolib/uart_blink_dma/ld/stm32f030f.ld delete mode 100644 F0-nolib/uart_nucleo/ld/stm32f042k.ld delete mode 100644 F0-nolib/usbcdc/ld/stm32f042k.ld rename F1-nolib/{led_blink => inc}/ld/stm32f103x4.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103x6.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103x8.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103xB.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103xC.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103xD.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103xE.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103xF.ld (100%) rename F1-nolib/{led_blink => inc}/ld/stm32f103xG.ld (100%) delete mode 100644 F1-nolib/led_blink/ld/devices.data create mode 100644 F1-nolib/uart/Makefile create mode 100644 F1-nolib/uart/README create mode 100644 F1-nolib/uart/main.c create mode 100755 F1-nolib/uart/uart.bin create mode 100644 F1-nolib/uart/usart.c create mode 100644 F1-nolib/uart/usart.h diff --git a/.gitignore b/.gitignore index d56bbc9..94e81b1 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,7 @@ */mk/* .hg* .dropbox.attr +*.sublime-project +*.sublime-workspace +F1/client-term/client +*.bk diff --git a/F0-nolib/blink/Makefile b/F0-nolib/blink/Makefile index e85a52f..535bba3 100644 --- a/F0-nolib/blink/Makefile +++ b/F0-nolib/blink/Makefile @@ -8,7 +8,7 @@ MCU = F042x6 DEFS = -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/canbus/src/Makefile b/F0-nolib/canbus/src/Makefile index 691a4d5..d95bc47 100644 --- a/F0-nolib/canbus/src/Makefile +++ b/F0-nolib/canbus/src/Makefile @@ -11,7 +11,7 @@ DEFS += -DUSARTNUM=1 DEFS += -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/canbus/src/can.c b/F0-nolib/canbus/src/can.c index 49ff5f3..8cb6886 100644 --- a/F0-nolib/canbus/src/can.c +++ b/F0-nolib/canbus/src/can.c @@ -232,18 +232,25 @@ CAN_status can_send(uint8_t *msg, uint8_t len, uint16_t target_id){ switch(len){ case 8: hb |= (uint32_t)msg[7] << 24; + __attribute__((fallthrough)); case 7: hb |= (uint32_t)msg[6] << 16; + __attribute__((fallthrough)); case 6: hb |= (uint32_t)msg[5] << 8; + __attribute__((fallthrough)); case 5: hb |= (uint32_t)msg[4]; + __attribute__((fallthrough)); case 4: lb |= (uint32_t)msg[3] << 24; + __attribute__((fallthrough)); case 3: lb |= (uint32_t)msg[2] << 16; + __attribute__((fallthrough)); case 2: lb |= (uint32_t)msg[1] << 8; + __attribute__((fallthrough)); default: lb |= (uint32_t)msg[0]; } @@ -288,18 +295,25 @@ static void can_process_fifo(uint8_t fifo_num){ switch(len){ case 8: dat[7] = hb>>24; + __attribute__((fallthrough)); case 7: dat[6] = (hb>>16) & 0xff; + __attribute__((fallthrough)); case 6: dat[5] = (hb>>8) & 0xff; + __attribute__((fallthrough)); case 5: dat[4] = hb & 0xff; + __attribute__((fallthrough)); case 4: dat[3] = lb>>24; + __attribute__((fallthrough)); case 3: dat[2] = (lb>>16) & 0xff; + __attribute__((fallthrough)); case 2: dat[1] = (lb>>8) & 0xff; + __attribute__((fallthrough)); case 1: dat[0] = lb & 0xff; } diff --git a/F0-nolib/canbus/src/canbus.bin b/F0-nolib/canbus/src/canbus.bin index ef66d7b649c1c8c0fdc50643f3dfdc401ed1dc81..a3509b154199dba6b5c70939d015e197608579f9 100755 GIT binary patch delta 2951 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 delta 3087 zcma)7eQ+Da72lQ4mMq)R*}{%K?D+0v5<7B&upJ073Cf+bv30V^2NYvx;6$LD5)2AV zr!p-gk&uA|D2^`>TcSxy2&I8`ToF^Ig9p=L_$YKZIRtDxK!yP{0Wut<#mJFy-V*G=4gUw{ zr`K>GYo_$S8-aa~SD+HtVr?~!)x>|J8djua|9y*pHFFjg9jUa(Gq^`20PVf8Az zOrH1cHZe(lDW=F)(i_A>Zb>8_d5ABZ5XnC|k384d<5u`ZlRYHCT^|`JD5e~N z1UG>93l5>1C}EwA6{OiOAZw9?|*F#@XqT;pZ(sh80i)MJcqQqXOWi7@600Y)|pav zC3t_a;GF{RPVhdM-v-|3h3m6*A=;?)%?4wPjFEh{cHvCA4ckkW^H)E@1WQDPrrP3z z<;Z#xFb2>7(4GthjiQ1M|82Ly_?hkXDJKxvkuiU%f`|ED~drxv#Vg1GGVxxy1TUgi`oA0g1p$AV~5C{W(>kxS2 zkQ{Q#@_1$=v3l3Y4&J1$k(0t2$ufN9i~VGXJVBlz+9>h{i6b68owZ$kdsZ*?@GU4% zaxYgn0}Kn@ZQ-rj1x#6MBp{#O*&3yQemK17*>Xdg1sLSr8-d>tz)OvlQp zGU3ixxydG68tW~v2}uca6~cscqhw~PB?@wZEEvRonbp6a!S`dphgrl;X20nxFFd8& zxieV=K}(QC43K~%KY?V-qBBO-Vdb^Lig?3>GvqPC{CLK=vkP@S3$M%c4B}4w>|M0A z>UpO<*pq(DRp={M7X^LMve*!hRX>W3&Ut-N55>A z%0!9<%$^GSlus=+rL{p$z_ss(-SU2cQOc}r$kq0Q@b^u@h*NY3V)!+7vA7R)cbNj+ zn-bi3fm^yrtcud3{h-qkic1uk0v5*7UKA;!_StPhzi@&ZK(ydY9L|mrrOVp75Yq3g z_4o$mO)DF}u>+0x;7ux3Z&-MS-^m%}f(vyBO7%q!d3{osI0emz)PrZP6+IDMd+^Lw zF%{{tELOLKIHSxj81p*dZXS?}1w~459pV7xir55q*c}nuZ2@<9Zn|PF*x`#IpIM!< zgx^7NsB(g{FC*eOPKMXPb?ugiB8vm9!G2OMAK)dG?+_LOd%)NrAUYwmAcS@}$CE~} zTuwz4zEZs;bTksMjM?=Ty%#*kBA168lG6xnr!i9?`phuQyf@b*AK^=2PW*Cdi9zW$ zD1IPp2Ewk~a@ive$@}?IH6>&eEK!M1|$vW0t^C2e^F0@Q~?^`KIIR#J)6U`=DN4l*NnSyAKZ(6z_WnY0W`N% zq(>%Y8^21Wm`VA7Fe!N=T)Q>u=KUEqRBfa%_?>?E6z37I2WE|OPw|R4bvnTf$>o%O zSBu4Dq*QcE^r$D|=B=u=on{Jyj>sOt5vIJw(O0u((G#P5Z)9GE%=C;(A<|D^e?3dY z6+sMcsnv<4AtR-}q{VMiaZ{iH zf8azkym1&gBx@T7KbM&tW(q}@e6Qe=wn=W;B)BEy{UWOzEcwS$Z-8|Kd(bI~ZJBFP zq`O)i()?bI9WJ5lCWduDqdJuPOFxP~nOlbZm)_BOMbwXMEYd1-g-gE5AkO@!X4g(K zv<)}1QGDg2{CAo6ATJ8y)1ON;!i07YGab0!3s)$wn%FutH+}SbT=%WIlh~IgxDTq$ zO@qWKQcQgeufH@s_x*E?*U0*=_2gRz56d?QZOD2nvSx8x$GnJ?WnGwBiRS{mb0&j3FlWU|~ ztg zG1opNG*xqfH=O63XnBE(yl-v$@*3Qv@WnG3ZL|P=n{}gao_mz`V0=dTbJJFB3n)pK`|GCFJ&qaH#@Yk()^%*%vW9_Tq3z+@S8iwOLXDR-{@}aj$G&FestUKMu}SHv GVE+wz74{+k diff --git a/F0-nolib/canbus/src/ld/stm32f042k.ld b/F0-nolib/canbus/src/ld/stm32f042k.ld deleted file mode 100644 index e747253..0000000 --- a/F0-nolib/canbus/src/ld/stm32f042k.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F042x6, 32K flash, 6K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/ch340/Makefile b/F0-nolib/ch340/Makefile index a72fdf8..2e59822 100644 --- a/F0-nolib/ch340/Makefile +++ b/F0-nolib/ch340/Makefile @@ -11,7 +11,7 @@ DEFS += -DUSARTNUM=1 #DEFS += -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/ch340/ld/stm32f042k.ld b/F0-nolib/ch340/ld/stm32f042k.ld deleted file mode 100644 index e747253..0000000 --- a/F0-nolib/ch340/ld/stm32f042k.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F042x6, 32K flash, 6K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/htu21d_nucleo/Makefile b/F0-nolib/htu21d_nucleo/Makefile index 48a5249..103a408 100644 --- a/F0-nolib/htu21d_nucleo/Makefile +++ b/F0-nolib/htu21d_nucleo/Makefile @@ -8,7 +8,7 @@ MCU = F042x6 DEFS += -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/htu21d_nucleo/ld/stm32f042k.ld b/F0-nolib/htu21d_nucleo/ld/stm32f042k.ld deleted file mode 100644 index e747253..0000000 --- a/F0-nolib/htu21d_nucleo/ld/stm32f042k.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F042x6, 32K flash, 6K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/morze/ld/stm32f030f.ld b/F0-nolib/inc/ld/stm32f030f.ld similarity index 100% rename from F0-nolib/morze/ld/stm32f030f.ld rename to F0-nolib/inc/ld/stm32f030f.ld diff --git a/F0-nolib/blink/ld/stm32f042k.ld b/F0-nolib/inc/ld/stm32f042k.ld similarity index 100% rename from F0-nolib/blink/ld/stm32f042k.ld rename to F0-nolib/inc/ld/stm32f042k.ld diff --git a/F0-nolib/morze/Makefile b/F0-nolib/morze/Makefile index f85ea34..0a1f97d 100644 --- a/F0-nolib/morze/Makefile +++ b/F0-nolib/morze/Makefile @@ -8,7 +8,7 @@ MCU = F030x4 DEFS = -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f030f.ld +LDSCRIPT = stm32f030f.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/tsys01_nucleo/Makefile b/F0-nolib/tsys01_nucleo/Makefile index d2a8296..2aec3b5 100644 --- a/F0-nolib/tsys01_nucleo/Makefile +++ b/F0-nolib/tsys01_nucleo/Makefile @@ -8,7 +8,7 @@ MCU = F042x6 DEFS += -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/tsys01_nucleo/ld/stm32f042k.ld b/F0-nolib/tsys01_nucleo/ld/stm32f042k.ld deleted file mode 100644 index e747253..0000000 --- a/F0-nolib/tsys01_nucleo/ld/stm32f042k.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F042x6, 32K flash, 6K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/tsys01_nucleo/tsys01.bin b/F0-nolib/tsys01_nucleo/tsys01.bin index 3c7a8672091718b0d4cf860a4bb79b01815f1cb8..fbaa5fd7cdc8834db599d5579cdd0341adfbea7c 100755 GIT binary patch delta 1375 zcma)6eM}o=7=P}rg|^JJ*fr@LAM5piQVzCa0To%&-O1Sx)D28D-OO%7vjbv=(I^p< zG9!ucBZ?<_Fh3WjY>r4I#D65|5@Vbay&HZ2lgS@s{X<|Ezi1huzSk~BlbP(2=brcX zyuaV`KKDLPZrL^Ka)28=5eryak?lh^R9un(1HkpiSf7Xdra`zFJ6(8lyc_3o=EWEO zon&Z+^=X?>ozV&>^%W|-jXKw%u9F^^uD{+cTYnM_ji=8o08lkIdw-95T zy$l3`9ld)QxtE|N0rcl{m0(JCnDq4J;U~PhS=u z6z&sR1tqpTO-V}F##3Tk8l1#KagmaS!+3~7{*9cEOEU6yPh4E=evV%}O7*;E#5=(| zD#m+W=|TNdL0D3%|?xRMb}AAr*xz>@_Xvc_z{y>z5zH>BN&Us2UYQOuOI| zL9g5deJx#1uX@lrQ%%8zb?p1#_IhNGGX3yxH4iZpT80 zFhIwHZmU*fHkSnoYKY~PRt(^N+e(_HK;4q zppucWQJMP=(Xl2>-XD9HyRa0_m2)`_KBxxOCxvrm{g{U8a>RqG5#h6xA8-Zq0o02n z)K7dIbTMQ86tA1paE0jO*{Isi9#C;Q!v3m({%jgo{BR`&Ou~>WDaai$fl_{=5?D3TAv7*H8X{oa;Fw7Y^7{p)B!Yh1 z(m;hZy3bAYIS1#uO1Ui+3%nrzP$2tN?>9$6^v+m2EQ)kMrKV zqaK=)&}7O(g+JBTMA_IV=e+nmzv8Y0f~k(Y!xxpUxg7w@rl3{AlO%l1WwbF1)-VRQ zlC=Dig-%dy)V=38>qWxLlo5?<)G)v1w#+K`oa3%(t~S^I?qxT6w(M>88}6S*+N6N~ zMIIBfuh1Q>T=&NMKbAlNecE1g`@$_?=63)A6NQbM3mkjvth=!$x1-4??GlekhsBSi z_r#RsX!u2R1gE&)HG2itScgT(ouO8es4ZIn=G%wX_nU%OC}MYJo?uKZ`46Q+b)=Pq l8nX(_?4i{Mu%OIsYWj>Bpyp4_x|uS=Zz(UNr>3ne_BV6Y!!iH> delta 1377 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 diff --git a/F0-nolib/uart_blink_dma/Makefile b/F0-nolib/uart_blink_dma/Makefile index f652305..acd9178 100644 --- a/F0-nolib/uart_blink_dma/Makefile +++ b/F0-nolib/uart_blink_dma/Makefile @@ -8,7 +8,7 @@ MCU = F030x4 DEFS = -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f030f.ld +LDSCRIPT = stm32f030f.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/uart_blink_dma/ld/stm32f030f.ld b/F0-nolib/uart_blink_dma/ld/stm32f030f.ld deleted file mode 100644 index f8b61f1..0000000 --- a/F0-nolib/uart_blink_dma/ld/stm32f030f.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F030f4, 16K flash, 4K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 16K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 4K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/uart_blink_dma/uartblink.bin b/F0-nolib/uart_blink_dma/uartblink.bin index 87da4f593e379f536f28e870fbed8bfcbf4f95a1..1ce79a80a592715b9b6705e6a435e83adeaa888d 100755 GIT binary patch delta 1055 zcmah{Z)h839R9s`Nt>jtx%Ap4xg_?IYueB>#h7)Yo7M9!y(V|r(oTdee(>$u(YITN z`7mJvp+i483!|Ju|5)@xMPU_WrQcQ-6+Z|fxw=8ucB~(YCuk-32V1Ak%jy?J-3t%T z@BRIG_`MJBclAHjGr$1vw1dNL0a=*x1SX(*fxk{Q{uuU))rLpmjP21q|F6MA^`H^` zGwSJdL<~Q!oq%=x=8*?SIJ`dQk$x+4XA$p_{ipdbM_e+S<*+(N$?8y(+MJzwVhT59 z4eTLE_TbBrPxx8ApB|iO(<;jwV{5#j14zdbp|&~ z6lOI)27w-A@waCEL-n$WqHazLVYk*|A&52U)UzNY@#`QDuy{@Hv0a^D%P1vwGMgZv zHs>)G#|eTZIgTSxYdQML?zojnS$7b8P+Tb~*8k*#K#AKH|6!JtVt+~LP~+OH#ID|w zw|!Bdg;;i8t_$t>7=SHX%1Nk_AFf$$FF4S_1!(k#vsa{sRXWLrKG%Ef-U%+p9b1%~ zt8_#N(cL@TTk?+2@x^riqIBPA&NcsM?ZGeezq@npf33e~&F*h&voQ11nze()#)19F^Abff9`vF_(YmV;PTcZWrQ~OWm#Dw4J*TtG99y)$Del_jzgBgKc V%fIx?=g(i_FPyn}!3D@N_fPaY8qxp& delta 1036 zcmah{Uu;uV82?UhTP|HmZ*%7C?Vt5_XLN;*Xzi+5W>~$qyK8&g9YakoWgcg8f? zlhLQ4#s`QES*{N&)oC)LCeDO_dvkHX6OqJTkc15uc_69A5gYLjh>Ev@FFuTu{PO#K z-}gJ;cXH18#k=8^Kmui(3&gE9TsCI?p&4if@L)Cd8Mt3;8Xks8=fgdl_rM@lg#R^} zU5*Y<(d$b=K9%=qK~~~#opfYNEXaA@kqz2B@h_M7OE&wI5?ed`rnYt{I5pnPk3+`^ zR+>7dmBv|7O8M>m2hAkv!-b+J^&D@>ipjgyiZWC%sA0a2o>I!UfmHN4y`MtY3H=D! zFF?GiFOEI^EaCI2>xx-J-J#0BjT+$<9g+9+UG#cxZs6K_ORPH&jlJfhj_tVr4kXT5 z3W2WA#=fefPoWVuhaHhARR=0BvwFmKUt0W&%&XmqTVK2n%{yuw-wt4!ud zli3k+RxwQ~jLalxW9jN-)va9aD*8F>h*)tWo=@>OEkkZ!d^p6v)W>s>1Pc+&BDDHW z^;Ca%;MzoZaHNbD_4c8wr(Vn@U+^SDwZ^hc1N;qDx`GtwlndApS&HMl-DzaCj$*A; zWA~UQtT*bdocUf%s7uvIBF=J?MCYX zm|g~g;^GiyNsi#OmSi2^wr}>;+b`Rhv>gNav2OoSB@B-24V(Y2ujtc*D|({1qi{_1 zUc9Wm5)fi#%@1+v%xnbE*XYcGde_=36SLP9n+X|VI_P)_7muB+a{qcYA4$>3^x6v!7M z>iG!18U1OGGrgexVF{fdYw1Ww_I%)G0Cu`+KrS5Ecpjxq)im60*KhS8{A`Z7@js|V B89e|1 diff --git a/F0-nolib/uart_nucleo/Makefile b/F0-nolib/uart_nucleo/Makefile index c581875..e9f44bd 100644 --- a/F0-nolib/uart_nucleo/Makefile +++ b/F0-nolib/uart_nucleo/Makefile @@ -8,7 +8,7 @@ MCU = F042x6 DEFS += -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/uart_nucleo/ld/stm32f042k.ld b/F0-nolib/uart_nucleo/ld/stm32f042k.ld deleted file mode 100644 index e747253..0000000 --- a/F0-nolib/uart_nucleo/ld/stm32f042k.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F042x6, 32K flash, 6K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/uart_nucleo/usart.bin b/F0-nolib/uart_nucleo/usart.bin index 1445acf3a595b88fa3ebad0787b85a208add8a1d..4e04806b8ec8c6815d89138cd516b7ac6d8ec1a4 100755 GIT binary patch delta 1042 zcma)5TSyd982-=BOwF#v?zRduqt?!j+Im^pZ8J*?wwXM+m!h<&HXo*h9E-^4rH4Sf zLG_dj!DjSk5Ol#5pK8e-dWa+(70R_DC|ZK7=|;O+Y-h8Ff`ShGeE;{~4(IzhJ=3H&;F{~pXI^9BE77wP}2`}-`{d~@>mA-zeyn}JgU;4L)# z5-PLY40eg&2Qb4~@MaAmhD0}E@=rz&(09&bGYQ^h(;y|V;LW%RZ;!qh7PRfnHbqe5+Q|V+D6R@xOS2^;5Zw9`T$(=~Lqe&MEQsNW>9vlK!xM7d5(q5nG^DD+saGbH<3fKD;`*T3>7ty8}@uPvDRw zW0wl%{Y-5XmiJ*_6e=#_9;ukRgsWqcHY76>pFNV6TXCsamu*uD-i70xE}F~}dleZM zDEgiXtrZt*P|X|Qa~M!AX}4v1Lefei)1>F=)N-vrY{p<7&gA8tOjiO*0B2%C-x%pM zx(a4Rh8gri?kk&nra!RMvt2|O8o;fy)CRw63BoVpNOiPNc8yOeuefrcByae#Qcya> zIRIYJL91pN;o+K`HTqe!vLBZ4qTa!X-9k**bX~TNQy!_5s+$omC^H;8n%H<MK zMgPp@zCQeJkJ_>M6aEHnGo{v mRvxODF_1>v-flxdU7j_}Bm+?O#h6Vq@G# z2CodIua?l34{8(5ed)&jmCU6@ZVcjcj*g#*p!C*`i9PsQH%bQj(aXcyyc35XiW}S) zbNy*8-dZ=7$J50lJn%>^jsJ>w;S6rWJIy=eL9(;ms|T$t`FNC3vsRFFwKHmv+8xU_ zOWvTiDx9@$^?sz^+8;ceaq|Zta?;8kKCWjEn1;VOK>Ll3EWKTL>73J%J>&%I)$Ia` z3Ms?e+(mpUA6s&+gkS2|YHqbF89BGvgyWVY}eK=>W1 z+6gv&kSU;~8b`N9@K1n(K(P4s2>rab7Erjtl*os=WOY;B7^)^H_liJ!&r+m;Q4{0O zcOs>UK-1a+M0{piq@2de+XHf?!5$Hg-RP0D#|4x)ZC_yR#_RhEiYl)&-i8~N+*)q6 zt@m05YlS29N_t>_SQdy+7wm)FO{KwT>^QEinfgWV6IuCFJpfUYYq>9?>u7RBTXJ?t zirwdtbD>O)c}nw6{iQ?Q1MyoPwT!^S-6)mc_KmjSRA;K6QY}CF=}A?_{}jd*?C$I8 z^*+_>?y7bDRpkD4_|muss+u;<_<+@io=Z8^um)K0zuHoXS~j3Ish+I24w1dqIWlY& zi9hw5}%TrvS>2-S^)_Nn7(RI;9B@{9O#fAD2F_m_z>n{@6UN diff --git a/F0-nolib/usbcdc/Makefile b/F0-nolib/usbcdc/Makefile index ddba4e5..881c852 100644 --- a/F0-nolib/usbcdc/Makefile +++ b/F0-nolib/usbcdc/Makefile @@ -11,7 +11,7 @@ DEFS += -DUSARTNUM=1 #DEFS += -DEBUG # change this linking script depending on particular MCU model, # for example, if you have STM32F103VBT6, you should write: -LDSCRIPT = ld/stm32f042k.ld +LDSCRIPT = stm32f042k.ld INDEPENDENT_HEADERS= diff --git a/F0-nolib/usbcdc/ld/stm32f042k.ld b/F0-nolib/usbcdc/ld/stm32f042k.ld deleted file mode 100644 index e747253..0000000 --- a/F0-nolib/usbcdc/ld/stm32f042k.ld +++ /dev/null @@ -1,12 +0,0 @@ -/* Linker script for STM32F042x6, 32K flash, 6K RAM. */ - -/* Define memory regions. */ -MEMORY -{ - rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K - ram (rwx) : ORIGIN = 0x20000000, LENGTH = 6K -} - -/* Include the common ld script. */ -INCLUDE stm32f0.ld - diff --git a/F0-nolib/usbcdc/usbcan.bin b/F0-nolib/usbcdc/usbcan.bin index 5f62f4919341406c807339bfc80f8a11cd8d463a..b8ecb64903edfb6fe0fafa7e2fbca6193bb1b73e 100755 GIT binary patch delta 488 zcmW-bPiPZS5XNWTHq9oMBublZYmrS}F8(P4jm6BM+z1)DBfXrzcm zyoq3a1S$l{As%{B=;B4J=HOAOtrxwipc_F!@URL=$9X>Z@iA|{Z)U0k)q(pj#87DU z<&_AgG1u$5<7?`iaU3mg)z}iJDgZWI1czP`K^~k0*V!!SXIo4sLt8{stZ49W5=?`& zll4Ovm^N#Msj2n$$&gMgs!({6#}~r=7`slN{O8LzW;;&8uX$3B%w&)D%p;f%Z`Ip| zhXM2zQ|hg`gq9kO989*64eq9PV$LeL6{AgWC($1AessOYeKQM-c5!;izB*T&zO-<8t~ld8>AoiZ0pyXN*8l(j delta 478 zcmW-bPe@cz6vn@E-;DES5N9eivw}Nw2@(+o8cB%oL7>H8P>A;Dg-V$Y#P}A0MH>qj zZGz%5I~TKQ;i}*fL}ksQc7b3mL=>dW8=>GrtC^v>-rIqXj}Ojwey3Wf7G8d0bBR}< z?@K?icmnEION%}aVsP?DR2$P@w9Wwhn%qkar=dQ!^1}C6@s#&B%E+wyCI(e*$)9e1 z>YauVK|MNBtmPn`Y)#Mz)Y0aO=$g2Vejv*@Dp1L0Rs7EtWE~DgO)|aj(RGV4+BMql zfxAv{&yc*8m!}g0z3LxFuwgf;*!L(HuZ`Kw za5d=?9mp4{lT?@MsY`Sa{z=Uc)x(L-G&6RmOAtHXkk8Ur*<3?zrQ2+v5pHEV;@t~N d4|#chnLj9%=kG4vE0q_3aJ%O#g>R1s>=4#8m~H?7 diff --git a/F1-nolib/led_blink/ld/stm32f103x4.ld b/F1-nolib/inc/ld/stm32f103x4.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103x4.ld rename to F1-nolib/inc/ld/stm32f103x4.ld diff --git a/F1-nolib/led_blink/ld/stm32f103x6.ld b/F1-nolib/inc/ld/stm32f103x6.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103x6.ld rename to F1-nolib/inc/ld/stm32f103x6.ld diff --git a/F1-nolib/led_blink/ld/stm32f103x8.ld b/F1-nolib/inc/ld/stm32f103x8.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103x8.ld rename to F1-nolib/inc/ld/stm32f103x8.ld diff --git a/F1-nolib/led_blink/ld/stm32f103xB.ld b/F1-nolib/inc/ld/stm32f103xB.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103xB.ld rename to F1-nolib/inc/ld/stm32f103xB.ld diff --git a/F1-nolib/led_blink/ld/stm32f103xC.ld b/F1-nolib/inc/ld/stm32f103xC.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103xC.ld rename to F1-nolib/inc/ld/stm32f103xC.ld diff --git a/F1-nolib/led_blink/ld/stm32f103xD.ld b/F1-nolib/inc/ld/stm32f103xD.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103xD.ld rename to F1-nolib/inc/ld/stm32f103xD.ld diff --git a/F1-nolib/led_blink/ld/stm32f103xE.ld b/F1-nolib/inc/ld/stm32f103xE.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103xE.ld rename to F1-nolib/inc/ld/stm32f103xE.ld diff --git a/F1-nolib/led_blink/ld/stm32f103xF.ld b/F1-nolib/inc/ld/stm32f103xF.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103xF.ld rename to F1-nolib/inc/ld/stm32f103xF.ld diff --git a/F1-nolib/led_blink/ld/stm32f103xG.ld b/F1-nolib/inc/ld/stm32f103xG.ld similarity index 100% rename from F1-nolib/led_blink/ld/stm32f103xG.ld rename to F1-nolib/inc/ld/stm32f103xG.ld diff --git a/F1-nolib/led_blink/Makefile b/F1-nolib/led_blink/Makefile index c1879da..c7d76c2 100644 --- a/F1-nolib/led_blink/Makefile +++ b/F1-nolib/led_blink/Makefile @@ -8,7 +8,7 @@ MCU ?= F103xB # density (stm32f10x.h, lines 70-84) DENSITY ?= MD # change this linking script depending on particular MCU model, -LDSCRIPT ?= ld/stm32f103xB.ld +LDSCRIPT ?= stm32f103xB.ld # debug DEFS = -DEBUG diff --git a/F1-nolib/led_blink/ld/devices.data b/F1-nolib/led_blink/ld/devices.data deleted file mode 100644 index 7f29538..0000000 --- a/F1-nolib/led_blink/ld/devices.data +++ /dev/null @@ -1,9 +0,0 @@ -stm32f103?4* stm32f1 ROM=16K RAM=6K -stm32f103?6* stm32f1 ROM=32K RAM=10K -stm32f103?8* stm32f1 ROM=64K RAM=20K -stm32f103?b* stm32f1 ROM=128K RAM=20K -stm32f103?c* stm32f1 ROM=256K RAM=48K -stm32f103?d* stm32f1 ROM=384K RAM=64K -stm32f103?e* stm32f1 ROM=512K RAM=64K -stm32f103?f* stm32f1 ROM=768K RAM=96K -stm32f103?g* stm32f1 ROM=1024K RAM=96K diff --git a/F1-nolib/uart/Makefile b/F1-nolib/uart/Makefile new file mode 100644 index 0000000..5cd1511 --- /dev/null +++ b/F1-nolib/uart/Makefile @@ -0,0 +1,137 @@ +BINARY = uart +BOOTPORT ?= /dev/ttyUSB0 +BOOTSPEED ?= 115200 +# MCU FAMILY +FAMILY ?= F1 +# MCU code +MCU ?= F103xB +# density (stm32f10x.h, lines 70-84) +DENSITY ?= MD +# change this linking script depending on particular MCU model, +LDSCRIPT ?= stm32f103xB.ld +# debug +DEFS = -DEBUG + +INDEPENDENT_HEADERS= + +FP_FLAGS ?= -msoft-float +ASM_FLAGS ?= -mthumb -mcpu=cortex-m3 +ARCH_FLAGS = $(ASM_FLAGS) $(FP_FLAGS) + +############################################################################### +# Executables +#PREFIX ?= arm-none-eabi +# gcc from arm web site +PREFIX ?= /opt/bin/arm-none-eabi +RM := rm -f +RMDIR := rmdir +CC := $(PREFIX)-gcc +# don't replace ld with gcc: the binary size would be much greater!! +LD := $(PREFIX)-ld +AR := $(PREFIX)-ar +AS := $(PREFIX)-as +SIZE := $(PREFIX)-size +OBJCOPY := $(PREFIX)-objcopy +OBJDUMP := $(PREFIX)-objdump +GDB := $(PREFIX)-gdb +STFLASH := $(shell which st-flash) +STBOOT := $(shell which stm32flash) +DFUUTIL := $(shell which dfu-util) + +############################################################################### +# Source files +OBJDIR = mk +SRC := $(wildcard *.c) +OBJS := $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o)) +STARTUP = $(OBJDIR)/startup.o +OBJS += $(STARTUP) +# dependencies: we need them to recompile files if their headers-dependencies changed +DEPS := $(OBJS:.o=.d) + +INC_DIR ?= ../inc + +INCLUDE := -I$(INC_DIR)/Fx -I$(INC_DIR)/cm +LIB_DIR := $(INC_DIR)/ld + +############################################################################### +# C flags +CFLAGS += -O2 -g -D__thumb2__=1 -MD +CFLAGS += -Wall -Werror -Wextra -Wshadow +CFLAGS += -fno-common -ffunction-sections -fdata-sections + +############################################################################### +# Linker flags +LDFLAGS += -nostartfiles --static +LDFLAGS += -L$(LIB_DIR) +LDFLAGS += -T$(LDSCRIPT) + +############################################################################### +# Used libraries +LDLIBS += $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) + +DEFS += -DSTM32$(FAMILY) -DSTM32$(MCU) -DSTM32F10X_$(DENSITY) + +ELF := $(OBJDIR)/$(BINARY).elf +LIST := $(OBJDIR)/$(BINARY).list +BIN := $(BINARY).bin +HEX := $(BINARY).hex + +all: bin list size + +elf: $(ELF) +bin: $(BIN) +hex: $(HEX) +list: $(LIST) + +ifneq ($(MAKECMDGOALS),clean) +-include $(DEPS) +endif + +$(OBJDIR): + mkdir $(OBJDIR) + +$(STARTUP): $(INC_DIR)/startup/vector.c + $(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -o $@ -c $< + +$(OBJDIR)/%.o: %.c + @echo " CC $<" + $(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -o $@ -c $< + +$(BIN): $(ELF) + @echo " OBJCOPY $(BIN)" + $(OBJCOPY) -Obinary $(ELF) $(BIN) + +$(HEX): $(ELF) + @echo " OBJCOPY $(HEX)" + $(OBJCOPY) -Oihex $(ELF) $(HEX) + +$(LIST): $(ELF) + @echo " OBJDUMP $(LIST)" + $(OBJDUMP) -S $(ELF) > $(LIST) + +$(ELF): $(OBJDIR) $(OBJS) + @echo " LD $(ELF)" + $(LD) $(LDFLAGS) $(OBJS) $(LDLIBS) -o $(ELF) + +size: $(ELF) + $(SIZE) $(ELF) + +clean: + @echo " CLEAN" + $(RM) $(OBJS) $(DEPS) $(ELF) $(HEX) $(LIST) + @rmdir $(OBJDIR) 2>/dev/null || true + + +flash: $(BIN) + @echo " FLASH $(BIN)" + $(STFLASH) write $(BIN) 0x8000000 + +boot: $(BIN) + @echo " LOAD $(BIN) through bootloader" + $(STBOOT) -b$(BOOTSPEED) $(BOOTPORT) -w $(BIN) + +dfuboot: $(BIN) + @echo " LOAD $(BIN) THROUGH DFU" + $(DFUUTIL) -a0 -D $(BIN) -s 0x08000000 + +.PHONY: clean flash boot diff --git a/F1-nolib/uart/README b/F1-nolib/uart/README new file mode 100644 index 0000000..35bb182 --- /dev/null +++ b/F1-nolib/uart/README @@ -0,0 +1,5 @@ +Toggle LEDs (PB8/PB9) on STM32F103 development board depending on buttons PC0,PC1: +- no buttons pressed == 'SOS' in Morze @ LED D1 +- Button S2 pressed - D1 blinks with period of 5s +- Button S1 pressed - D2 blinks with period of 1s + diff --git a/F1-nolib/uart/main.c b/F1-nolib/uart/main.c new file mode 100644 index 0000000..6132830 --- /dev/null +++ b/F1-nolib/uart/main.c @@ -0,0 +1,131 @@ +/* + * main.c + * + * Copyright 2018 Edward V. Emelianov + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include "stm32f1.h" +#include "usart.h" + +static volatile uint32_t Tms = 0; // milliseconds from last reset + +// Called when systick fires +void sys_tick_handler(void){ + ++Tms; +} + +// setup +static void gpio_setup(void){ + // Enable clocks to the GPIO subsystems + RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_IOPCEN; + // Set leds (PB8/PB9) as opendrain output + GPIOB->CRH = CRH(8, CNF_ODOUTPUT|MODE_SLOW) | CRH(9, CNF_ODOUTPUT|MODE_SLOW); + // Set buttons (PC0/1) as inputs with weak pullups + GPIOC->ODR = 3; // pullups for PC0/1 + GPIOC->CRL = CRL(0, CNF_PUDINPUT|MODE_INPUT) | CRL(1, CNF_PUDINPUT|MODE_INPUT); +} + +int main(){ + int L; + char *txt; + sysreset(); + StartHSE(); + gpio_setup(); + usart_setup(); + uint32_t Told = 0; + SysTick_Config(72000); // interrupt each ms + SEND("Greetings!"); newline(); + pin_set(GPIOB, 3<<8); // turn off LEDs + /* Do nothing in main loop */ + while (1){ + if(Tms - Told > 499){ // blink LED1 every 1 second + pin_toggle(GPIOB, 1<<9); + Told = Tms; + transmit_tbuf(); + } + if(usartrx()){ // usart1 received data, store in in buffer + L = usart_getline(&txt); + char _1st = txt[0]; + if(L == 2 && txt[1] == '\n'){ + L = 0; + switch(_1st){ + case '0': // turn off LED2 + SEND("LED2 off"); + pin_set(GPIOB, 1<<8); + newline(); + break; + case '1': // turn it on + SEND("LED2 on"); + pin_clear(GPIOB, 1<<8); + newline(); + break; + case 's': + case 'S': + SEND("LED2 state: "); + if(pin_read(GPIOB, 1<<8)) SEND("off"); + else SEND("on"); + newline(); + break; + default: // help + SEND( + "'0' - turn off LED2\n" + "'1' - turn on LED2\n" + "'s' - test LED2 state\n" + ); + break; + } + } + transmit_tbuf(); + } + if(L){ // echo all other data + txt[L] = 0; + usart_send(txt); + transmit_tbuf(); + L = 0; + } + + /* + uint8_t + if(pin_read(GPIOC, 1) && pin_read(GPIOC, 2)){ // no buttons present - morze @ LED1 (PB9) + if(oldctr != blink_ctr){ + uint32_t T = blink_ctr % 18; + systick_setup(L[T]); + if(T & 1) pin_set(GPIOB, 1<<9); + else pin_clear(GPIOB, 1<<9); + oldctr = blink_ctr; + } + }else{ // button pressed: turn ON given LED + if(pin_read(GPIOC, 1) == 0){ // PC0 pressed (button S2) + systick_setup(5); + if(blink_ctr - oldctr > 499){ + pin_toggle(GPIOB, 1<<9); + oldctr = blink_ctr; + } + }else pin_set(GPIOB, 1<<9); + if(pin_read(GPIOC, 2) == 0){ // PC1 pressed (button S3) + systick_setup(1); + if(blink_ctr - oldctr > 499){ + pin_toggle(GPIOB, 1<<8); + oldctr = blink_ctr; + } + }else pin_set(GPIOB, 1<<8); + + }*/ + } +} + diff --git a/F1-nolib/uart/uart.bin b/F1-nolib/uart/uart.bin new file mode 100755 index 0000000000000000000000000000000000000000..1b5a8ce86ceebe257cf31e6d19f3301ab610231a GIT binary patch literal 2032 zcmc&!?N3u@6hF_sEwrV;Eybi1rk551vAR^zxa=jCTUz?Un}RQ6UoP8Vmt?~`z>OFa z0jI&SEIM4~TV+qaFdq-C-giJ{XaWx*vEEcO92x^pXL#{B`_Kz$kOqL? z{+Ch-d~JM7daVL2r-P>hc~b94xk5;u_@*Q*XCF1V8bzzrgWn0-+hmZGkpa7OfqgW4Bxse+v7T8u07WLr;w@J= zViHYKp~9wQxx%1qlo~gHmEKl$Tl{#ADuwt0O6;I?w_8PWUW+|Q+1Sdl6J&syVWo@Y z(JT}m3^rnIo5JFqFh^lfl5@|-YG&LLs~B0GBOdAFTZ-8tzrQNb-#SklzHuuSw!dkL zYU*x@oCr$ws#2V8gAz|r@Oyj*y@$mfYOkyCT@tP6HLQZNYqd7+>Tp$+SI<*R58~Vu z<(zhDE`Mxg?L@(hLjp%4EO|lcp-gG7myf_;W0zs8Eey(e3N{#Isey+JpxmdR^wX!A z_kMdQ-Erq@m^iev3Urv=Wlbd#D97k*43v-Q4@;0eADN2fckOWSVdHJ5qcl?J1La3r z8}IHYYXT*P_1>X3V)YIZ?r`KqtmwT?$D}!JRmkGY!_&7IaSKsLhhr|h;bmH@Jjwk9 ztsXiU^P%-C)c4XaW56*kfFy;#AqqU|9C2|`i0;iJAmgs7T(TgJqka}Kgt&qLBXRYi zyo%5x_kuU{0d8FH&z1B6jhG>F5_c21XxI47qQ#q$;w3IHFKyH_qLjxs1vmLgl)T1- z4H9f!3!7`q!QE0lEq1}Syf8AC;e2jd%)_FG&%B%E*HmznIMRckc5h_$<)p364hat< z6KkhdKG5$LWwmQj9Ps1c*8pFjN(8(@T=GOlbw-s#O7k{QJ3qPtC-h-m0CkR8bla*6 z4mMOE59G;YVl?THmSWH5vt8yf+^KS|M&sqG%OtKAmXnsu=mE@5$82ALhuR^Rl8m|r zTi5>ULmpiieW@-FBFV&=WSO)On_N(OLv`l+HZ0}=Sn6%3d!S8SR4PM#kKrl zk+5t8Qy`~$pw%7kcDofVJJ6IJyu5N)XcJG;Vsmbf$!iRr?Rh$j{WuG-$v1gk7u5Q# z-51X=?u$LX)a+C5tRpV?1K(Ml56&YmXzlwV?d4fz+)`!n+oZw1eH5uXx}`MzE-3 l(e^eqgIB{1B|HAJwQZO>Ql{pP&eWMtRWe{5XBPlL`7aUva#{cY literal 0 HcmV?d00001 diff --git a/F1-nolib/uart/usart.c b/F1-nolib/uart/usart.c new file mode 100644 index 0000000..25f41ea --- /dev/null +++ b/F1-nolib/uart/usart.c @@ -0,0 +1,242 @@ +/* + * usart.c + * + * Copyright 2018 Edward V. Emelianoff + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ +#include "stm32f1.h" +#include "usart.h" + +extern volatile uint32_t Tms; +static volatile int idatalen[2] = {0,0}; // received data line length (including '\n') +static volatile int odatalen[2] = {0,0}; + +volatile int linerdy = 0, // received data ready + dlen = 0, // length of data (including '\n') in current buffer + bufovr = 0, // input buffer overfull + txrdy = 1 // transmission done +; + + +int rbufno = 0, tbufno = 0; // current rbuf/tbuf numbers +static char rbuf[2][UARTBUFSZI], tbuf[2][UARTBUFSZO]; // receive & transmit buffers +static char *recvdata = NULL; + +/** + * return length of received data (without trailing zero) + */ +int usart_getline(char **line){ + if(bufovr){ + bufovr = 0; + linerdy = 0; + return 0; + } + *line = recvdata; + linerdy = 0; + return dlen; +} + +// transmit current tbuf and swap buffers +void transmit_tbuf(){ + uint32_t tmout = 16000000; + while(!txrdy){if(--tmout == 0) break;}; // wait for previos buffer transmission + register int l = odatalen[tbufno]; + if(!l) return; +//txrdy = 0; + odatalen[tbufno] = 0; + char *buf = tbuf[tbufno]; + for(int i = 0; i < l; ++i){ + USART1->DR = *buf++; + tmout = 16000000; + while(!(USART1->SR & USART_SR_TXE)){if(--tmout == 0)break;}; + } + /* +#if USARTNUM == 2 + DMA1_Channel4->CCR &= ~DMA_CCR_EN; + DMA1_Channel4->CMAR = (uint32_t) tbuf[tbufno]; // mem + DMA1_Channel4->CNDTR = l; + DMA1_Channel4->CCR |= DMA_CCR_EN; // start transmission +#elif USARTNUM == 1 + DMA1_Channel2->CCR &= ~DMA_CCR_EN; + DMA1_Channel2->CMAR = (uint32_t) tbuf[tbufno]; // mem + DMA1_Channel2->CNDTR = l; + DMA1_Channel2->CCR |= DMA_CCR_EN; +#else +#error "Not implemented" +#endif +*/ + tbufno = !tbufno; +} + +void usart_putchar(const char ch){ + if(odatalen[tbufno] == UARTBUFSZO) transmit_tbuf(); + tbuf[tbufno][odatalen[tbufno]++] = ch; +} + +void usart_send(const char *str){ + uint32_t x = 512; + while(*str && --x){ + if(odatalen[tbufno] == UARTBUFSZO) transmit_tbuf(); + tbuf[tbufno][odatalen[tbufno]++] = *str++; + } +} + +void newline(){ + usart_putchar('\n'); + transmit_tbuf(); +} + + +/* + * USART speed: baudrate = Fck/(USARTDIV) + * USARTDIV stored in USART->BRR + * + * for 72MHz USARTDIV=72000/f(kboud); so for 115200 USARTDIV=72000/115.2=625 -> BRR=0x271 + * 9600: BRR = 7500 (0x1D4C) + */ + +void usart_setup(){ + uint32_t tmout = 16000000; + // PA9 - Tx, PA10 - Rx + RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN | RCC_APB2ENR_AFIOEN; + GPIOA->CRH = CRH(9, CNF_AFPP|MODE_NORMAL) | CRH(10, CNF_FLINPUT|MODE_INPUT); +/* + // USART1 Tx DMA - Channel2 (default value in SYSCFG_CFGR1) + DMA1_Channel2->CPAR = (uint32_t) &USART1->TDR; // periph + DMA1_Channel2->CMAR = (uint32_t) tbuf; // mem + DMA1_Channel2->CCR |= DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE; // 8bit, mem++, mem->per, transcompl irq + // Tx CNDTR set @ each transmission due to data size + NVIC_SetPriority(DMA1_Channel2_3_IRQn, 3); + NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);*/ + //USART1->CR3 = USART_CR3_DMAT; // enable DMA Tx + NVIC_SetPriority(USART1_IRQn, 0); + // setup usart1 + USART1->BRR = 72000000 / 115200; + USART1->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_UE; // 1start,8data,nstop; enable Rx,Tx,USART + while(!(USART1->SR & USART_SR_TC)){if(--tmout == 0) break;} // polling idle frame Transmission + USART1->SR = 0; // clear flags + USART1->CR1 |= USART_CR1_RXNEIE; // allow Rx IRQ + NVIC_EnableIRQ(USART1_IRQn); +} + + +void usart1_isr(){ + #ifdef CHECK_TMOUT + static uint32_t tmout = 0; + #endif + if(USART1->SR & USART_SR_RXNE){ // RX not emty - receive next char + #ifdef CHECK_TMOUT + if(tmout && Tms >= tmout){ // set overflow flag + bufovr = 1; + idatalen[rbufno] = 0; + } + tmout = Tms + TIMEOUT_MS; + if(!tmout) tmout = 1; // prevent 0 + #endif + uint8_t rb = USART1->DR; + if(idatalen[rbufno] < UARTBUFSZI){ // put next char into buf + rbuf[rbufno][idatalen[rbufno]++] = rb; + if(rb == '\n'){ // got newline - line ready + linerdy = 1; + dlen = idatalen[rbufno]; + recvdata = rbuf[rbufno]; + // prepare other buffer + rbufno = !rbufno; + idatalen[rbufno] = 0; + #ifdef CHECK_TMOUT + // clear timeout at line end + tmout = 0; + #endif + } + }else{ // buffer overrun + bufovr = 1; + idatalen[rbufno] = 0; + #ifdef CHECK_TMOUT + tmout = 0; + #endif + } + } +} + +// print 32bit unsigned int +void printu(uint32_t val){ + char bufa[11], bufb[10]; + int l = 0, bpos = 0; + if(!val){ + bufa[0] = '0'; + l = 1; + }else{ + while(val){ + bufb[l++] = val % 10 + '0'; + val /= 10; + } + int i; + bpos += l; + for(i = 0; i < l; ++i){ + bufa[--bpos] = bufb[i]; + } + } + bufa[l + bpos] = 0; + usart_send(bufa); +} + +// print 32bit unsigned int as hex +void printuhex(uint32_t val){ + usart_send("0x"); + uint8_t *ptr = (uint8_t*)&val + 3; + int i, j; + for(i = 0; i < 4; ++i, --ptr){ + for(j = 1; j > -1; --j){ + register uint8_t half = (*ptr >> (4*j)) & 0x0f; + if(half < 10) usart_putchar(half + '0'); + else usart_putchar(half - 10 + 'a'); + } + } +} + +// dump memory buffer +void hexdump(uint8_t *arr, uint16_t len){ + for(uint16_t l = 0; l < len; ++l, ++arr){ + for(int16_t j = 1; j > -1; --j){ + register uint8_t half = (*arr >> (4*j)) & 0x0f; + if(half < 10) usart_putchar(half + '0'); + else usart_putchar(half - 10 + 'a'); + } + if(l % 16 == 15) usart_putchar('\n'); + else if(l & 1) usart_putchar(' '); + } +} +/* +#if USARTNUM == 2 +void dma1_channel4_5_isr(){ + if(DMA1->ISR & DMA_ISR_TCIF4){ // Tx + DMA1->IFCR |= DMA_IFCR_CTCIF4; // clear TC flag + txrdy = 1; + } +} +// USART1 +#elif USARTNUM == 1 +void dma1_channel2_3_isr(){ + if(DMA1->ISR & DMA_ISR_TCIF2){ // Tx + DMA1->IFCR |= DMA_IFCR_CTCIF2; // clear TC flag + txrdy = 1; + } +} +#else +#error "Not implemented" +#endif +*/ diff --git a/F1-nolib/uart/usart.h b/F1-nolib/uart/usart.h new file mode 100644 index 0000000..3ade072 --- /dev/null +++ b/F1-nolib/uart/usart.h @@ -0,0 +1,58 @@ +/* + * usart.h + * + * Copyright 2018 Edward V. Emelianoff + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#pragma once +#ifndef __USART_H__ +#define __USART_H__ + +// input and output buffers size +#define UARTBUFSZI (32) +#define UARTBUFSZO (512) +// timeout between data bytes +#ifndef TIMEOUT_MS +#define TIMEOUT_MS (1500) +#endif + +// macro for static strings +#define SEND(str) usart_send(str) + +#ifdef EBUG +#define MSG(str) do{SEND(__FILE__ " (L" STR(__LINE__) "): " str);}while(0) +#else +#define MSG(str) +#endif + +#define usartrx() (linerdy) +#define usartovr() (bufovr) + +extern volatile int linerdy, bufovr, txrdy; + +void transmit_tbuf(); +void usart_setup(); +int usart_getline(char **line); +void usart_send(const char *str); +void newline(); +void usart_putchar(const char ch); +void printu(uint32_t val); +void printuhex(uint32_t val); +void hexdump(uint8_t *arr, uint16_t len); + +#endif // __USART_H__ diff --git a/F1/client-term/client.c b/F1/client-term/client.c index 5f565e0..5ee52be 100644 --- a/F1/client-term/client.c +++ b/F1/client-term/client.c @@ -36,7 +36,7 @@ double t0; // start time FILE *fout = NULL; // file for messages duplicating -char *comdev = "/dev/ttyACM0"; +char *comdev = "/dev/ttyUSB0"; int BAUD_RATE = B115200; struct termio oldtty, tty; // TTY flags struct termios oldt, newt; // terminal flags