找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来!
. i# c: j" F9 q1 j4 r& C6 C1 i) t$ K3 d
: p2 \ T4 g5 p1 i+ z: F" |3 _
硬件平台:Nucle64-103,使用SPI正常读取即可# f& |7 L% X( W0 {' w+ t; u
- d: |" D. n7 y8 L8 _; l4 n
硬件连接:/ p2 z' d' x. v3 O/ W* @
, O! c- e4 v/ U# ?! g( k3 G; T软件平台:STM32CubeMX+keil5.0+hal固件库- u6 _! m) A- T! I/ A9 _ T+ `# a
, I+ k4 }5 W3 ]+ W D& y: _- #include "app_tle5012b.h"
7 P& j% w" U u3 [$ ] - & C- J* |+ J) b" v6 s
- 4 L. U/ H! N. b! d6 m; [
9 {5 A; h8 [0 N7 ~; r' F, V- uint16_t SPIx_ReadWriteByte(uint16_t byte)! Z0 U @, ~) D" W9 k
- {
* ?) d/ e8 N: z$ u3 j - 1 p% \7 @; }. \7 _0 m+ m; Q( n% c( F
- uint16_t read_value = 0;4 h1 L9 Y7 T$ [7 k: ]
- + f8 }) V2 g8 \0 G/ g! D
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );
* \" U1 W6 Q) m1 T* m" h+ [: k) a -
2 S& z9 Y! h( ~! d' @8 C - HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );
3 P/ y( r3 m. B" Z - return read_value;' z/ Y% r# p0 m3 z3 t+ T- t, w$ b
- }
7 c4 o6 O5 m$ ^ -
0 i3 F6 d% ]! a* d# v$ A. ^ - % G* N( Y$ B3 R; k5 i8 g6 D
- double ReadAngle(void)2 p; k7 [( [/ i. A
- {
, H$ k; S/ [9 \; J - return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );
j1 C$ i" y8 _0 F' j - }' f. _$ S; O) G* P2 U, j4 G9 f* j) |- j
-
2 v5 F9 O* l Y/ p# G6 s - ! o7 W) L3 N+ _5 T2 D
- uint16_t ReadSpeed(void), ?, p0 e8 W5 M2 U+ [
- {
- f& w& a8 W- v5 h* Q. W7 f1 g R - return ReadValue(READ_SPEED_VALUE);
+ F" `% f; g6 D( m - }$ K+ A+ i/ r- l0 w3 L
-
( k- @( Y% \ @3 _ -
( P. a0 M" U. ` - uint16_t ReadValue(uint16_t u16RegValue)3 j* t. V! Z, i9 {. G {- K
- {
+ y+ C" V' I9 Q, B m - uint16_t u16Data;+ J% l( Y$ I0 A2 w' X& m E4 c% G# L
-
; V5 n T+ a3 P O w/ m$ V2 S - SPI_CS_ENABLE;
* ], g" a9 W; X8 K' l - ) O6 L* T2 h6 D8 }
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );
6 i% ^+ }9 N+ ]7 ] - HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );; ~* ~2 k) m2 p$ q. ^
-
$ A: m$ l S! Q2 n" U8 ^, ?1 ~ - SPI_CS_DISABLE;
& I' K* n# N' x* ?/ v
& y2 l- ?% \) N2 d, e5 D6 h' }! {-
: ~2 g: v" c/ f, D3 C5 I - return((u16Data & 0x7FFF )<<1);/ Y5 d* d3 C) q H- a( O
- }
5 X$ [5 s) t6 {# `$ |, f) L- R
% ~" H) Q$ I) ?5 p$ k
R0 D& v7 Q4 U2 X$ l- 4 k1 h1 p1 q- S# l* _' k
复制代码- #ifndef _APP_TLE5012B_H_
, m8 |8 w1 `1 ]6 y% l - #define _APP_TLE5012B_H_; R0 K# [- C4 [7 @) f, W3 s$ s
, j; b6 h. K. a- {% p! d- #include "cpu_common.h"
) {1 O* l# ?5 }) u" q7 T
2 ^. P9 W+ z0 D& a-
6 l. E# X# I! [. v9 f7 f* w - . f/ L( |0 U: N' f$ o) g$ Y
- #define GPIO_CS_Pin_Name GPIO_PIN_43 c2 u2 r, u$ {, j
- #define GPIO_CS_Pin_Type GPIOC2 k# D, @4 m6 U, M1 J9 A+ C$ G3 W
' G/ q$ y! u- C: S3 x- 7 F+ o2 _2 z* G. b; x* B
- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )6 ~4 x, l1 f+ P, p0 f
- #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET )1 S2 e$ b9 ^1 F, v% J$ ?; w3 {$ I
+ D3 F; l, \( s- $ A; @* H3 l+ o0 l4 ^0 N- K
- /* SPI command for TLE5012 */
) s8 w, M. n! M( R3 [ u) q- N - #define READ_STATUS 0x8001 //8000
! `8 V' }$ N: z# U - #define READ_ANGLE_VALUE 0x8021 //8020
' b: R0 N0 l' H* a$ e4 `, ] - #define READ_SPEED_VALUE 0x8031 //8030
. h& D% B- _' |# o' B -
+ `/ @8 E& o6 W" S! _# D4 H - #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_0001
z9 \) K# D. Z% F - #define MOD1_VALUE 0x0001
+ A9 _9 P Y" S: @4 n8 _ - . v5 {8 p; ~+ k7 z0 [) ~0 R- {
- #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_0001! c7 [! l( \) ~
- #define MOD2_VALUE 0x0801
7 S$ d( E1 r* W* Z) H+ [( p -
: L- G8 z- v7 w" e% r3 w6 S8 T# ]) V - #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_00015 x; m6 r. N3 Z$ x! [& U, }
- #define MOD3_VALUE 0x0000
3 v& L4 S' ?: b/ O6 T -
' P. \% A# j+ F- n - #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_0001
6 z$ N7 W9 s+ d2 P; f% H" e - #define MOD4_VALUE 0x0098 //9bit 512
# f/ J' ?7 D' R& E# ^! C- ~ -
! E. {) _6 _0 C6 ]- C. v - #define WRITE_IFAB_VALUE 0x50B1 O; k& A* B0 @6 e
- #define IFAB_VALUE 0x000D
* E$ C: K6 i- y1 M% m& C - /* Functionality mode */% E8 n( D5 D( `, \' G
- #define REFERESH_ANGLE 0. l9 n# ?9 r/ v! h0 z
-
9 w. m* W, g! k/ f - void SPI_SendData16(uint16_t SendData);) K% K' f. E7 ~
- uint16_t SPI_ReadData16(void);
$ j1 G; y$ \& Y, `! U, {2 Y H l1 A - double ReadAngle(void);3 F4 }- f5 f# b$ m8 _+ y
- uint16_t ReadSpeed(void);
B o% x' L7 C" _$ |* i1 k6 E) G - uint16_t ReadValue(uint16_t u16Value);
1 H) E$ |6 D# J3 p) i1 r* R9 E - uint16_t SPIx_ReadWriteByte(uint16_t byte);
- W+ L* v. z0 o3 g4 z, n - uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);
& i p/ T8 B8 V. H6 k
. T7 A# j# B# ]- W. D; x
. D C8 ~4 l' I6 `- #endif
复制代码 & s: c* }) @ j
读取角度打印在串口助手上
4 u. l" L4 m( B! F: }8 ?, u% h
' D- W& f5 T& V" F
' r& h# A, I) Q* V) Y, v6 g源工程:
tle5012b.rar
(3.55 MB, 下载次数: 264)
|