找了一下网上的驱动程序,就一份程序被抄来抄了,有啥意思?。作者还不愿意把源代码公布,把电路和程序弄得又复杂,还要加上拉电阻,软件读取数据还要配置MOSI为开漏输入,心累。所以自己改了,现分享出来!
硬件平台:Nucle64-103,使用SPI正常读取即可
硬件连接:
软件平台:STM32CubeMX+keil5.0+hal固件库
- #include "app_tle5012b.h"
-
- uint16_t SPIx_ReadWriteByte(uint16_t byte)
- {
- uint16_t read_value = 0;
-
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&byte), sizeof(byte)/sizeof(uint16_t), 0xff );
-
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&read_value), sizeof(read_value)/sizeof(uint16_t), 0xff );
- return read_value;
- }
-
- double ReadAngle(void)
- {
- return ( ReadValue(READ_ANGLE_VALUE) * 360.0 / 0x10000 );
- }
-
- uint16_t ReadSpeed(void)
- {
- return ReadValue(READ_SPEED_VALUE);
- }
-
-
- uint16_t ReadValue(uint16_t u16RegValue)
- {
- uint16_t u16Data;
-
- SPI_CS_ENABLE;
-
- HAL_SPI_Transmit( &hspi1, (uint8_t *)(&u16RegValue), sizeof(u16RegValue)/sizeof(uint16_t), 0xff );
- HAL_SPI_Receive( &hspi1,(uint8_t *)(&u16Data), sizeof(u16Data)/sizeof(uint16_t), 0xff );
-
- SPI_CS_DISABLE;
-
- return((u16Data & 0x7FFF )<<1);
- }
复制代码- #ifndef _APP_TLE5012B_H_
- #define _APP_TLE5012B_H_
- #include "cpu_common.h"
-
-
- #define GPIO_CS_Pin_Name GPIO_PIN_4
- #define GPIO_CS_Pin_Type GPIOC
- #define SPI_CS_ENABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_RESET )
- #define SPI_CS_DISABLE HAL_GPIO_WritePin( GPIO_CS_Pin_Type, GPIO_CS_Pin_Name, GPIO_PIN_SET )
-
- /* SPI command for TLE5012 */
- #define READ_STATUS 0x8001 //8000
- #define READ_ANGLE_VALUE 0x8021 //8020
- #define READ_SPEED_VALUE 0x8031 //8030
-
- #define WRITE_MOD1_VALUE 0x5060 //0_1010_0_000110_0001
- #define MOD1_VALUE 0x0001
-
- #define WRITE_MOD2_VALUE 0x5080 //0_1010_0_001000_0001
- #define MOD2_VALUE 0x0801
-
- #define WRITE_MOD3_VALUE 0x5091 //0_1010_0_001001_0001
- #define MOD3_VALUE 0x0000
-
- #define WRITE_MOD4_VALUE 0x50E0 //0_1010_0_001110_0001
- #define MOD4_VALUE 0x0098 //9bit 512
-
- #define WRITE_IFAB_VALUE 0x50B1
- #define IFAB_VALUE 0x000D
- /* Functionality mode */
- #define REFERESH_ANGLE 0
-
- void SPI_SendData16(uint16_t SendData);
- uint16_t SPI_ReadData16(void);
- double ReadAngle(void);
- uint16_t ReadSpeed(void);
- uint16_t ReadValue(uint16_t u16Value);
- uint16_t SPIx_ReadWriteByte(uint16_t byte);
- uint16_t TlE5012W_Reg(uint16_t Reg_CMD, uint16_t Reg_Data);
- #endif
复制代码
读取角度打印在串口助手上
源工程:
tle5012b.rar
(3.55 MB, 下载次数: 300)
|