找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来!/ I1 p! ~0 [. o( U
9 N; V) e/ A& W. B8 `# z
/ R2 e/ }! Z0 m) ^$ ^/ }8 r硬件平台:Nucle64-103,使用SPI正常读取即可7 S% x1 Q. h5 r( f% G/ X1 i
3 I. D/ i! p' X1 {硬件连接:, Z6 ?! y1 y: D& g
, P# X: Y+ |0 J$ \) ]软件平台:STM32CubeMX+keil5.0+hal固件库. k* u, _+ D2 i2 y6 Z0 h$ z
& U- s9 \3 Y, I+ P/ T& O3 p+ W
- #include "app_tle5012b.h"' P9 l0 {' g! u( v/ s8 L) y+ G
- ; b, g" B6 o7 v, \) G; r
6 I. l& m. B; v
$ I _4 ~& g, r& H2 i; q- uint16_t SPIx_ReadWriteByte(uint16_t byte), ~1 [/ @' I/ S- q# R2 J
- {2 z; F h# D7 h. n. J/ K9 j2 [
% Y3 }8 I) F P4 w! V- S, m- uint16_t read_value = 0;
s% T, W( B; R) ` F0 a -
+ s m0 P) U2 d: e( d+ ] q - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );
# w) C& h9 k0 {; o- U) V! { -
+ ~7 ]- J3 y6 @5 T - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );
2 O1 B3 ?1 n: c% j. k# | - return read_value;' g/ M# V J' U- y
- }2 H# V7 i" l$ A7 u @" B
- 5 J0 { ]9 t" U v' w$ |. b* m2 m1 g ~
3 Q3 O' l( n1 E+ @1 u, Y- double ReadAngle(void)
2 ]: V; b1 ~& [6 i: r7 W - {
$ a* b% l2 _1 H - return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );7 H2 Y" B8 z# x3 m* ~* ]! c, q
- }) t$ S; l% x9 k+ w
-
* K- J9 k$ y$ Z. ^+ X. D+ W
5 v8 {- s6 M, l3 b- uint16_t ReadSpeed(void)
* b, x- l* b( a - {
! R/ B8 {0 E' A) |* s - return ReadValue(READ_SPEED_VALUE);
/ @7 @ o! V# C( J - }
3 w8 M8 `6 I$ C" o& G% r - ' `, }0 n$ f: I0 x- q8 I
- / V$ O3 Z/ \2 E
- uint16_t ReadValue(uint16_t u16RegValue)9 z2 N+ k- s( |7 Y3 H A
- {9 V2 U: P$ F5 i5 S+ _ m
- uint16_t u16Data;
( a3 ^, T$ _) m6 t -
" h! t4 D; F# v' N - SPI_CS_ENABLE;9 W+ c6 Q, R T: u) c
- * @9 `8 m, D4 E3 ~+ `& ]
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );4 ]6 ?2 k: i1 F: Y0 {" f
- HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );2 }* Y' B: e' _+ R8 N
-
/ L. E# p8 x8 C% Y( R1 d, O; W - SPI_CS_DISABLE;2 T# L. y5 R0 ~- w! T" G& H6 w, a
+ s/ t5 T" R* \; E( W3 u- , W/ b1 _! l2 ~0 L
- return((u16Data & 0x7FFF )<<1);
2 @: g7 p6 {! i4 T' E7 n: y4 `& O - }- H+ s3 a/ [) g5 ~% B3 o( G; z/ q3 X
7 E# ?$ }4 V8 m. C- 5 p$ X1 y4 I! q h8 E0 B, @, E5 l" s
, e( ? x z8 ^) Y& X: a1 i2 L/ }1 B6 T
复制代码- #ifndef _APP_TLE5012B_H_
9 r% j2 q: s( P5 C' ^1 ?6 o - #define _APP_TLE5012B_H_
5 c& ~+ h9 q5 ^# h( q: {! e& D
E7 O7 P& ~, N) R- #include "cpu_common.h"4 q4 h$ G2 \" y; q. h
- 7 L" i4 }3 s/ s2 n/ ]% ^
- & F. S, F4 @; ]2 ?4 Q
-
1 y% E( C- P5 B - #define GPIO_CS_Pin_Name GPIO_PIN_4" D1 G) o' j( Z4 ]& _, [7 ]# _
- #define GPIO_CS_Pin_Type GPIOC
* M( r1 I# j$ w( p% ` - : i- P9 }4 M2 u- H$ U- A; e
- : R) p) A* r) f- j( x
- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )' U- Y7 R! f- ]; V- j
- #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET )
- t6 B: Y( ^/ H. Q - ! a8 _$ M$ B u7 f Z+ p e0 G; p
- 0 C. t! }* O6 J+ R/ u
- /* SPI command for TLE5012 */
; r# m- |: h& z# C) G) w3 f) _ - #define READ_STATUS 0x8001 //8000
$ C; s6 j% Q; W& {) V& _$ } - #define READ_ANGLE_VALUE 0x8021 //8020
8 l; ?" O/ w# q - #define READ_SPEED_VALUE 0x8031 //80304 [6 |& C% {. r, K# j1 g
- 3 _- \( p2 H$ w2 }& p# c
- #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_00013 w. C& I( _" @4 Z: ]1 z0 n
- #define MOD1_VALUE 0x0001
: ?% v) O/ g8 N& m -
$ R8 b9 b2 ^$ B: [# ^3 O - #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_0001
* Q0 a: T; |% z# v - #define MOD2_VALUE 0x0801
0 c1 O9 [, K% }4 v - " r T/ o; `+ _3 |0 {! B% }, a
- #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_0001* ]7 E' h1 q/ C; X9 F
- #define MOD3_VALUE 0x0000
0 i N# \% U$ S- u - * i5 ~ r* G& [. N& C* S; U7 k5 a
- #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_0001
0 G; \: C; a8 W* }: a - #define MOD4_VALUE 0x0098 //9bit 512
P& _8 H1 C* O7 h! i# z -
+ E' |' s3 ^" `% N T - #define WRITE_IFAB_VALUE 0x50B1
! ?# a, A0 |7 t" ^! [! f - #define IFAB_VALUE 0x000D
, Q; P, M4 g* d5 ] - /* Functionality mode */
6 _! B- g9 Y( i5 t - #define REFERESH_ANGLE 0
/ k& O5 ]& _2 K( n -
# K9 ` l; N9 e* U - void SPI_SendData16(uint16_t SendData);
" L; Q4 ?" `* U" U& U - uint16_t SPI_ReadData16(void);: a. o+ \% t4 m- K* ~
- double ReadAngle(void);- G$ C3 j! m% W8 ] [2 p9 _
- uint16_t ReadSpeed(void);1 x: j# m5 m0 @8 p' g: `
- uint16_t ReadValue(uint16_t u16Value);1 d& p4 H. Y. Y: w# m
- uint16_t SPIx_ReadWriteByte(uint16_t byte);
$ Y1 d9 e9 f6 r b0 c7 e - uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);* Y5 B; p& Z8 Y
8 O$ B7 F$ Z# y* s- 3 }) j" Y: s6 l4 j X
- #endif
复制代码 9 F0 {5 U4 L h9 [; E+ o) C
读取角度打印在串口助手上$ M" D/ c. y; u8 b3 a/ Z/ i
6 O, x; u6 O. d) R
( {) }$ u( n3 O- ^! s7 N1 s
源工程:
tle5012b.rar
(3.55 MB, 下载次数: 485)
|