找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来!
$ A1 D/ C+ L' J" v' j/ o
# ^9 n( c1 e7 M+ b6 E% a' G5 E A( \; ?- O$ |
硬件平台:Nucle64-103,使用SPI正常读取即可# p# z* R: e) Y a% W/ D- B
0 F8 N3 E& k$ b2 d, @7 _硬件连接:
. G+ a. \3 j! o) l2 Y# K. m
- e: i \$ m4 S
软件平台:STM32CubeMX+keil5.0+hal固件库8 O% A# Q# x6 T. t9 y. a* j
* c! U: I3 I/ `" c& @9 J; p- #include "app_tle5012b.h"# I- K; u# a) S. G' A$ D$ V4 ?3 B
-
$ _# j9 u) H& C6 E. N4 C8 @# _ - $ O0 ~1 z( J2 T) l; r( |
: a8 ^+ I( p, U- uint16_t SPIx_ReadWriteByte(uint16_t byte); W+ N4 @0 ^* V I* T
- {
2 _% L5 |4 Z$ Z: A; i c1 j% ^
. ^" Y4 l" Z' [, Q: G( K$ n- uint16_t read_value = 0;
6 S0 i0 ?. f! I" H- F8 u& e- ] - 2 i) N9 n3 R! b2 ?5 z! N
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );/ w8 {9 a- J0 `6 z1 ^) {
-
; o3 v; J6 l" f: w8 \ - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );- Z/ s; `. e! _% E7 x5 h% `
- return read_value;2 g. ^( l. ? L; S* i6 x
- }
0 X8 R6 P% G; Y! `$ \ - ! D6 R% _. E7 G: t
- : ]; q! X8 x+ {* E
- double ReadAngle(void)
4 \2 M6 n/ ~: }% G+ a" j& P$ E - {1 @7 _& |; _: G+ ~: q
- return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );! k$ i8 p+ h" [; f0 F0 F
- }* U' \$ E* ~8 J$ e8 A6 V3 {
- ; {9 z- k) v+ ? g
- : L# `# i1 ~& q `
- uint16_t ReadSpeed(void)
% x- c1 M, W; Y o - {0 A) _% R3 c2 J- s+ m/ F
- return ReadValue(READ_SPEED_VALUE);
i8 Q5 D3 T" J& O5 P7 z - }$ Q" s, k) ]0 M7 e9 e1 u4 ?
-
4 Y, Q2 k1 Q0 y* \* z - + Z& P. n. j; d; p, t! L/ Q+ w
- uint16_t ReadValue(uint16_t u16RegValue)
6 e, r; n' p" w1 n2 g$ ~$ _ - {
4 k( |, D3 J7 G9 f4 r; b - uint16_t u16Data;
1 E4 ^* X7 A" m- Q# A+ h. d6 h4 [ -
3 p: K2 t+ F; O: C6 v - SPI_CS_ENABLE;
9 N! ^% A3 k0 Q3 I - 9 M6 L+ R0 o. P2 K
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );; o8 f8 s; R( |+ q
- HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );
, J3 U8 A( B0 [% E5 L -
# k5 ^2 m0 N- x2 Z2 v - SPI_CS_DISABLE;" u( T% E0 U! s* m/ |
- 1 f0 u4 d; j9 s4 j$ x# o6 r
- ! p( s) y; w* J( Y8 F8 P
- return((u16Data & 0x7FFF )<<1);
; z6 j5 V2 q7 S5 N - }+ F) }. U# S0 M. f
# r9 B, z8 N) C' M x$ S
& g9 O: x8 j G8 p1 _; @- ! ^7 f) g' r0 {8 z. Z6 j8 S* Q
复制代码- #ifndef _APP_TLE5012B_H_# ?' U' P8 v# w" {. R. F
- #define _APP_TLE5012B_H_- e. U7 h6 J; h9 U. x4 g( `6 j
4 d1 U" A0 P7 |+ d* L- #include "cpu_common.h"
3 h' U) r( _+ P2 e8 j - ( P$ [9 Z# W& ^+ Q7 Y2 Q0 Z
-
* e4 n, t1 Z5 r! V) @& S; U% @ - ; d+ h4 }' i( G2 F$ ]
- #define GPIO_CS_Pin_Name GPIO_PIN_4
* v: _5 l7 y- h8 a, I( _3 e/ L - #define GPIO_CS_Pin_Type GPIOC
9 j# U' m6 D, q- b: } - % J2 a. {& t$ a- P6 T
) g$ Z( b; L& b- k* M- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )+ v1 Q) r( y/ N" n
- #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET )+ e: _7 x$ G4 x' v/ \# o
- 4 Z- E0 A) J- G0 l0 l$ z- n
-
3 W5 _) r+ N4 M - /* SPI command for TLE5012 */
3 ]9 y4 Y `) `1 E: X# g1 z9 i, U - #define READ_STATUS 0x8001 //8000
9 c; l: ]2 I: z1 r% P+ x0 u3 d) F - #define READ_ANGLE_VALUE 0x8021 //8020
+ T2 ]% B! e! b+ B# p/ C - #define READ_SPEED_VALUE 0x8031 //80305 Q! e3 @* R& O1 r
-
& k6 j; V* T! O6 Z. A2 x5 g$ t - #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_0001* y% s7 r: a! y* g3 e* W) T- V
- #define MOD1_VALUE 0x0001
8 O- K7 d$ }& l2 W! [' q( Q& _$ R - * ^9 l8 ~- n, u, ^- g' a
- #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_0001" s8 ]5 o- y9 c
- #define MOD2_VALUE 0x08010 ]& }( H& s7 z0 y/ L; M9 z( o
-
- R- i' S1 h, q9 g) v5 G& Q - #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_0001 H E- _; _ ^. ^9 H. V
- #define MOD3_VALUE 0x0000
- J$ ~7 H" f4 s T - 7 P) y: J+ B$ h
- #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_00011 S: k# ]1 k7 Y* I9 R3 H, ?
- #define MOD4_VALUE 0x0098 //9bit 5127 m: j' t/ {; B
- ; M' Z: R, Y) A7 p: g/ P: B
- #define WRITE_IFAB_VALUE 0x50B13 V; u! @+ `) t
- #define IFAB_VALUE 0x000D
- }% ?1 d' O9 ]/ X - /* Functionality mode */- L9 S; `1 i; |, D
- #define REFERESH_ANGLE 0. Z% X! h2 z. W+ W& i0 J( W
-
* R: Q" s4 }, v7 | - void SPI_SendData16(uint16_t SendData);& Z- _/ Q1 n- @* _' k+ B, C- P
- uint16_t SPI_ReadData16(void);+ K! T( p- A2 q, T
- double ReadAngle(void);* @' {% v7 d. D9 J
- uint16_t ReadSpeed(void);
5 X/ D' e$ e& _" u' P8 e& l - uint16_t ReadValue(uint16_t u16Value);9 |& Z" x5 t' M9 E" c
- uint16_t SPIx_ReadWriteByte(uint16_t byte);5 L: h- F6 J+ |, L" e) M
- uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);! ~/ Y! n7 r! g. c
7 F) d) p* u& Z/ G- ' [+ B% h" X( I. T
- #endif
复制代码 / I. n. ~) T. r7 A
读取角度打印在串口助手上
# M0 e; s2 Z" |# H% p2 ^7 m
" U5 ^5 A. H8 N0 G& l$ ]: N8 }
: L9 z' n, o4 c: \源工程:
tle5012b.rar
(3.55 MB, 下载次数: 264)
|