找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来!
! \' j: ]: ^ ^" l4 c
5 s+ O& B& K, K3 w' n& w6 N8 X4 h" I
硬件平台:Nucle64-103,使用SPI正常读取即可
& o) A/ z& ^6 p) k- ^8 Y0 G1 e! \! Y6 U$ i1 {# b+ P5 d
硬件连接:
% F1 Z5 w) V) g& K! A: W- H, `
3 f8 i* |! W E$ u8 D) h8 p软件平台:STM32CubeMX+keil5.0+hal固件库4 X( g7 T3 i1 {2 T
8 d3 ^) k% j3 [" W% d+ Z
- #include "app_tle5012b.h"! ~) p D* Z) w4 L8 ]0 N
-
3 T2 E5 M' t0 n9 {1 u- _$ b6 ~ - + i. w5 j1 S3 S+ L2 o# G
3 X8 R' o" @$ O. L. b- uint16_t SPIx_ReadWriteByte(uint16_t byte)$ A* W* J k2 q7 I6 P* K
- {$ W5 p7 p3 ~. d0 ~3 H8 s" H* o
$ M! [+ Z0 O8 }: ~- V- uint16_t read_value = 0;
7 K. _9 ^& y# H# j: j -
5 l. m$ u( O+ g. [4 Z. u9 A3 T1 p, c - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );
$ F! A3 Z; h+ M" t/ i, G- v -
1 O) G& n" R1 A. R0 X& Z - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );0 H( D4 E F* I1 A/ _3 C, a1 U
- return read_value;
9 i/ D# @( o5 p0 a6 i! h - }( R v* k- u* u0 e! ]1 W8 U7 |& o
-
0 L- X$ Z5 o9 p9 `: l - 9 C s: k0 L) w/ ~( o: p& X% |
- double ReadAngle(void)
. D2 b! W( e7 Y& j) [ - {
) e$ U) E0 Z1 v) s6 I - return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );
1 P7 Y! j* e: F: o8 B" [/ a - }
M2 l% ?# G2 Z -
1 B# }0 M/ Z8 w5 I( H" o
1 _. e% O$ T# k; s) K3 h# Q- uint16_t ReadSpeed(void)
) p# R$ J! f5 q; C- i/ T- J - {: ~! i* I4 d% m+ f; m8 e
- return ReadValue(READ_SPEED_VALUE);) Y. m5 B# Y& A7 ^ Z
- }* h8 L5 V* r+ V6 H
-
D: x# b- @# J( T/ B5 `- Y -
, b- Q3 X- K) T8 C' P' w! T - uint16_t ReadValue(uint16_t u16RegValue)
: N' w; z& X) k& S1 D; s - {/ N4 [, j6 i3 z+ Q. D" C
- uint16_t u16Data;& M& g5 E" L' A. E$ q
-
D& I& I8 M) K! u - SPI_CS_ENABLE;) d8 p' e. Y4 m& J( w. ^. J
- 1 d8 H5 r# N+ i4 d+ S
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );! P* n* A7 E9 z% n
- HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );$ J' u E# [) s% y9 M; I
-
* T9 P* @4 s8 X9 { - SPI_CS_DISABLE;4 v/ |" R5 m1 @7 L1 H/ B, E. J
6 U+ n+ s: b: w# G4 o! g- 4 l* ~+ S$ |/ l6 W; [
- return((u16Data & 0x7FFF )<<1);. I3 | t8 x. ?/ q0 D, y
- }
; n1 z( j5 A8 l3 B
; J% K; |, j x+ x0 |3 p
7 e% h+ z5 A$ j, M% ^; a- 2 y' s) \! w. z) C5 S# G5 T
复制代码- #ifndef _APP_TLE5012B_H_
8 v) w( {) p0 f7 u' S - #define _APP_TLE5012B_H_ E b& \9 u% T
% s. X$ S1 [7 P* c9 x- #include "cpu_common.h"0 H, ` A5 {: s7 _8 P- V
8 ^# h7 F- I( D- ( _/ }- P1 A% q! p. u( K" D
-
% t3 B( t8 o% M; f - #define GPIO_CS_Pin_Name GPIO_PIN_4
. w0 V1 }# k% _) }4 U - #define GPIO_CS_Pin_Type GPIOC) Z j# I1 ^& y$ e- U8 z
% i6 H6 k9 E1 A o
1 I" w8 y8 t( u( W o- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )
) A9 ?* W7 l8 q - #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET )
5 t5 G+ O1 p" p! T, `4 K
, z# e1 ~9 J1 e0 ]-
4 z: _+ L: }0 S5 ?, ?! @ - /* SPI command for TLE5012 */, `, ]2 R& j+ ?, f- d
- #define READ_STATUS 0x8001 //8000
5 p$ {9 {, z7 d - #define READ_ANGLE_VALUE 0x8021 //8020* c4 D& g0 [. _: a+ D6 X6 ]! g8 A# n5 U
- #define READ_SPEED_VALUE 0x8031 //80306 b- _+ J; z& i$ S, e" W2 C+ d+ W
-
" |! z( z4 B# n9 C. C' \ - #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_0001! R% Z! i/ x( z! O8 I
- #define MOD1_VALUE 0x0001* V6 y) j6 J, u7 K
-
- [3 _8 G) P% D) x( v - #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_0001" O7 d* F' Q; G) g- k
- #define MOD2_VALUE 0x08019 b. E" G, @% Z, i6 {
- ) b& A( _# J% X% o1 ~) L
- #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_0001
! D0 T- B5 d7 I, u* }- d - #define MOD3_VALUE 0x0000 R5 A. {; e# | S! G8 L5 {2 `
-
& E$ [( t0 P) b2 e. b - #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_00014 Z" A3 u9 G2 J, k7 ~* O3 _
- #define MOD4_VALUE 0x0098 //9bit 512
9 b$ N& o8 c; _8 t" r% l1 t -
3 O- r1 B- C. B" m - #define WRITE_IFAB_VALUE 0x50B1
5 q5 a" T4 q( Q2 p5 ]$ O - #define IFAB_VALUE 0x000D
9 H3 q3 ]. }3 Y4 D6 L6 O( X - /* Functionality mode */
- N9 |3 u% {* h# P - #define REFERESH_ANGLE 0
# b2 S y A- Y( q: M: z' a4 w - - Q! O0 N& l- L& v
- void SPI_SendData16(uint16_t SendData);
4 h a$ W4 ]: ]( S - uint16_t SPI_ReadData16(void);
+ Q* _$ s: R3 Z2 K+ E - double ReadAngle(void);4 y6 i& g7 u0 O
- uint16_t ReadSpeed(void);
3 J9 I8 p0 K9 E# b- ~0 g0 a - uint16_t ReadValue(uint16_t u16Value);
! N8 ?" k: H" w7 S) n5 t1 u - uint16_t SPIx_ReadWriteByte(uint16_t byte);
/ N0 ]& L# U1 H* ? - uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);
$ w. N0 G% B4 f; k - $ T, a" \% e' x) l" K
- + g, e) z0 j% e1 b- y* v
- #endif
复制代码
* V% s1 q3 M$ \+ c$ ~# \1 ?7 s# O读取角度打印在串口助手上
/ v! U6 P$ \9 }1 Z
3 z; c' F W1 ]5 `. u9 F1 {# X
$ G" X4 u( ?- }( n源工程:
tle5012b.rar
(3.55 MB, 下载次数: 484)
|