找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来!6 |0 E8 \' P2 ?6 i. F& p1 h
- x: Y, s: G- f. k
# u+ { {9 k" S硬件平台:Nucle64-103,使用SPI正常读取即可8 Y! W. v2 ^7 L+ y8 `
7 T( B$ _4 [! r: G9 T" U1 S硬件连接:. N- ]3 ^. d$ c+ M; [' i/ I+ o
. j. y. @, |9 {% Z软件平台:STM32CubeMX+keil5.0+hal固件库
0 B* y( j7 M v0 j' L. o+ J& ^" g
- #include "app_tle5012b.h"1 P. @4 j0 V6 r/ m2 w3 r: D0 T+ p: T
-
2 z7 C2 R7 r$ S2 i+ V
, A4 p( @8 t1 Q" ?- 2 x3 `& y5 M* [/ R
- uint16_t SPIx_ReadWriteByte(uint16_t byte)
& q2 w8 n* L% L; M) g8 { - {
& K% H7 v( c$ x5 c% z0 b2 F
& `7 ~7 M3 n* L( v- uint16_t read_value = 0;( X! h4 J' c7 f
- 3 z! Q) _* U2 t' ^$ t6 y/ \; Y
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );
/ s: N# k' D9 P# _( q -
- v- f: D! N; A) H+ J! P( l* [2 M - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );
- t# b1 w6 ]* T! _ - return read_value;5 k6 U$ [2 g$ O- M
- }6 ?% o) C* k1 i: w" d
-
+ ] t7 k6 m5 g4 Z - 2 ^ H- k! h7 B; B2 P& A' j" i
- double ReadAngle(void)' x. q; R# p6 U9 `2 l
- {8 S5 C! K8 n6 r2 F
- return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );. h" K9 l/ k' ]) _$ n) W
- }" R, p! E0 S1 j8 s5 J
-
) Y2 j8 r" `+ S9 V. [% ` r8 a - 4 J9 Z' B/ k9 n; K w% ^& l* }
- uint16_t ReadSpeed(void) W' _- l" |& g+ e. w# ?( K* p
- {% ?& p* u, Z7 v, y/ M) J
- return ReadValue(READ_SPEED_VALUE);; c. l) C1 V+ s) k
- }
) ]7 x, B; F9 z - 8 A/ C* I, C8 U: g- H8 _0 e+ g+ c
- % `5 V8 o# a/ R/ {( {# M
- uint16_t ReadValue(uint16_t u16RegValue)5 k2 {1 x& d c% F
- {
/ K% y3 T8 f7 h! w* a6 t$ | - uint16_t u16Data;
: I' Q, c, F, e* p -
7 V. d# @; t7 ? - SPI_CS_ENABLE;
" K9 C0 ]( H' Y: g% l3 u- _ -
. p7 [. T' ?4 G9 G! v; D8 [: n2 t - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );/ b5 ]9 t! K! r/ x1 o) p
- HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );& L0 `' V1 t0 T& S
-
& r& Q) V$ n+ y g3 k - SPI_CS_DISABLE;. a% r5 {3 A1 \& x4 w
- 0 g+ M9 |6 x* [" {8 y
-
) `' `8 p4 m; @ h, _ - return((u16Data & 0x7FFF )<<1);2 @; F5 ^& T8 ~1 K1 R# m, G3 \
- }1 F4 g4 @! e. g) K; L$ q* U( w% j
8 r( L. X$ ~( a- 7 { v# p1 |! z/ B( \* [9 O8 i5 E
$ V$ [9 v' E9 h, w% {* `9 C q
复制代码- #ifndef _APP_TLE5012B_H_# d: y7 N' a4 I, O! V9 e
- #define _APP_TLE5012B_H_
( O" v- D$ q+ Y5 `2 u: ], M
* u0 a$ G$ b5 }3 @# Q) ]! j+ J- #include "cpu_common.h"
! h7 z! p; F" Z M - , L7 E) }; E. {% T/ ? S3 y- L% v
- & |& B' N- L: N6 H) j, l5 a ^% f
-
/ }3 D e: [9 _! O( b3 L$ h4 J - #define GPIO_CS_Pin_Name GPIO_PIN_4, D1 S' L1 r. X" s% K+ v
- #define GPIO_CS_Pin_Type GPIOC
' ?5 `+ d3 ^' c4 U% q
- c9 \1 M' d9 r! O; M& K( ]- 2 z' _2 S4 K( N1 p5 k8 P
- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )4 |& F& Q! Z) C1 v: @2 Q
- #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET ) n1 _- z& P' H/ Y8 L: p
. I! x5 r- }9 J- . f3 A/ B& {; _' w
- /* SPI command for TLE5012 */( P% l2 T6 g/ C$ s% D) t4 S
- #define READ_STATUS 0x8001 //8000
; J o/ ~2 O2 b6 ?" I - #define READ_ANGLE_VALUE 0x8021 //8020% B: ]4 @. V* c k; @
- #define READ_SPEED_VALUE 0x8031 //8030
8 ]* M2 w/ V' b' S& [: F" @8 u -
# A/ M/ U& f* a8 l0 C% ^ - #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_00011 J8 q H6 {. n0 x' Z
- #define MOD1_VALUE 0x0001
& P4 U/ Q) C+ c' P; R6 x -
* {' s F. f, c q$ c K# L - #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_0001
+ i: E' I! T, L) y" b- q$ @, ^ - #define MOD2_VALUE 0x0801
4 h) j( _$ t/ Y& k -
1 [0 C! D4 {1 S8 f' @) s3 a$ U/ Y - #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_0001
# w$ Q3 ]1 `: |3 } - #define MOD3_VALUE 0x0000
( y- k1 ]) M- q9 S. y9 I* {4 v' Q -
$ t) l" b. F1 z- G - #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_0001
4 [5 O% D/ f' d6 B - #define MOD4_VALUE 0x0098 //9bit 512
4 K# H$ P+ n5 l0 v: A x- p -
r9 N: h) e$ v3 |4 i5 k Z1 A) q/ ~ - #define WRITE_IFAB_VALUE 0x50B1
! W2 w3 c3 D! ^% V# u3 n$ K8 p - #define IFAB_VALUE 0x000D
* o' G/ T/ B4 n7 ?) ^- } - /* Functionality mode */6 s& D; j! n% @7 Q
- #define REFERESH_ANGLE 0
$ M+ z8 H& B1 }8 L, D! U - 4 v* H# n. \6 W, f- O+ u
- void SPI_SendData16(uint16_t SendData);
2 f, F; S$ p1 o( r2 b- ] - uint16_t SPI_ReadData16(void);8 V3 y/ B" Y9 v2 X0 O9 _8 P: @+ W
- double ReadAngle(void);( p& ~( n2 E4 w* E
- uint16_t ReadSpeed(void);
5 v/ e4 i( H8 N' C. M7 \- K* N+ P9 m - uint16_t ReadValue(uint16_t u16Value);
4 z) g: \( w% E - uint16_t SPIx_ReadWriteByte(uint16_t byte);+ T) r5 b9 T0 @( d4 F+ L' ?$ j
- uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);! X( X# t& z0 V6 v* @6 ?
- 1 B& p1 D& h* h/ a& h
8 W& S, q/ s1 X- L- #endif
复制代码 * }' t! H+ n \- W8 Z" |
读取角度打印在串口助手上
$ v6 o/ c' D5 d/ V! D
+ V z+ v; v/ W y! |; r' _' V$ \
8 k# f1 _6 V2 Q. @1 e C源工程:
tle5012b.rar
(3.55 MB, 下载次数: 290)
|