From a78d7242174a8459c652656ff03fc8e882642376 Mon Sep 17 00:00:00 2001 From: SEEKFREE_BUDING <2289331269@qq.com> Date: Sat, 8 Apr 2023 18:29:43 +0800 Subject: [PATCH] =?UTF-8?q?V3.1.6=20=20=20=20=20=20=20=20=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9GPS=E4=BD=BF=E7=94=A8=E4=B8=B2=E5=8F=A3=E5=8F=B7?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96GPS=E8=AE=A1=E7=AE=97=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=20=20=20=20=20=20=20=20=20isr.c=E4=B8=AD=E7=A7=BB?= =?UTF-8?q?=E9=99=A4CCD=E9=87=87=E9=9B=86=E5=87=BD=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E6=9C=89=E9=9C=80=E8=A6=81=E5=8F=AF=E4=BB=A5=E8=87=AA=E8=A1=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=20=20=20=20=20=20=20=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=8C=89=E9=94=AE=E9=A9=B1=E5=8A=A8=E6=96=87=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E6=8C=89=E9=94=AE=E7=AB=AF=E5=8F=A3=E5=8F=B7=EF=BC=8C=E9=80=82?= =?UTF-8?q?=E9=85=8DV2.6=E4=B8=BB=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../E01_gpio_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E01_gpio_demo/user/isr.c | 9 +- .../E02_uart_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E02_uart_demo/user/isr.c | 20 ++-- .../E03_adc_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E03_adc_demo/user/isr.c | 9 +- .../E04_pwm_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E04_pwm_demo/user/isr.c | 9 +- .../E05_pit_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E05_pit_demo/user/isr.c | 16 +-- .../E06_exit_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E06_exit_demo/user/isr.c | 41 ++++++- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E07_encoder_demo/user/isr.c | 16 +-- .../.settings/org.eclipse.cdt.core.prefs | 6 + .../E08_eeprom_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E08_eeprom_demo/user/cpu0_main.c | 8 +- Example/E08_eeprom_demo/user/isr.c | 9 +- .../E09_timer_demo/libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E09_timer_demo/user/isr.c | 9 +- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E10_printf_debug_log_demo/user/isr.c | 9 +- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- .../user/isr.c | 9 +- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- .../user/isr.c | 17 +-- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E13_dual_core_demo/user/isr.c | 9 +- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- .../user/isr.c | 9 +- .../E15_fft_demo/libraries/doc/version.txt | 4 + .../libraries/zf_common/zf_common_clock.c | 22 +++- .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- Example/E15_fft_demo/user/isr.c | 9 +- .../libraries/doc/version.txt | 4 + .../libraries/zf_device/zf_device_config.a | Bin 38970 -> 38924 bytes .../zf_device/zf_device_gps_tau1201.c | 97 ++++++++-------- .../zf_device/zf_device_gps_tau1201.h | 6 +- .../libraries/zf_device/zf_device_imu963ra.h | 4 +- .../libraries/zf_device/zf_device_key.c | 108 ++++++++---------- .../libraries/zf_device/zf_device_key.h | 30 +++-- .../libraries/zf_device/zf_device_tsl1401.h | 2 +- .../libraries/zf_device/zf_device_type.h | 4 +- .../libraries/zf_driver/zf_driver_delay.c | 24 +++- .../libraries/zf_driver/zf_driver_delay.h | 9 +- .../user/cpu0_main.c | 1 - Seekfree_TC264_Opensource_Library/user/isr.c | 10 +- 196 files changed, 2500 insertions(+), 2355 deletions(-) create mode 100644 Example/E08_eeprom_demo/.settings/org.eclipse.cdt.core.prefs diff --git a/Example/E01_gpio_demo/libraries/doc/version.txt b/Example/E01_gpio_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E01_gpio_demo/libraries/doc/version.txt +++ b/Example/E01_gpio_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_config.a b/Example/E01_gpio_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 zcmbta3viXkb>6)Xy^ugiLK1p$g@pA0j2>7BgoD76EI@!PV_P8LO6Y+V>j8Rz0GX>` z0+?V2SmSX>(-LYslweBcdORMFlyC6DYd0AOiRh7?IS$$tswFvMcemVF({&a#^ zp18?0iSw#z`{CnPY|K?tTk-Zm4{5H2{`XQ@O>+6ouY6QfhWqszplRmESxXWg zKl`H#zZ16;5AgTIfu#RUy>W0BO&v^gy(IfW*T>@c^zWv=H#AXmBC*yPtvL(n<6!NK zmwBKR=$LHW(C)<*r{odH?o=9O>;Nt;A11kzMj1PSOOKy12FbHxyq31963cUp~aZkCjLI9AaK+e zIc3OyZO9i4`Bg){V#wDF`MM#0V#t3ofX@{k|F;<2iar~9i!2%j*$*1;)|+M zo+IWg$y}ck6`nIhCCfZlaZBQ!CY024zrS;^t9$3j5JM>IG2)%5Jx?pWy@E~ah91k^ z;_FK;q>TYM(9^raKRhxt+Bw4b4A-bwR-H8?!zEWM7l{W}u%r4PI6o(fmKCO+<8;Vn z^K2jO>0ub(wk#|CMV_h0WBNPB{5?C7jhDo;%hLN_<}*T5!`&lr+Q<0!3_J}E4ep`A zc_C!qkbjWq&l|weEZYhiKG=(M7nsxz@a-xw&^id>rNqBqCEG7D&w*qj|ETxiAj=7;|s|ZHz$|4WbW( zp>Pv@G(?~sIpGz^B@i{aaI{L&z>-Vc2$~kiy|dzD2;;$UocQ!BMR{t#n?f-Io=@;L z6;g>PUs0MkJC>-toG@a?io8G}k$|#BQpU?w`eUUsB=0+%ISOWa)LFS;IZHvUkw%3o z;K^CxxhZ65J6+(c4o-=-QQotO*2BH=&c3;0AiDQ)?;N>_vqf`lNnnUDm^jF#$yOQj z^IUdwF+_98a%!Ek%mV6=E=TL3+#w$iOM^Kyg%H0+_Oz>Nz`+hmns^FyfP1Cmj7{A8 zl)Y}I=HkjQ=DLS})gvLqQq zi7YHQY84+nu!^^expm*>bHrP9`H*ka<*gW@0FcV#PIkWKbYs%^q?4o*PWPNM<(%cs z67Vf9meel-(~kNg&crkIvpsL(-5^%Br{Ur7qxzYgKPP_PkjtM7e%4UMx1Poh-lO7M zD~n@3ts8Zp>E6q|RTK+iZI%h6V&&cnn#DJ=QwG_Tvo#8yFJoC9JlN>tJP3d3 znRp>E9&}ggCz!{17X*VpUyag!HJG)PE7tY@$L|1o6BAAuu~1^#G)-RVp>~#+CVS8 zFzGGL_&)hn>vf;noR{)88Tc3*h4D{G&W3TR*s}Sjar@;5tk*3Twrz7=)oj`QBTILe zRgU?0`?vRX3_QX30s7=&UVO5N#w~d%KO`0(V~=9sCnV<*W2`G4a)>2EvplX@0+K~^ zZJm23L!ON3>ejiz-){XU&d05VcTZM(cCVcHHlL+f#$C9akQw+3c)V~VY>$o`clSnRH?Bv)dkbmzC<1QNw zYkwraK^)R|3q1+MZ`!A2I1z5rCY)`O7N+jJ`m$o5*PDwiQP=*U@U5>6*{Hh~w z+7?QV#BUSt*JlK?ws*y+(z-mDV5!OJS?<(h$(}92lTZ8)_f%AsR|JptpY!DR!ezMK zy#2JLpA&6E+4!QrdHX|S#?5B3I3iZf%~Dxugg%S4M(7#rNQ6F{{au8f#XgA8v)OcH zK(zpKvs|_;JOF(T>x$5Q>|}(V&t8wv=dzC?^a7TI?C9oZg=}_&eh(`O=~%y;6{27T>(+wmN!L$Fvg)zsdxAB4yLhU8WA}zXCB%#SO7r!&{vNou zvu~7sh`3iz1V7sM9WML_;-;CVUmLHdu~=m$E{$iBE7<`AC#)Sd|p4uzG#VVO}jk_bjrHs88z$`^rOh~kd z2o*_d4P)(c*12iIP=E^eI&ib}X#`Z`&S2im%(Vv`Kjb$sUlEhz%K%CvMR*;+S~X9d zCj7odm{aGZm3aylp~F;o2p{5<%nHdL;{J3fT$fj&o zYUJ2a0H>0fvzicAh*dV?vomuMxcAjOblZ|Q?$(FC>&t2X>R*8Ee4M4iSIE7Ds?9_lz;UIt_9Fc zjV81+lZ>bUm4x~ivuK&=0`AXdhWwufkb2#;V>>fxkA|NMTNF52W~zakO3gF_Cx6DU49r}w{Hl`6u20q~uO2pz><@!8E` z$Gwv{z6M-W$I36hza8s80yq`NSMhtVUUA_=Xie8s8P* zo>KGj+~19`4*z1Hzx75ZA^a3L`Zp5Y?#9>Ej(_FAuL>049tD=?-%epMN_i?PZU;`U zc&{Riw&F41^gD!LMu35cJ$@HJ{pGWN62i}cJD}z*!U(>dJMceI!5gjkNrUefx(M}i zw+?4$aTLN3P^EVaxa26fpIOCv6gZukiD-@$-`T(v2`?Lj2PYwX2e{%X1o*k)3s7nf zO+py=)#%65UU4CCdc}t);ad)zk-P76aQ;JktOkz* zSgmC0bhUd_!)(#QzH4~`$rM}VTy!lPlQwbO@r`b@WeWL9CZtT dOQZc&O)un+z(JO-`~)abEQTW#$*92F0qYM0Yi`+fJlH@S1?k$-wm-h1Ej z`+oPk_q+GadoO$YEwA)j4yKgl=1t4bnVvV*>&^C3lh0o7lh)GdF~%Yp;|qp5 z;CNTEyRo@?T^(!it!=7qxtraqT@SUtm0{l3l++43WC-2t0Y^dZ}{MEn?{yKYneej)kBbp13v&EJHSRa#FfY)Zs>JO~bQaE$!8$CACER%ef z6Io&Wl&{ZyQkXsE>)Wnr5#+m&GCiu{`1vzm!kaN&{4&gm{kQ9#9yhsq5-q31b&Tab zSQ>Z2b-As(@Lrsx>`Tb-_ehrgl6+i}&q(sil6*mueI^jY-w!iU^aWellLa)r{UxLG5*th62^;WTf4Eop7GOso?)?*5P?&)!MC=th4CkO zvf+wouI}{JZ)j)yDak0HTF+Mqb%HkOb zxv^Ha!LtP;lAq&=LA0oxPZa5S_+vqmr(X&a$%qoY2+@U=d?3(RIGgi(;Mp0imW)XF zx^yZmE{ft$z^bBg{zPt{?65IwGq-2rmD_VjbLrL=vRcqO8P8T8u2ICGk2E_W?cAR3 zh(ygTqNDWabfIZB@>{u|+sQcy#LlrB85l(gS;&T0#7mUsRwbUeh|?{G7pmnz{cY}O zyCXs%(j4)y^R}#XLr-u-iJotwo>y@DEp(j-zrJmJjAIzF;xG{dyg1#TL>yLbpD229 zh%wC?CX{k%v!%aQok|(PrvZR%#jshqDRoA(!#r0^yB3A zsh9!IgD{TN2V)my#hFT_D%?ytcA-MUL4AZH1|w*Lkd_L*SstDWn`WgA4@G3an{kgBfJJjX zmH``dEguD!s)xbexu5f+uxVbJ^{BN39$k_Wcwt@&pL7h1oUEsvg;#E$fPK);h_Y_x zb}yxfqr63=k_7*{JvA|w=5U7YpuNTIg@Lj2y*%=)Ropx|oG43loweo|$=I}e>)F7j zJ4$)ftJq}>b;9Aw(nR=l!QZWWcr3*v?BUbo7{>R!SUQpO-GNDqnm9iKkCvrmAK|kM zjJVO0B5w9m7=M`SkA}KwDw+a+Eo&rQhMN z%5RrF#QzJ|OLP3)d>FISZy2-w0~dXl7`nFcXyN0Xh-O4g8tw(EHSLYb+HS}}G;JJh zS>_46wuzRJj0gS(+IzUsLmyJ<+fwhMQpC8a1fq{EdLOikjb$x*L4(}O43Xy&5xvaX zC^jhiK$j09;VUH95TT6-;l%PM;K0h^uwqMGH20^Wmk}R)c-Ijn^f0U@!)Lf`*?W}XPmP&0wSzy9zx3i)qT)v#Qq%--@$obQbZZf#bq13 z?sLO+--I~ATiEV+y5c7OaYIruO+ArY*r866FAH`b(lUBT;>?Ez(FkF5O7icB1iGp+ z*J#PDG=Q9~G;k;yRwKCtWK9yxtGsv_qlvfRMWb0|1aP*BXf6Y<&g8xDX=MsjHAG}p zV7EH7Vh~zE&_800IID<4#LduBos>Tbhd&<=97Q=^HfW*|Wn7KSI?#O?V>zn~yjFd` z!$s3%LnCv=C#6_jyW?#QfrWSfjoYT=e8O_R4*efA=D!U${r?HVZXGXKKQ7kV+_p-VW z{U+8MqWed)$3qMm>`I6}hJ75O-^{)U(X$l%SOq^`!B1fSkmLPqqCzlPA()~NObsPq z)0FsJB|cAy&ku?BTUnt(P^1tPD+Dt`2&}9`iJzmy&r{-Wm*f5Ta(;(Guuvgbq!5(J z1Q@?qiC?P3mn-qhrFeX6wz3rp!AgZ-l|ryuBB1y+N_>?PzgF?r4EnKuB&bsW^@9N6 zZ&3V=ivMoK-=z3kn4NAqdb6_Dpicc`0`~+Bn%=JH8x?(%qHk98`xSjFiw{Y_Z|I_b zOrYB^h#ak~N6~u~eW#-LDf(_j->c~RbY1Ho6F9)qLNYwWG9*17)1pr$Mk9T-uG396 zfq7VmuG9Oh6K_QKDfnHwP8TN|%?^-IgokFhi5-yu33%swUe^~RCV{1jTRV#MAr$pA z_7@w}ZyN2WB^x#l+d5rva?>ZX)@g>|xgjWN0_nzGly29JioY@NW@jz8i%+RA%LJrhr?#hZJ^*j@X7FWZ*kp?mwdk|AL-cd@mAwZu%B2dm0Rn zbG+`sFV|k8YJy`sJ?=`~N)~EOIrw-6SB|)x73iU%8to&vhWHi*|4lAq&%vx+F6TDI z^B5HElK9a}?Y-&vIS}3eGyZ*u5Ay5y?n1_@h~FLL*FB%0CksB^>>I#bO7`uHB~yS?9m;%YejvOI<%o}g zZGGWosDjrJucjJ#$Bj~5iJs-ub66Sr(L=+gX`t^I)JRuze-&{e_aZg-0f_;tEt**w zK0%zFMiW+ws|yB8LBCPd%u3O@kg zB;rS#mf~%=hIq9UePuV=5m(XEWLk>y9}JcPD=!*NgIbCz#F>|(Q)0l`4l<}aq8D-B zi5%2j(Tl(T#;(9Q4Kk?XOI&iJrB;WYMa1n?cg0Jvb)P3}Q@oCN^G)#qTtd8>`)7#% zt>9O4e+km|hgTwU8DmojA9iobM-M*7;DS^$ol%ZC;n-@`}M2~rv z&p^?k@GL*V$sT8#rTs4azq)CbZ==V^vT=wk|A{#BEHm&!j^GaaMZXFY9}Lejd9}fG zO8LEMr%j3%LWfgjiHQ6dj_&VFT? zJOhh<=n2DLydi!7j+x-UMEqFdPf+<2*TYvoObYAZmi79&4NGV~6g?E4P!;0M2e1M5 znc(|wi2o6MEaUa5>qmT^>C{~{GA&YvX1jZEY3wsAi$3`y5hwO&zRHj%F&vN>-onUX lnl4`L7Q>|@p0OXI6<2}&U4gOMdl{?JmxXwS#)x=4{s-FKbTR+{ diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E01_gpio_demo/user/isr.c b/Example/E01_gpio_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E01_gpio_demo/user/isr.c +++ b/Example/E01_gpio_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E02_uart_demo/libraries/doc/version.txt b/Example/E02_uart_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E02_uart_demo/libraries/doc/version.txt +++ b/Example/E02_uart_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_config.a b/Example/E02_uart_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E02_uart_demo/user/isr.c b/Example/E02_uart_demo/user/isr.c index ca997fd..1137b90 100644 --- a/Example/E02_uart_demo/user/isr.c +++ b/Example/E02_uart_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -175,7 +168,16 @@ IFX_INTERRUPT(uart0_tx_isr, 0, UART0_TX_INT_PRIO) } - +//IFX_INTERRUPT(uart0_rx_isr, 0, UART0_RX_INT_PRIO) +//{ +// interrupt_global_enable(0); // 开启中断嵌套 +// IfxAsclin_Asc_isrReceive(&uart0_handle); +// +//#if DEBUG_UART_USE_INTERRUPT // 如果开启 debug 串口中断 +// debug_interrupr_handler(); // 调用 debug 串口接收处理函数 数据会被 debug 环形缓冲区读取 +//#endif // 如果修改了 DEBUG_UART_INDEX 那这段代码需要放到对应的串口中断去 +// +//} IFX_INTERRUPT(uart0_er_isr, 0, UART0_ER_INT_PRIO) { interrupt_global_enable(0); // 开启中断嵌套 @@ -254,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E03_adc_demo/libraries/doc/version.txt b/Example/E03_adc_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E03_adc_demo/libraries/doc/version.txt +++ b/Example/E03_adc_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_config.a b/Example/E03_adc_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E03_adc_demo/user/isr.c b/Example/E03_adc_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E03_adc_demo/user/isr.c +++ b/Example/E03_adc_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E04_pwm_demo/libraries/doc/version.txt b/Example/E04_pwm_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E04_pwm_demo/libraries/doc/version.txt +++ b/Example/E04_pwm_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_config.a b/Example/E04_pwm_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 zcmbta3viXkb>6)Xy^ugiLK1p$g@pA0j2>7BgoD76EI@!PV_P8LO6Y+V>j8Rz0GX>` z0+?V2SmSX>(-LYslweBcdORMFlyC6DYd0AOiRh7?IS$$tswFvMcemVF({&a#^ zp18?0iSw#z`{CnPY|K?tTk-Zm4{5H2{`XQ@O>+6ouY6QfhWqszplRmESxXWg zKl`H#zZ16;5AgTIfu#RUy>W0BO&v^gy(IfW*T>@c^zWv=H#AXmBC*yPtvL(n<6!NK zmwBKR=$LHW(C)<*r{odH?o=9O>;Nt;A11kzMj1PSOOKy12FbHxyq31963cUp~aZkCjLI9AaK+e zIc3OyZO9i4`Bg){V#wDF`MM#0V#t3ofX@{k|F;<2iar~9i!2%j*$*1;)|+M zo+IWg$y}ck6`nIhCCfZlaZBQ!CY024zrS;^t9$3j5JM>IG2)%5Jx?pWy@E~ah91k^ z;_FK;q>TYM(9^raKRhxt+Bw4b4A-bwR-H8?!zEWM7l{W}u%r4PI6o(fmKCO+<8;Vn z^K2jO>0ub(wk#|CMV_h0WBNPB{5?C7jhDo;%hLN_<}*T5!`&lr+Q<0!3_J}E4ep`A zc_C!qkbjWq&l|weEZYhiKG=(M7nsxz@a-xw&^id>rNqBqCEG7D&w*qj|ETxiAj=7;|s|ZHz$|4WbW( zp>Pv@G(?~sIpGz^B@i{aaI{L&z>-Vc2$~kiy|dzD2;;$UocQ!BMR{t#n?f-Io=@;L z6;g>PUs0MkJC>-toG@a?io8G}k$|#BQpU?w`eUUsB=0+%ISOWa)LFS;IZHvUkw%3o z;K^CxxhZ65J6+(c4o-=-QQotO*2BH=&c3;0AiDQ)?;N>_vqf`lNnnUDm^jF#$yOQj z^IUdwF+_98a%!Ek%mV6=E=TL3+#w$iOM^Kyg%H0+_Oz>Nz`+hmns^FyfP1Cmj7{A8 zl)Y}I=HkjQ=DLS})gvLqQq zi7YHQY84+nu!^^expm*>bHrP9`H*ka<*gW@0FcV#PIkWKbYs%^q?4o*PWPNM<(%cs z67Vf9meel-(~kNg&crkIvpsL(-5^%Br{Ur7qxzYgKPP_PkjtM7e%4UMx1Poh-lO7M zD~n@3ts8Zp>E6q|RTK+iZI%h6V&&cnn#DJ=QwG_Tvo#8yFJoC9JlN>tJP3d3 znRp>E9&}ggCz!{17X*VpUyag!HJG)PE7tY@$L|1o6BAAuu~1^#G)-RVp>~#+CVS8 zFzGGL_&)hn>vf;noR{)88Tc3*h4D{G&W3TR*s}Sjar@;5tk*3Twrz7=)oj`QBTILe zRgU?0`?vRX3_QX30s7=&UVO5N#w~d%KO`0(V~=9sCnV<*W2`G4a)>2EvplX@0+K~^ zZJm23L!ON3>ejiz-){XU&d05VcTZM(cCVcHHlL+f#$C9akQw+3c)V~VY>$o`clSnRH?Bv)dkbmzC<1QNw zYkwraK^)R|3q1+MZ`!A2I1z5rCY)`O7N+jJ`m$o5*PDwiQP=*U@U5>6*{Hh~w z+7?QV#BUSt*JlK?ws*y+(z-mDV5!OJS?<(h$(}92lTZ8)_f%AsR|JptpY!DR!ezMK zy#2JLpA&6E+4!QrdHX|S#?5B3I3iZf%~Dxugg%S4M(7#rNQ6F{{au8f#XgA8v)OcH zK(zpKvs|_;JOF(T>x$5Q>|}(V&t8wv=dzC?^a7TI?C9oZg=}_&eh(`O=~%y;6{27T>(+wmN!L$Fvg)zsdxAB4yLhU8WA}zXCB%#SO7r!&{vNou zvu~7sh`3iz1V7sM9WML_;-;CVUmLHdu~=m$E{$iBE7<`AC#)Sd|p4uzG#VVO}jk_bjrHs88z$`^rOh~kd z2o*_d4P)(c*12iIP=E^eI&ib}X#`Z`&S2im%(Vv`Kjb$sUlEhz%K%CvMR*;+S~X9d zCj7odm{aGZm3aylp~F;o2p{5<%nHdL;{J3fT$fj&o zYUJ2a0H>0fvzicAh*dV?vomuMxcAjOblZ|Q?$(FC>&t2X>R*8Ee4M4iSIE7Ds?9_lz;UIt_9Fc zjV81+lZ>bUm4x~ivuK&=0`AXdhWwufkb2#;V>>fxkA|NMTNF52W~zakO3gF_Cx6DU49r}w{Hl`6u20q~uO2pz><@!8E` z$Gwv{z6M-W$I36hza8s80yq`NSMhtVUUA_=Xie8s8P* zo>KGj+~19`4*z1Hzx75ZA^a3L`Zp5Y?#9>Ej(_FAuL>049tD=?-%epMN_i?PZU;`U zc&{Riw&F41^gD!LMu35cJ$@HJ{pGWN62i}cJD}z*!U(>dJMceI!5gjkNrUefx(M}i zw+?4$aTLN3P^EVaxa26fpIOCv6gZukiD-@$-`T(v2`?Lj2PYwX2e{%X1o*k)3s7nf zO+py=)#%65UU4CCdc}t);ad)zk-P76aQ;JktOkz* zSgmC0bhUd_!)(#QzH4~`$rM}VTy!lPlQwbO@r`b@WeWL9CZtT dOQZc&O)un+z(JO-`~)abEQTW#$*92F0qYM0Yi`+fJlH@S1?k$-wm-h1Ej z`+oPk_q+GadoO$YEwA)j4yKgl=1t4bnVvV*>&^C3lh0o7lh)GdF~%Yp;|qp5 z;CNTEyRo@?T^(!it!=7qxtraqT@SUtm0{l3l++43WC-2t0Y^dZ}{MEn?{yKYneej)kBbp13v&EJHSRa#FfY)Zs>JO~bQaE$!8$CACER%ef z6Io&Wl&{ZyQkXsE>)Wnr5#+m&GCiu{`1vzm!kaN&{4&gm{kQ9#9yhsq5-q31b&Tab zSQ>Z2b-As(@Lrsx>`Tb-_ehrgl6+i}&q(sil6*mueI^jY-w!iU^aWellLa)r{UxLG5*th62^;WTf4Eop7GOso?)?*5P?&)!MC=th4CkO zvf+wouI}{JZ)j)yDak0HTF+Mqb%HkOb zxv^Ha!LtP;lAq&=LA0oxPZa5S_+vqmr(X&a$%qoY2+@U=d?3(RIGgi(;Mp0imW)XF zx^yZmE{ft$z^bBg{zPt{?65IwGq-2rmD_VjbLrL=vRcqO8P8T8u2ICGk2E_W?cAR3 zh(ygTqNDWabfIZB@>{u|+sQcy#LlrB85l(gS;&T0#7mUsRwbUeh|?{G7pmnz{cY}O zyCXs%(j4)y^R}#XLr-u-iJotwo>y@DEp(j-zrJmJjAIzF;xG{dyg1#TL>yLbpD229 zh%wC?CX{k%v!%aQok|(PrvZR%#jshqDRoA(!#r0^yB3A zsh9!IgD{TN2V)my#hFT_D%?ytcA-MUL4AZH1|w*Lkd_L*SstDWn`WgA4@G3an{kgBfJJjX zmH``dEguD!s)xbexu5f+uxVbJ^{BN39$k_Wcwt@&pL7h1oUEsvg;#E$fPK);h_Y_x zb}yxfqr63=k_7*{JvA|w=5U7YpuNTIg@Lj2y*%=)Ropx|oG43loweo|$=I}e>)F7j zJ4$)ftJq}>b;9Aw(nR=l!QZWWcr3*v?BUbo7{>R!SUQpO-GNDqnm9iKkCvrmAK|kM zjJVO0B5w9m7=M`SkA}KwDw+a+Eo&rQhMN z%5RrF#QzJ|OLP3)d>FISZy2-w0~dXl7`nFcXyN0Xh-O4g8tw(EHSLYb+HS}}G;JJh zS>_46wuzRJj0gS(+IzUsLmyJ<+fwhMQpC8a1fq{EdLOikjb$x*L4(}O43Xy&5xvaX zC^jhiK$j09;VUH95TT6-;l%PM;K0h^uwqMGH20^Wmk}R)c-Ijn^f0U@!)Lf`*?W}XPmP&0wSzy9zx3i)qT)v#Qq%--@$obQbZZf#bq13 z?sLO+--I~ATiEV+y5c7OaYIruO+ArY*r866FAH`b(lUBT;>?Ez(FkF5O7icB1iGp+ z*J#PDG=Q9~G;k;yRwKCtWK9yxtGsv_qlvfRMWb0|1aP*BXf6Y<&g8xDX=MsjHAG}p zV7EH7Vh~zE&_800IID<4#LduBos>Tbhd&<=97Q=^HfW*|Wn7KSI?#O?V>zn~yjFd` z!$s3%LnCv=C#6_jyW?#QfrWSfjoYT=e8O_R4*efA=D!U${r?HVZXGXKKQ7kV+_p-VW z{U+8MqWed)$3qMm>`I6}hJ75O-^{)U(X$l%SOq^`!B1fSkmLPqqCzlPA()~NObsPq z)0FsJB|cAy&ku?BTUnt(P^1tPD+Dt`2&}9`iJzmy&r{-Wm*f5Ta(;(Guuvgbq!5(J z1Q@?qiC?P3mn-qhrFeX6wz3rp!AgZ-l|ryuBB1y+N_>?PzgF?r4EnKuB&bsW^@9N6 zZ&3V=ivMoK-=z3kn4NAqdb6_Dpicc`0`~+Bn%=JH8x?(%qHk98`xSjFiw{Y_Z|I_b zOrYB^h#ak~N6~u~eW#-LDf(_j->c~RbY1Ho6F9)qLNYwWG9*17)1pr$Mk9T-uG396 zfq7VmuG9Oh6K_QKDfnHwP8TN|%?^-IgokFhi5-yu33%swUe^~RCV{1jTRV#MAr$pA z_7@w}ZyN2WB^x#l+d5rva?>ZX)@g>|xgjWN0_nzGly29JioY@NW@jz8i%+RA%LJrhr?#hZJ^*j@X7FWZ*kp?mwdk|AL-cd@mAwZu%B2dm0Rn zbG+`sFV|k8YJy`sJ?=`~N)~EOIrw-6SB|)x73iU%8to&vhWHi*|4lAq&%vx+F6TDI z^B5HElK9a}?Y-&vIS}3eGyZ*u5Ay5y?n1_@h~FLL*FB%0CksB^>>I#bO7`uHB~yS?9m;%YejvOI<%o}g zZGGWosDjrJucjJ#$Bj~5iJs-ub66Sr(L=+gX`t^I)JRuze-&{e_aZg-0f_;tEt**w zK0%zFMiW+ws|yB8LBCPd%u3O@kg zB;rS#mf~%=hIq9UePuV=5m(XEWLk>y9}JcPD=!*NgIbCz#F>|(Q)0l`4l<}aq8D-B zi5%2j(Tl(T#;(9Q4Kk?XOI&iJrB;WYMa1n?cg0Jvb)P3}Q@oCN^G)#qTtd8>`)7#% zt>9O4e+km|hgTwU8DmojA9iobM-M*7;DS^$ol%ZC;n-@`}M2~rv z&p^?k@GL*V$sT8#rTs4azq)CbZ==V^vT=wk|A{#BEHm&!j^GaaMZXFY9}Lejd9}fG zO8LEMr%j3%LWfgjiHQ6dj_&VFT? zJOhh<=n2DLydi!7j+x-UMEqFdPf+<2*TYvoObYAZmi79&4NGV~6g?E4P!;0M2e1M5 znc(|wi2o6MEaUa5>qmT^>C{~{GA&YvX1jZEY3wsAi$3`y5hwO&zRHj%F&vN>-onUX lnl4`L7Q>|@p0OXI6<2}&U4gOMdl{?JmxXwS#)x=4{s-FKbTR+{ diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E04_pwm_demo/user/isr.c b/Example/E04_pwm_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E04_pwm_demo/user/isr.c +++ b/Example/E04_pwm_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E05_pit_demo/libraries/doc/version.txt b/Example/E05_pit_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E05_pit_demo/libraries/doc/version.txt +++ b/Example/E05_pit_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_config.a b/Example/E05_pit_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E05_pit_demo/user/isr.c b/Example/E05_pit_demo/user/isr.c index b62b5d0..79b7581 100644 --- a/Example/E05_pit_demo/user/isr.c +++ b/Example/E05_pit_demo/user/isr.c @@ -37,6 +37,14 @@ #include "isr.h" // **************************** PIT中断函数 **************************** +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // 开启中断嵌套 +// pit_clear_flag(CCU60_CH0); +// +// +//} + IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { @@ -66,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -79,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -110,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -254,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E06_exit_demo/libraries/doc/version.txt b/Example/E06_exit_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E06_exit_demo/libraries/doc/version.txt +++ b/Example/E06_exit_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_config.a b/Example/E06_exit_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E06_exit_demo/user/isr.c b/Example/E06_exit_demo/user/isr.c index dc4b319..a6b5781 100644 --- a/Example/E06_exit_demo/user/isr.c +++ b/Example/E06_exit_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,12 +74,48 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** // **************************** 外部中断函数 **************************** +//IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) +//{ +// interrupt_global_enable(0); // 开启中断嵌套 +// if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // 通道0中断 +// { +// exti_flag_clear(ERU_CH0_REQ0_P15_4); +// +// } +// +// if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 +// { +// exti_flag_clear(ERU_CH4_REQ13_P15_5); +// +// +// +// +// } +//} +// +//IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) +//{ +// interrupt_global_enable(0); // 开启中断嵌套 +// if(exti_flag_get(ERU_CH1_REQ10_P14_3)) // 通道1中断 +// { +// exti_flag_clear(ERU_CH1_REQ10_P14_3); +// +// +// +// } +// +// if(exti_flag_get(ERU_CH5_REQ1_P15_8)) // 通道5中断 +// { +// exti_flag_clear(ERU_CH5_REQ1_P15_8); +// +// +// } +//} // 由于摄像头pclk引脚默认占用了 2通道,用于触发DMA,因此这里不再定义中断函数 // IFX_INTERRUPT(exti_ch2_ch6_isr, 0, EXTI_CH2_CH6_INT_PRIO) @@ -221,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E07_encoder_demo/libraries/doc/version.txt b/Example/E07_encoder_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E07_encoder_demo/libraries/doc/version.txt +++ b/Example/E07_encoder_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_config.a b/Example/E07_encoder_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E07_encoder_demo/user/isr.c b/Example/E07_encoder_demo/user/isr.c index 12e6f72..79b7581 100644 --- a/Example/E07_encoder_demo/user/isr.c +++ b/Example/E07_encoder_demo/user/isr.c @@ -37,7 +37,13 @@ #include "isr.h" // **************************** PIT中断函数 **************************** - +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // 开启中断嵌套 +// pit_clear_flag(CCU60_CH0); +// +// +//} IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) @@ -68,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -81,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -112,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -256,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E08_eeprom_demo/.settings/org.eclipse.cdt.core.prefs b/Example/E08_eeprom_demo/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000..c8ec5df --- /dev/null +++ b/Example/E08_eeprom_demo/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,6 @@ +doxygen/doxygen_new_line_after_brief=true +doxygen/doxygen_use_brief_tag=false +doxygen/doxygen_use_javadoc_tags=true +doxygen/doxygen_use_pre_tag=false +doxygen/doxygen_use_structural_commands=false +eclipse.preferences.version=1 diff --git a/Example/E08_eeprom_demo/libraries/doc/version.txt b/Example/E08_eeprom_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E08_eeprom_demo/libraries/doc/version.txt +++ b/Example/E08_eeprom_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_config.a b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 zcmbta3viXkb>6)Xy^ugiLK1p$g@pA0j2>7BgoD76EI@!PV_P8LO6Y+V>j8Rz0GX>` z0+?V2SmSX>(-LYslweBcdORMFlyC6DYd0AOiRh7?IS$$tswFvMcemVF({&a#^ zp18?0iSw#z`{CnPY|K?tTk-Zm4{5H2{`XQ@O>+6ouY6QfhWqszplRmESxXWg zKl`H#zZ16;5AgTIfu#RUy>W0BO&v^gy(IfW*T>@c^zWv=H#AXmBC*yPtvL(n<6!NK zmwBKR=$LHW(C)<*r{odH?o=9O>;Nt;A11kzMj1PSOOKy12FbHxyq31963cUp~aZkCjLI9AaK+e zIc3OyZO9i4`Bg){V#wDF`MM#0V#t3ofX@{k|F;<2iar~9i!2%j*$*1;)|+M zo+IWg$y}ck6`nIhCCfZlaZBQ!CY024zrS;^t9$3j5JM>IG2)%5Jx?pWy@E~ah91k^ z;_FK;q>TYM(9^raKRhxt+Bw4b4A-bwR-H8?!zEWM7l{W}u%r4PI6o(fmKCO+<8;Vn z^K2jO>0ub(wk#|CMV_h0WBNPB{5?C7jhDo;%hLN_<}*T5!`&lr+Q<0!3_J}E4ep`A zc_C!qkbjWq&l|weEZYhiKG=(M7nsxz@a-xw&^id>rNqBqCEG7D&w*qj|ETxiAj=7;|s|ZHz$|4WbW( zp>Pv@G(?~sIpGz^B@i{aaI{L&z>-Vc2$~kiy|dzD2;;$UocQ!BMR{t#n?f-Io=@;L z6;g>PUs0MkJC>-toG@a?io8G}k$|#BQpU?w`eUUsB=0+%ISOWa)LFS;IZHvUkw%3o z;K^CxxhZ65J6+(c4o-=-QQotO*2BH=&c3;0AiDQ)?;N>_vqf`lNnnUDm^jF#$yOQj z^IUdwF+_98a%!Ek%mV6=E=TL3+#w$iOM^Kyg%H0+_Oz>Nz`+hmns^FyfP1Cmj7{A8 zl)Y}I=HkjQ=DLS})gvLqQq zi7YHQY84+nu!^^expm*>bHrP9`H*ka<*gW@0FcV#PIkWKbYs%^q?4o*PWPNM<(%cs z67Vf9meel-(~kNg&crkIvpsL(-5^%Br{Ur7qxzYgKPP_PkjtM7e%4UMx1Poh-lO7M zD~n@3ts8Zp>E6q|RTK+iZI%h6V&&cnn#DJ=QwG_Tvo#8yFJoC9JlN>tJP3d3 znRp>E9&}ggCz!{17X*VpUyag!HJG)PE7tY@$L|1o6BAAuu~1^#G)-RVp>~#+CVS8 zFzGGL_&)hn>vf;noR{)88Tc3*h4D{G&W3TR*s}Sjar@;5tk*3Twrz7=)oj`QBTILe zRgU?0`?vRX3_QX30s7=&UVO5N#w~d%KO`0(V~=9sCnV<*W2`G4a)>2EvplX@0+K~^ zZJm23L!ON3>ejiz-){XU&d05VcTZM(cCVcHHlL+f#$C9akQw+3c)V~VY>$o`clSnRH?Bv)dkbmzC<1QNw zYkwraK^)R|3q1+MZ`!A2I1z5rCY)`O7N+jJ`m$o5*PDwiQP=*U@U5>6*{Hh~w z+7?QV#BUSt*JlK?ws*y+(z-mDV5!OJS?<(h$(}92lTZ8)_f%AsR|JptpY!DR!ezMK zy#2JLpA&6E+4!QrdHX|S#?5B3I3iZf%~Dxugg%S4M(7#rNQ6F{{au8f#XgA8v)OcH zK(zpKvs|_;JOF(T>x$5Q>|}(V&t8wv=dzC?^a7TI?C9oZg=}_&eh(`O=~%y;6{27T>(+wmN!L$Fvg)zsdxAB4yLhU8WA}zXCB%#SO7r!&{vNou zvu~7sh`3iz1V7sM9WML_;-;CVUmLHdu~=m$E{$iBE7<`AC#)Sd|p4uzG#VVO}jk_bjrHs88z$`^rOh~kd z2o*_d4P)(c*12iIP=E^eI&ib}X#`Z`&S2im%(Vv`Kjb$sUlEhz%K%CvMR*;+S~X9d zCj7odm{aGZm3aylp~F;o2p{5<%nHdL;{J3fT$fj&o zYUJ2a0H>0fvzicAh*dV?vomuMxcAjOblZ|Q?$(FC>&t2X>R*8Ee4M4iSIE7Ds?9_lz;UIt_9Fc zjV81+lZ>bUm4x~ivuK&=0`AXdhWwufkb2#;V>>fxkA|NMTNF52W~zakO3gF_Cx6DU49r}w{Hl`6u20q~uO2pz><@!8E` z$Gwv{z6M-W$I36hza8s80yq`NSMhtVUUA_=Xie8s8P* zo>KGj+~19`4*z1Hzx75ZA^a3L`Zp5Y?#9>Ej(_FAuL>049tD=?-%epMN_i?PZU;`U zc&{Riw&F41^gD!LMu35cJ$@HJ{pGWN62i}cJD}z*!U(>dJMceI!5gjkNrUefx(M}i zw+?4$aTLN3P^EVaxa26fpIOCv6gZukiD-@$-`T(v2`?Lj2PYwX2e{%X1o*k)3s7nf zO+py=)#%65UU4CCdc}t);ad)zk-P76aQ;JktOkz* zSgmC0bhUd_!)(#QzH4~`$rM}VTy!lPlQwbO@r`b@WeWL9CZtT dOQZc&O)un+z(JO-`~)abEQTW#$*92F0qYM0Yi`+fJlH@S1?k$-wm-h1Ej z`+oPk_q+GadoO$YEwA)j4yKgl=1t4bnVvV*>&^C3lh0o7lh)GdF~%Yp;|qp5 z;CNTEyRo@?T^(!it!=7qxtraqT@SUtm0{l3l++43WC-2t0Y^dZ}{MEn?{yKYneej)kBbp13v&EJHSRa#FfY)Zs>JO~bQaE$!8$CACER%ef z6Io&Wl&{ZyQkXsE>)Wnr5#+m&GCiu{`1vzm!kaN&{4&gm{kQ9#9yhsq5-q31b&Tab zSQ>Z2b-As(@Lrsx>`Tb-_ehrgl6+i}&q(sil6*mueI^jY-w!iU^aWellLa)r{UxLG5*th62^;WTf4Eop7GOso?)?*5P?&)!MC=th4CkO zvf+wouI}{JZ)j)yDak0HTF+Mqb%HkOb zxv^Ha!LtP;lAq&=LA0oxPZa5S_+vqmr(X&a$%qoY2+@U=d?3(RIGgi(;Mp0imW)XF zx^yZmE{ft$z^bBg{zPt{?65IwGq-2rmD_VjbLrL=vRcqO8P8T8u2ICGk2E_W?cAR3 zh(ygTqNDWabfIZB@>{u|+sQcy#LlrB85l(gS;&T0#7mUsRwbUeh|?{G7pmnz{cY}O zyCXs%(j4)y^R}#XLr-u-iJotwo>y@DEp(j-zrJmJjAIzF;xG{dyg1#TL>yLbpD229 zh%wC?CX{k%v!%aQok|(PrvZR%#jshqDRoA(!#r0^yB3A zsh9!IgD{TN2V)my#hFT_D%?ytcA-MUL4AZH1|w*Lkd_L*SstDWn`WgA4@G3an{kgBfJJjX zmH``dEguD!s)xbexu5f+uxVbJ^{BN39$k_Wcwt@&pL7h1oUEsvg;#E$fPK);h_Y_x zb}yxfqr63=k_7*{JvA|w=5U7YpuNTIg@Lj2y*%=)Ropx|oG43loweo|$=I}e>)F7j zJ4$)ftJq}>b;9Aw(nR=l!QZWWcr3*v?BUbo7{>R!SUQpO-GNDqnm9iKkCvrmAK|kM zjJVO0B5w9m7=M`SkA}KwDw+a+Eo&rQhMN z%5RrF#QzJ|OLP3)d>FISZy2-w0~dXl7`nFcXyN0Xh-O4g8tw(EHSLYb+HS}}G;JJh zS>_46wuzRJj0gS(+IzUsLmyJ<+fwhMQpC8a1fq{EdLOikjb$x*L4(}O43Xy&5xvaX zC^jhiK$j09;VUH95TT6-;l%PM;K0h^uwqMGH20^Wmk}R)c-Ijn^f0U@!)Lf`*?W}XPmP&0wSzy9zx3i)qT)v#Qq%--@$obQbZZf#bq13 z?sLO+--I~ATiEV+y5c7OaYIruO+ArY*r866FAH`b(lUBT;>?Ez(FkF5O7icB1iGp+ z*J#PDG=Q9~G;k;yRwKCtWK9yxtGsv_qlvfRMWb0|1aP*BXf6Y<&g8xDX=MsjHAG}p zV7EH7Vh~zE&_800IID<4#LduBos>Tbhd&<=97Q=^HfW*|Wn7KSI?#O?V>zn~yjFd` z!$s3%LnCv=C#6_jyW?#QfrWSfjoYT=e8O_R4*efA=D!U${r?HVZXGXKKQ7kV+_p-VW z{U+8MqWed)$3qMm>`I6}hJ75O-^{)U(X$l%SOq^`!B1fSkmLPqqCzlPA()~NObsPq z)0FsJB|cAy&ku?BTUnt(P^1tPD+Dt`2&}9`iJzmy&r{-Wm*f5Ta(;(Guuvgbq!5(J z1Q@?qiC?P3mn-qhrFeX6wz3rp!AgZ-l|ryuBB1y+N_>?PzgF?r4EnKuB&bsW^@9N6 zZ&3V=ivMoK-=z3kn4NAqdb6_Dpicc`0`~+Bn%=JH8x?(%qHk98`xSjFiw{Y_Z|I_b zOrYB^h#ak~N6~u~eW#-LDf(_j->c~RbY1Ho6F9)qLNYwWG9*17)1pr$Mk9T-uG396 zfq7VmuG9Oh6K_QKDfnHwP8TN|%?^-IgokFhi5-yu33%swUe^~RCV{1jTRV#MAr$pA z_7@w}ZyN2WB^x#l+d5rva?>ZX)@g>|xgjWN0_nzGly29JioY@NW@jz8i%+RA%LJrhr?#hZJ^*j@X7FWZ*kp?mwdk|AL-cd@mAwZu%B2dm0Rn zbG+`sFV|k8YJy`sJ?=`~N)~EOIrw-6SB|)x73iU%8to&vhWHi*|4lAq&%vx+F6TDI z^B5HElK9a}?Y-&vIS}3eGyZ*u5Ay5y?n1_@h~FLL*FB%0CksB^>>I#bO7`uHB~yS?9m;%YejvOI<%o}g zZGGWosDjrJucjJ#$Bj~5iJs-ub66Sr(L=+gX`t^I)JRuze-&{e_aZg-0f_;tEt**w zK0%zFMiW+ws|yB8LBCPd%u3O@kg zB;rS#mf~%=hIq9UePuV=5m(XEWLk>y9}JcPD=!*NgIbCz#F>|(Q)0l`4l<}aq8D-B zi5%2j(Tl(T#;(9Q4Kk?XOI&iJrB;WYMa1n?cg0Jvb)P3}Q@oCN^G)#qTtd8>`)7#% zt>9O4e+km|hgTwU8DmojA9iobM-M*7;DS^$ol%ZC;n-@`}M2~rv z&p^?k@GL*V$sT8#rTs4azq)CbZ==V^vT=wk|A{#BEHm&!j^GaaMZXFY9}Lejd9}fG zO8LEMr%j3%LWfgjiHQ6dj_&VFT? zJOhh<=n2DLydi!7j+x-UMEqFdPf+<2*TYvoObYAZmi79&4NGV~6g?E4P!;0M2e1M5 znc(|wi2o6MEaUa5>qmT^>C{~{GA&YvX1jZEY3wsAi$3`y5hwO&zRHj%F&vN>-onUX lnl4`L7Q>|@p0OXI6<2}&U4gOMdl{?JmxXwS#)x=4{s-FKbTR+{ diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E08_eeprom_demo/user/cpu0_main.c b/Example/E08_eeprom_demo/user/cpu0_main.c index 0156569..7fffac0 100644 --- a/Example/E08_eeprom_demo/user/cpu0_main.c +++ b/Example/E08_eeprom_demo/user/cpu0_main.c @@ -69,7 +69,7 @@ // **************************** 代码区域 **************************** #define FLASH_SECTION_INDEX (0) // 存储数据用的扇区 -#define FLASH_PAGE_INDEX (11) // 存储数据用的页码 倒数第一个页码 +#define FLASH_PAGE_INDEX (8) // 存储数据用的页码 倒数第一个页码 int core0_main(void) @@ -85,7 +85,7 @@ int core0_main(void) flash_read_page_to_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); // 将数据从 flash 读取到缓冲区 printf("\r\n FLASH_SECTION_INDEX: %d, FLASH_PAGE_INDEX: %d, origin data is :", FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出 - printf("\r\n uint32_type: %lu", flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出 + printf("\r\n uint32_type: %lu", flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出 printf("\r\n int32_type : %d", flash_union_buffer[2].int32_type); // 将缓冲区第 2 个位置的数据以 int32 格式输出 printf("\r\n uint16_type: %u", flash_union_buffer[3].uint16_type); // 将缓冲区第 3 个位置的数据以 uint16 格式输出 printf("\r\n int16_type : %d", flash_union_buffer[4].int16_type); // 将缓冲区第 4 个位置的数据以 int16 格式输出 @@ -132,7 +132,7 @@ int core0_main(void) flash_buffer_clear(); // 清空缓冲区 printf("\r\n Flash data buffer default data is :"); printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出 - printf("\r\n uint32_type: %lu",flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出 + printf("\r\n uint32_type: %lu",flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出 printf("\r\n int32_type : %d", flash_union_buffer[2].int32_type); // 将缓冲区第 2 个位置的数据以 int32 格式输出 printf("\r\n uint16_type: %u", flash_union_buffer[3].uint16_type); // 将缓冲区第 3 个位置的数据以 uint16 格式输出 printf("\r\n int16_type : %d", flash_union_buffer[4].int16_type); // 将缓冲区第 4 个位置的数据以 int16 格式输出 @@ -143,7 +143,7 @@ int core0_main(void) flash_read_page_to_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); // 将数据从 flash 读取到缓冲区 printf("\r\n FLASH_SECTION_INDEX: %d, FLASH_PAGE_INDEX: %d, new data is :", FLASH_SECTION_INDEX, FLASH_PAGE_INDEX); printf("\r\n float_type : %f", flash_union_buffer[0].float_type); // 将缓冲区第 0 个位置的数据以 float 格式输出 - printf("\r\n uint32_type: %lu",flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出 + printf("\r\n uint32_type: %lu",flash_union_buffer[1].uint32_type); // 将缓冲区第 1 个位置的数据以 uint32 格式输出 printf("\r\n int32_type : %d", flash_union_buffer[2].int32_type); // 将缓冲区第 2 个位置的数据以 int32 格式输出 printf("\r\n uint16_type: %u", flash_union_buffer[3].uint16_type); // 将缓冲区第 3 个位置的数据以 uint16 格式输出 printf("\r\n int16_type : %d", flash_union_buffer[4].int16_type); // 将缓冲区第 4 个位置的数据以 int16 格式输出 diff --git a/Example/E08_eeprom_demo/user/isr.c b/Example/E08_eeprom_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E08_eeprom_demo/user/isr.c +++ b/Example/E08_eeprom_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E09_timer_demo/libraries/doc/version.txt b/Example/E09_timer_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E09_timer_demo/libraries/doc/version.txt +++ b/Example/E09_timer_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_config.a b/Example/E09_timer_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E09_timer_demo/user/isr.c b/Example/E09_timer_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E09_timer_demo/user/isr.c +++ b/Example/E09_timer_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt +++ b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_config.a b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E10_printf_debug_log_demo/user/isr.c b/Example/E10_printf_debug_log_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E10_printf_debug_log_demo/user/isr.c +++ b/Example/E10_printf_debug_log_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt +++ b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_config.a b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E11_interrupt_priority_set_demo/user/isr.c b/Example/E11_interrupt_priority_set_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E11_interrupt_priority_set_demo/user/isr.c +++ b/Example/E11_interrupt_priority_set_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_config.a b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E12_cpu1_handles_interrupts_demo/user/isr.c b/Example/E12_cpu1_handles_interrupts_demo/user/isr.c index 2a0b968..79b7581 100644 --- a/Example/E12_cpu1_handles_interrupts_demo/user/isr.c +++ b/Example/E12_cpu1_handles_interrupts_demo/user/isr.c @@ -37,6 +37,15 @@ #include "isr.h" // **************************** PIT中断函数 **************************** +//IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) +//{ +// interrupt_global_enable(0); // 开启中断嵌套 +// pit_clear_flag(CCU60_CH0); +// +// +//} + + IFX_INTERRUPT(cc60_pit_ch1_isr, 0, CCU6_0_CH1_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 @@ -65,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -78,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -109,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -253,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E13_dual_core_demo/libraries/doc/version.txt b/Example/E13_dual_core_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E13_dual_core_demo/libraries/doc/version.txt +++ b/Example/E13_dual_core_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_config.a b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E13_dual_core_demo/user/isr.c b/Example/E13_dual_core_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E13_dual_core_demo/user/isr.c +++ b/Example/E13_dual_core_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_config.a b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E14_specifies_variable_or_code_location_demo/user/isr.c b/Example/E14_specifies_variable_or_code_location_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E14_specifies_variable_or_code_location_demo/user/isr.c +++ b/Example/E14_specifies_variable_or_code_location_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Example/E15_fft_demo/libraries/doc/version.txt b/Example/E15_fft_demo/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Example/E15_fft_demo/libraries/doc/version.txt +++ b/Example/E15_fft_demo/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c index f1ad9de..0078457 100644 --- a/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c +++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c @@ -37,12 +37,14 @@ #include "Ifxstm.h" #include "Cpu0_Main.h" #include "Cpu/Std/IfxCpu.h" +#include "zf_driver_delay.h" #include "zf_common_interrupt.h" #include "zf_common_clock.h" + App_Cpu0 g_AppCpu0; // 频率信息变量 -IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0; // 事件同步变量 +static uint8 cpu_init_finsh[IfxCpu_Id_none]; // 核心初始化完成标志位 //------------------------------------------------------------------------------------------------------------------- // 函数简介 设置系统频率 @@ -106,8 +108,20 @@ void clock_init (void) //------------------------------------------------------------------------------------------------------------------- void cpu_wait_event_ready (void) { - while(IfxCpu_waitEvent(&g_cpuSyncEvent, 5)) + uint8 i; + uint8 all_cpu_init_finsh; + + // 调用此函数的核心初始化完毕,标志位置一 + cpu_init_finsh[IfxCpu_getCoreId()] = 1; + + // 等待其他核心初始化完毕 + do { - IfxCpu_emitEvent(&g_cpuSyncEvent); - } + all_cpu_init_finsh = 1; + for(i = 0; i < IfxCpu_Id_none; i++) + { + all_cpu_init_finsh *= cpu_init_finsh[i]; + } + system_delay_ms(1); + }while(0 == all_cpu_init_finsh); } diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_config.a b/Example/E15_fft_demo/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h +++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h +++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Example/E15_fft_demo/user/isr.c b/Example/E15_fft_demo/user/isr.c index 61397e5..be4734c 100644 --- a/Example/E15_fft_demo/user/isr.c +++ b/Example/E15_fft_demo/user/isr.c @@ -41,7 +41,6 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 } @@ -75,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -88,9 +86,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) { exti_flag_clear(ERU_CH0_REQ0_P15_4); - - - } if(exti_flag_get(ERU_CH4_REQ13_P15_5)) // 通道4中断 @@ -119,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -263,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); } diff --git a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt index e85f8ec..5ce61a0 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt +++ b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt @@ -1,3 +1,7 @@ +V3.1.6 + 修改GPS使用串口号,优化GPS计算代码 + isr.c中移除CCD采集函数,有需要可以自行添加 + 修改按键驱动文件的按键端口号,适配V2.6主板 V3.1.5 修复硬件SPI初始化时选择空CS引脚,却依旧会初始化默认CS引脚的bug V3.1.4 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_config.a b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_config.a index 30a199d816bde08187809af001a4a3ceeb54a148..e28fb54e167c35b1c40756e2a996265a0720e147 100644 GIT binary patch delta 10751 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 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c index b8968f3..7b8a88e 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c @@ -43,24 +43,25 @@ * ------------------------------------ ********************************************************************************************************************/ +#include "math.h" #include "zf_common_function.h" #include "zf_common_fifo.h" #include "zf_driver_delay.h" #include "zf_driver_uart.h" -#include "zf_device_type.h" + #include "zf_device_gps_tau1201.h" -#define GPS_TAU1201_BUFFER_SIZE (128) +#define GPS_TAU1201_BUFFER_SIZE ( 128 ) -uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成 +uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成 gps_info_struct gps_tau1201; // GPS解析之后的数据 static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成 static fifo_struct gps_tau1201_receiver_fifo; // static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组 -gps_state_enum gps_gga_state; // gga语句状态 -gps_state_enum gps_rmc_state; // rmc语句状态 +gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态 +gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态 static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; @@ -75,11 +76,10 @@ static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; //------------------------------------------------------------------------------------------------------------------- static uint8 get_parameter_index (uint8 num, char *str) { - uint8 i, j = 0; - char *temp; - uint8 len = 0, len1; + uint8 i = 0, j = 0; + char *temp = strchr(str, '\n'); + uint8 len = 0, len1 = 0; - temp = strchr(str, '\n'); if(NULL != temp) { len = (uint8)((uint32)temp - (uint32)str + 1); @@ -87,7 +87,7 @@ static uint8 get_parameter_index (uint8 num, char *str) for(i = 0; i < len; i ++) { - if(str[i] == ',') + if(',' == str[i]) { j ++; } @@ -111,8 +111,8 @@ static uint8 get_parameter_index (uint8 num, char *str) static int get_int_number (char *s) { char buf[10]; - uint8 i; - int return_value; + uint8 i = 0; + int return_value = 0; i = get_parameter_index(1, s); i = i - 1; strncpy(buf, s, i); @@ -130,9 +130,9 @@ static int get_int_number (char *s) //------------------------------------------------------------------------------------------------------------------- static float get_float_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - float return_value; + float return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -151,9 +151,9 @@ static float get_float_number (char *s) //------------------------------------------------------------------------------------------------------------------- static double get_double_number (char *s) { - uint8 i; + uint8 i = 0; char buf[15]; - double return_value; + double return_value = 0; i = get_parameter_index(1, s); i = i - 1; @@ -172,10 +172,10 @@ static double get_double_number (char *s) //------------------------------------------------------------------------------------------------------------------- static void utc_to_btc (gps_time_struct *time) { - uint8 day_num; + uint8 day_num = 0; time->hour = time->hour + 8; - if(time->hour > 23) + if(23 < time->hour) { time->hour -= 24; time->day += 1; @@ -183,7 +183,7 @@ static void utc_to_btc (gps_time_struct *time) if(2 == time->month) { day_num = 28; - if((time->year % 4 == 0 && time->year % 100 != 0) || time->year % 400 == 0) // 判断是否为闰年 + if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年 { day_num ++; // 闰月 2月为29天 } @@ -201,7 +201,7 @@ static void utc_to_btc (gps_time_struct *time) { time->day = 1; time->month ++; - if(time->month > 12) + if(12 < time->month) { time->month -= 12; time->year ++; @@ -220,21 +220,21 @@ static void utc_to_btc (gps_time_struct *time) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) { - uint8 state, temp; + uint8 state = 0, temp = 0; - double latitude; // 纬度 - double longitude; // 经度 + double latitude = 0; // 纬度 + double longitude = 0; // 经度 - float lati_cent_tmp, lati_second_tmp; - float long_cent_tmp, long_second_tmp; - float speed_tmp; + double lati_cent_tmp = 0, lati_second_tmp = 0; + double long_cent_tmp = 0, long_second_tmp = 0; + float speed_tmp = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; gps->state = 0; - if (state == 'A') // 如果数据有效 则解析数据 + if('A' == state) // 如果数据有效 则解析数据 { return_state = 1; gps->state = 1; @@ -247,17 +247,17 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒 lati_cent_tmp = (latitude - gps->latitude_degree * 100); gps->latitude_cent = (int)lati_cent_tmp; - lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 10000; + lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000; gps->latitude_second = (int)lati_second_tmp; gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒 long_cent_tmp = (longitude - gps->longitude_degree * 100); gps->longitude_cent = (int)long_cent_tmp; - long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 10000; + long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000; gps->longitude_second = (int)long_second_tmp; - gps->latitude = gps->latitude_degree + (double)gps->latitude_cent / 60 + (double)gps->latitude_second / 600000; - gps->longitude = gps->longitude_degree + (double)gps->longitude_cent / 60 + (double)gps->longitude_second / 600000; + gps->latitude = gps->latitude_degree + lati_cent_tmp / 60; + gps->longitude = gps->longitude_degree + long_cent_tmp / 60; speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时) gps->speed = speed_tmp * 1.85f; // 转换为公里/小时 @@ -288,13 +288,13 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps) //------------------------------------------------------------------------------------------------------------------- static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) { - uint8 state; + uint8 state = 0; char *buf = line; uint8 return_state = 0; state = buf[get_parameter_index(2, buf)]; - if (state != ',') + if(',' != state) { gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]); gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度 @@ -317,13 +317,13 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps) double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2) { const double EARTH_RADIUS = 6378137; // 地球半径(单位:m) - double rad_latitude1; - double rad_latitude2; - double rad_longitude1; - double rad_longitude2; - double distance; - double a; - double b; + double rad_latitude1 = 0; + double rad_latitude2 = 0; + double rad_longitude1 = 0; + double rad_longitude2 = 0; + double distance = 0; + double a = 0; + double b = 0; rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度 rad_latitude2 = ANGLE_TO_RAD(latitude2); @@ -359,7 +359,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit double x = sin(longitude2 - longitude1) * cos(latitude2); double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1); double angle = RAD_TO_ANGLE(atan2(x, y)); - return ((angle > 0) ? angle : (angle + 360)); + return ((0 < angle) ? angle : (angle + 360)); } //------------------------------------------------------------------------------------------------------------------- @@ -375,16 +375,16 @@ uint8 gps_data_parse (void) uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00}; uint8 bbc_xor_origin = 0; uint8 bbc_xor_calculation = 0; - uint32 data_len; + uint32 data_len = 0; do { if(GPS_STATE_RECEIVED == gps_rmc_state) { gps_rmc_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; gps_rmc_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_rmc_buffer[data_len]; } @@ -402,10 +402,10 @@ uint8 gps_data_parse (void) if(GPS_STATE_RECEIVED == gps_gga_state) { gps_gga_state = GPS_STATE_PARSING; - strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*')+1, 2); + strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2); bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer); - for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; gps_gga_buffer[data_len] != '*'; data_len ++) + for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++) { bbc_xor_calculation ^= gps_gga_buffer[data_len]; } @@ -435,7 +435,7 @@ uint8 gps_data_parse (void) void gps_uart_callback (void) { uint8 temp_gps[6]; - uint32 temp_length; + uint32 temp_length = 0; if(gps_tau1201_state) { @@ -507,8 +507,7 @@ uint8 gps_init (void) fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE); system_delay_ms(500); // 等待GPS启动后开始初始化 uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX); - - set_wireless_type(GPS_TAU1201, gps_uart_callback); + uart_rx_interrupt(GPS_TAU1201_UART, 0); uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz system_delay_ms(200); diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h index f343cd3..0416e14 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h @@ -49,9 +49,9 @@ #include "zf_common_typedef.h" //===============================================GPS 驱动配置==================================================== -#define GPS_TAU1201_UART (UART_2) -#define GPS_TAU1201_RX (UART2_TX_P10_5) // GPS RX引脚连接到单片机此 -#define GPS_TAU1201_TX (UART2_RX_P10_6) // GPS TX串口引脚 +#define GPS_TAU1201_UART (UART_3) +#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此 +#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚 //===============================================GPS 驱动配置==================================================== #define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度 diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h index d581bf5..cddb99f 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h @@ -137,8 +137,8 @@ //================================================定义 IMU963RA 内部地址================================================ //===============================================声明 IMU963RA 数据存储变量=============================================== -extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴陀螺仪数据 -extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴加速度计数据 +extern int16 imu963ra_gyro_x, imu963ra_gyro_y, imu963ra_gyro_z; // 三轴陀螺仪数据 +extern int16 imu963ra_acc_x, imu963ra_acc_y, imu963ra_acc_z; // 三轴加速度计数据 extern int16 imu963ra_mag_x, imu963ra_mag_y, imu963ra_mag_z; // 三轴地磁计数据 //===============================================声明 IMU963RA 数据存储变量=============================================== diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c index 3d001e9..dbae80b 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -45,6 +45,7 @@ ********************************************************************************************************************/ #include "zf_common_debug.h" + #include "zf_device_key.h" static uint32 scanner_period = 0; // 按键的扫描周期 @@ -65,54 +66,21 @@ void key_scanner (void) uint8 i = 0; for(i = 0; i < KEY_NUMBER; i ++) { - switch(key_state[i]) + if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) // 按键按下 { - case KEY_RELEASE: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - else - { - key_state[i] = KEY_CHECK_SHOCK; - } - } - break; - case KEY_CHECK_SHOCK: - if(KEY_RELEASE_LEVEL != gpio_get_level(key_index[i])) - { - if(++ key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) - { - key_state[i] = KEY_SHORT_PRESS; - } - } - else - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_SHORT_PRESS: - if(++ key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) - { - key_state[i] = KEY_LONG_PRESS; - } - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - case KEY_LONG_PRESS: - if(KEY_RELEASE_LEVEL == gpio_get_level(key_index[i])) - { - key_state[i] = KEY_RELEASE; - key_press_time[i] = 0; - } - break; - + key_press_time[i] ++; + if(key_press_time[i] >= KEY_LONG_PRESS_PERIOD / scanner_period) + { + key_state[i] = KEY_LONG_PRESS; + } + } + else // 按键释放 + { + if(key_state[i] != KEY_LONG_PRESS && key_press_time[i] >= KEY_MAX_SHOCK_PERIOD / scanner_period) + { + key_state[i] = KEY_SHORT_PRESS; + } + key_press_time[i] = 0; } } } @@ -129,6 +97,33 @@ key_state_enum key_get_state (key_index_enum key_n) return key_state[key_n]; } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除对应按键状态 +// 参数说明 key_n 按键索引 +// 返回参数 void 无 +// 使用示例 key_clear_state(KEY_1); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_state (key_index_enum key_n) +{ + key_state[key_n] = KEY_RELEASE; +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 清除所有按键状态 +// 参数说明 void 无 +// 返回参数 void 无 +// 使用示例 key_clear_all_state(); +// 备注信息 +//------------------------------------------------------------------------------------------------------------------- +void key_clear_all_state (void) +{ + key_state[0] = KEY_RELEASE; + key_state[1] = KEY_RELEASE; + key_state[2] = KEY_RELEASE; + key_state[3] = KEY_RELEASE; +} + //------------------------------------------------------------------------------------------------------------------- // 函数简介 按键初始化 // 参数说明 period 按键扫描周期 以毫秒为单位 @@ -136,17 +131,14 @@ key_state_enum key_get_state (key_index_enum key_n) // 使用示例 key_init(10); // 备注信息 //------------------------------------------------------------------------------------------------------------------- -uint8 key_init (uint32 period) +void key_init (uint32 period) { + zf_assert(0 < period); uint8 loop_temp = 0; - - zf_assert(0 < period); // 扫描周期必须大于0 - for(loop_temp = 0; loop_temp < KEY_NUMBER; loop_temp ++) { gpio_init(key_index[loop_temp], GPI, GPIO_HIGH, GPI_PULL_UP); key_state[loop_temp] = KEY_RELEASE; } scanner_period = period; - return 0; } diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h index 1b5d752..8390e59 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h @@ -1,10 +1,10 @@ /********************************************************************************************************************* -* MM32F327X-G9P Opensourec Library 即(MM32F327X-G9P 开源库)是一个基于官方 SDK 接口的第三方开源库 +* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库 * Copyright (c) 2022 SEEKFREE 逐飞科技 * -* 本文件是 MM32F327X-G9P 开源库的一部分 +* 本文件是 TC264 开源库的一部分 * -* MM32F327X-G9P 开源库 是免费软件 +* TC264 开源库 是免费软件 * 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款 * 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它 * @@ -24,13 +24,13 @@ * 文件名称 zf_device_key * 公司名称 成都逐飞科技有限公司 * 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明 -* 开发环境 IAR 8.32.4 or MDK 5.37 -* 适用平台 MM32F327X_G9P +* 开发环境 ADS v1.8.0 +* 适用平台 TC264D * 店铺链接 https://seekfree.taobao.com/ * * 修改记录 * 日期 作者 备注 -* 2022-08-10 Teternal first version +* 2022-09-15 pudding first version ********************************************************************************************************************/ /********************************************************************************************************************* * 接线定义: @@ -53,13 +53,12 @@ // 定义按键引脚 用户可以新增可以修改 默认定义四个按键 // 定义按键顺序对应下方 key_index_enum 枚举体中定义的顺序 // 如果用户可以新增按键 那么需要同步在下方 key_index_enum 枚举体中新增按键 -#define KEY_LIST {P22_0, P22_1, P22_2, P22_3} +#define KEY_LIST {P20_6, P20_7, P11_2, P11_3} #define KEY_RELEASE_LEVEL (GPIO_HIGH) // 按键的默认状态 也就是按键释放状态的电平 #define KEY_MAX_SHOCK_PERIOD (10 ) // 按键消抖检测时长 单位毫秒 低于这个时长的信号会被认为是杂波抖动 -#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 +#define KEY_LONG_PRESS_PERIOD (1000 ) // 最小长按时长 单位毫秒 高于这个时长的信号会被认为是长按动作 -//=================================================定义 按键 参数结构体=============================================== typedef enum { KEY_1, @@ -72,15 +71,14 @@ typedef enum typedef enum { KEY_RELEASE, // 按键释放状态 - KEY_CHECK_SHOCK, // 按键消抖状态 KEY_SHORT_PRESS, // 按键短按状态 KEY_LONG_PRESS, // 按键长按状态 }key_state_enum; -//=================================================定义 按键 参数结构体=============================================== -//====================================================按键 基础函数================================================= -void key_scanner (void); // 按键状态扫描 -key_state_enum key_get_state (key_index_enum key_n); // 获取按键状态 -uint8 key_init (uint32 period); // 按键初始化 -//====================================================按键 基础函数================================================= +void key_scanner (void); +key_state_enum key_get_state (key_index_enum key_n); +void key_clear_state (key_index_enum key_n); +void key_clear_all_state (void); +void key_init (uint32 period); + #endif diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h index 1cc2ed0..0af9380 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h @@ -60,7 +60,7 @@ // TSL1401 的周期采集部分定义 使用到哪个 PIT 就要把 放在哪个 PIT 的中断服务函数下 #define TSL1401_EXPOSURE_TIME (10 ) // 定义 TSL1401 曝光时间 单位 MS -#define TSL1401_PIT_INDEX (CCU60_CH0) // 使用周期中断 +#define TSL1401_PIT_INDEX (CCU61_CH1) // 使用周期中断 #define TSL1401_AD_RESOLUTION (ADC_8BIT) // ADC 精度 8bit #define TSL1401_DATA_LEN (128 ) // TSL1401 数据长度 //=================================================TSL1401 驱动配置==================================================== diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h index 21ac59c..4b66bea 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h @@ -53,9 +53,7 @@ typedef enum NO_WIRELESS = 0, // 无设备 WIRELESS_UART, // 无线串口 BLUETOOTH_CH9141, // 蓝牙 CH9141 - GPS_TAU1201, - WIFI_UART, - WIFI_SPI, + WIFI_UART, // 串口 WiFi }wireless_type_enum; //==============================================定义 外设 枚举体================================================== diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c index 6930f55..bc8d470 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c @@ -40,7 +40,7 @@ //------------------------------------------------------------------------------------------------------------------- -// 函数简介 systick延时函数 +// 函数简介 system延时函数 // 参数说明 time 延时一轮的时间(单位为纳秒,可设置范围0-20000000) // 参数说明 num 延时多少轮 // 返回参数 void @@ -60,3 +60,25 @@ void system_delay (uint32 time, uint32 num) } +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 微秒 延时函数 +// 参数说明 time 延时时间 单位:us +// 返回参数 void +// 使用示例 system_delay_us(100); // 延时100微秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_us (uint32 time) +{ + system_delay(time*1000, 1); +} + +//------------------------------------------------------------------------------------------------------------------- +// 函数简介 system 毫秒 延时函数 +// 参数说明 time 延时时间 单位:ms +// 返回参数 void +// 使用示例 system_delay_ms(100); // 延时100毫秒 +//------------------------------------------------------------------------------------------------------------------- +void system_delay_ms (uint32 time) +{ + system_delay(1000000, time); +} + diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h index 98c11dc..4987caa 100644 --- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h +++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h @@ -38,13 +38,10 @@ #include "zf_common_typedef.h" - -void system_delay (uint32 time, uint32 num); - //====================================================延时 基础函数==================================================== -#define system_delay_ms(time) system_delay((1000000), (time)) // 设置延时时间 单位ms -#define system_delay_us(time) system_delay((time*1000), (1)) // 设置延时时间 单位us -#define system_delay_ns(time) system_delay((time), (1)) // 设置延时时间 单位ns +void system_delay (uint32 time, uint32 num); +void system_delay_us (uint32 time); +void system_delay_ms (uint32 time); //====================================================延时 基础函数==================================================== diff --git a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c index 5686a09..d9ac2da 100644 --- a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c +++ b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c @@ -66,7 +66,6 @@ int core0_main(void) - // 此处编写需要循环执行的代码 } } diff --git a/Seekfree_TC264_Opensource_Library/user/isr.c b/Seekfree_TC264_Opensource_Library/user/isr.c index 3c32ec6..be4734c 100644 --- a/Seekfree_TC264_Opensource_Library/user/isr.c +++ b/Seekfree_TC264_Opensource_Library/user/isr.c @@ -41,7 +41,7 @@ IFX_INTERRUPT(cc60_pit_ch0_isr, 0, CCU6_0_CH0_ISR_PRIORITY) { interrupt_global_enable(0); // 开启中断嵌套 pit_clear_flag(CCU60_CH0); - tsl1401_collect_pit_handler(); // 线阵CCD采集 + } @@ -74,7 +74,6 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY) - } // **************************** PIT中断函数 **************************** @@ -86,9 +85,6 @@ IFX_INTERRUPT(exti_ch0_ch4_isr, 0, EXTI_CH0_CH4_INT_PRIO) if(exti_flag_get(ERU_CH0_REQ0_P15_4)) // 通道0中断 { exti_flag_clear(ERU_CH0_REQ0_P15_4); - wireless_module_uart_handler(); // 无线模块统一回调函数 - - } @@ -118,8 +114,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO) exti_flag_clear(ERU_CH5_REQ1_P15_8); - - } } @@ -262,7 +256,7 @@ IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO) IfxAsclin_Asc_isrReceive(&uart3_handle); - + gps_uart_callback(); }