找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来! {! Q2 v" ]$ K1 x5 e0 k
/ }) C; f' y! D. [' m6 y
8 r6 Q2 \. i$ @" g! E [- G! ~硬件平台:Nucle64-103,使用SPI正常读取即可4 J7 K, y2 C3 \
* j: y9 k4 Y9 Z' W$ k
硬件连接:- e( |. ^# m- s1 m2 e) _- d- k) }
( h: S; k9 o, ^2 ] l% z& v
软件平台:STM32CubeMX+keil5.0+hal固件库
! K& o5 L: P* Z3 e+ t" I7 t5 I1 m' Z! u2 s$ j' O* Z) O
- #include "app_tle5012b.h"! D, g9 m" h$ W, W8 A; i
-
2 ^) V$ P% J! d1 ]
$ |# @$ w/ d/ T0 b; {; E- 9 i1 x( U- i* S. L/ j. B2 y
- uint16_t SPIx_ReadWriteByte(uint16_t byte); B" g6 l. B1 B8 {2 ?9 X7 s g
- {$ ^! x- ]3 B x1 b# T/ v: f
* q( L. M8 k2 A$ x3 g- uint16_t read_value = 0;
/ B! y+ B* I* u# {6 J - : @5 x# z! B9 v; [% H$ J$ f
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );
6 v$ J. A0 y) ~" K( b& q - ! N: Z! {# D9 \9 X
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );) `2 X6 G) C0 F) T
- return read_value;# M& K. Y7 D* u
- }$ `2 i( f; \' T. q, F6 V. b1 c
-
$ i: W4 |3 V% T4 J, m$ c/ E1 C* R" o
& ?) E' t" s0 i' l- double ReadAngle(void)
/ D; C6 U. ?* H3 ?) k5 U5 X; W - {& ^: z$ B. C+ W3 m/ @+ D' J( t) r
- return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );
2 O( Z3 |% q" B3 {) a - }
8 j, q6 ^5 M$ ?0 w5 h -
+ @! C( A3 U' F) X5 w$ G& U/ x! D - 2 h' u+ r" ?: a, a9 J
- uint16_t ReadSpeed(void); y& b) u8 R4 j3 M8 K3 Z
- {2 _) i6 x# E5 h: z* @# k6 V
- return ReadValue(READ_SPEED_VALUE);/ X# Q4 q, n/ z6 W8 o' S
- }
- c t8 q' z( q d8 v$ R - 8 S. h# o u( y4 {1 H6 O7 M
- - X/ C% P! ~% P# V+ F
- uint16_t ReadValue(uint16_t u16RegValue); u1 R0 @7 z; K, A, K# w
- {7 a* B* R# P9 o n E4 }; s/ e
- uint16_t u16Data;
9 H- \2 z2 V9 r- Y8 E, q. k -
( b" P1 b/ }8 v' Q - SPI_CS_ENABLE;
3 B# y6 ]( X# @4 F - $ r; t- X- J& N
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );1 k3 D: ?0 m4 m; R. y
- HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );; P* b! ?; P5 U1 @
- 9 C# N3 v8 K' i+ R
- SPI_CS_DISABLE;
6 p; s9 @* X& g: K9 @) H& w - & V. H' c. {; Y1 k, j
- & J" ^+ v. s; z
- return((u16Data & 0x7FFF )<<1);6 }3 R' d1 c, Y
- }
( s4 x8 |, R- C; H$ ?6 n! S - 7 t+ R' D# {1 y" [- @+ t
( D% ~2 A, m9 X9 p1 K- $ p0 M9 J9 C K2 X- F
复制代码- #ifndef _APP_TLE5012B_H_
3 E8 Q7 @" I) {6 L( i - #define _APP_TLE5012B_H_
% A" s9 }+ S2 M8 Z; y. E - 0 C7 p- Y, b+ I6 d1 H. N( ^, I
- #include "cpu_common.h"1 M- y6 q; h+ K ~3 K0 |# N! b
: {9 N( r. o( `; U9 C4 }8 }- * M& h$ j+ I1 a Y; x! W4 D; B9 S- a
-
' U0 U u, V. _- a - #define GPIO_CS_Pin_Name GPIO_PIN_4" Q* |( l# j! W1 x; i
- #define GPIO_CS_Pin_Type GPIOC' L& O- [4 z! X7 B4 F8 Y4 E/ o
- , _- S* h, K* _* j; D7 L5 F
5 ^% U! h! I. b! t/ E- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )$ ~* h! a, B+ X4 i
- #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET )
3 U7 u( f Q& }" S: e; J - ; F/ v1 a& N8 \: f6 t ~
- 7 O. C9 {) |; ?* z
- /* SPI command for TLE5012 */ R3 \3 I! L8 ]4 C
- #define READ_STATUS 0x8001 //80005 a9 S, O; |2 [' @4 a8 k. p' c: Y
- #define READ_ANGLE_VALUE 0x8021 //8020
2 Y( u* G" U; m8 K0 Z7 l A - #define READ_SPEED_VALUE 0x8031 //80305 m9 ]2 u* r& ]2 O* H- x
-
- j; X4 y |, _ - #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_0001
' f/ n) I' d+ ^8 z, G% U - #define MOD1_VALUE 0x0001( R0 s; X0 i3 c. e7 M; G: l
-
7 y1 q# |5 X% n; [" P* w - #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_00014 p1 b7 P3 \# G
- #define MOD2_VALUE 0x08014 k. m+ J4 O( m2 P/ o4 {
- 6 r& }; d+ a+ G4 P% i& I' s
- #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_0001# ^& V- e' `, S4 S7 O' R; a H6 K
- #define MOD3_VALUE 0x00006 a' a9 X& C) |% _& P& H
- & h1 @4 c5 b$ @/ ^0 ?# E
- #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_0001
- x# f1 G0 v" ^ - #define MOD4_VALUE 0x0098 //9bit 512$ F3 l; w# d7 Q4 W0 B g
-
/ o( H7 \4 C8 K# c% L9 E - #define WRITE_IFAB_VALUE 0x50B12 r9 N4 A) Y. R. V* P: i) {' l
- #define IFAB_VALUE 0x000D! @ R# q8 I! X$ b
- /* Functionality mode */' O9 r, F3 f6 u( R; `, |: y) `" Q
- #define REFERESH_ANGLE 0
9 h! h, S: O2 [% O -
d3 _1 K% }! U0 f% V - void SPI_SendData16(uint16_t SendData);4 c: t0 T" b: K3 f
- uint16_t SPI_ReadData16(void);
, ~0 B* T# e( [6 x1 G0 I - double ReadAngle(void);! p6 y0 n7 }6 B. M6 a; W
- uint16_t ReadSpeed(void);
$ S" |* Q8 N; u$ u$ P - uint16_t ReadValue(uint16_t u16Value);
, v% v$ v% w& l( V! l. ` - uint16_t SPIx_ReadWriteByte(uint16_t byte);. k. _! U( d% y e6 X& D7 T
- uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);+ P) r6 G, t. {( b
- 3 O. k1 |% @2 S6 ~
d& A# U9 ]/ v4 r# x' K* e6 o- #endif
复制代码 4 \# t8 R3 q# g
读取角度打印在串口助手上, _ q- V7 k3 [9 S7 d) ^
( E& Z* {0 f9 a) [# o" h- o( `; b) \
源工程:
tle5012b.rar
(3.55 MB, 下载次数: 476)
|