英飞凌磁传感器 TLE5012b STM32F103 SPI 程序说明

英飞凌磁传感器 TLE5012b STM32F103 SPI 程序说明英飞凌磁传感器 TLE5012bSTM3 程序说明

1.硬件:

   A. 英飞凌磁传感器 TLE5012bE1000

   B. STM32F103

   C. 磁铁,请用“径向充磁”的圆磁铁,如 直径 10 x 厚 2mm,找TB买

2.TLE5012B_E1000 接线说明:

英飞凌磁传感器 TLE5012b STM32F103 SPI 程序说明

3.源码说明:

   A. 初始化 SPI5012B_Init();

   B. 得到 0~359 角度 ReadAngle() 或 角速度 ReadSpeed()

void SPI5012B_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1,ENABLE ); //以下二句,在它处声明,请增加使用 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//使JTDO、JTDI、JTCK 当成普通IO口进行操作 //GPIOB0 当成普通IO口进行操作 /*SPI: NSS,SCK,MISO and MOSI */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//PA5--CLK--复用推挽 GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO_StructInit(&GPIO_InitStructure); /* Configure PA6 as encoder input */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//PA6--MISO--输入 GPIO_Init(GPIOA, &GPIO_InitStructure); /* PA7*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//PA7--MOSI--推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_CS_Pin_Name;//PB0--CS--推挽输出 GPIO_Init(GPIO_CS_Pin_Type, &GPIO_InitStructure); /SPI/ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI1--双线全双工!! SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); }

uint16_t SPIx_ReadWriteByte(uint16_t byte) { uint16_t retry = 0; while( (SPI1->SR&1<<1) == 0 )//发送缓冲区非空 { if( ++retry > 200 ) return 0;//延迟一段时间后返回 } SPI1->DR = byte; //发送数据 retry = 0; while( (SPI1->SR&1<<0) == 0 ) //接收缓冲区为空 { if( ++retry > 200 ) return 0;//延迟一段时间后返回 } return SPI1->DR; //读一下缓冲区,清标志 } //得到 0~359 度 uint16_t ReadAngle(void) { return ( ReadValue(READ_ANGLE_VALUE) * 360 / 0x10000 ); } //得到角速度 uint16_t ReadSpeed(void) { return ReadValue(READ_SPEED_VALUE); } uint16_t ReadValue(uint16_t u16RegValue) { uint16_t u16Data; SPI_CS_ENABLE; SPIx_ReadWriteByte(u16RegValue); SPI_TX_OFF; //发送 0xFFFF 是无用的,可能是为了有时钟 u16Data = ( SPIx_ReadWriteByte(0xffff) & 0x7FFF ) << 1;//0x12/0xff*100k SPI_CS_DISABLE; SPI_TX_ON; return(u16Data); }

/ * @file spi_TLE5012B.h * @author Keith Cheung * @version V3.5.0 * @date 13-MAY-2017 * @brief This file contains the headers of the spi_TLE5012B. * @attention * * * 

© COPYRIGHT 2017

*/ #ifndef _TLE5012B_H_ #define _TLE5012B_H_ #include "stm32f10x.h" //SPI5012B_Init() 时钟需另外加上 //以下内容需按实际更改 #define SPI_TX_OFF {GPIOA->CRL&=0x0FFFFFFF;GPIOA->CRL|=0x;}//把PA7(MOSI)配置成开漏--输入模式 #define SPI_TX_ON {GPIOA->CRL&=0x0FFFFFFF;GPIOA->CRL|=0xB0000000;}//把PA7(MOSI)配置成推挽--输出模式(50MHz) #define GPIO_CS_Pin_Name GPIO_Pin_0 #define GPIO_CS_Pin_Type GPIOB //以下内容一般不需变动 #define SPI_CS_ENABLE GPIO_ResetBits(GPIO_CS_Pin_Type, GPIO_CS_Pin_Name) //片选脚电平拉低 #define SPI_CS_DISABLE GPIO_SetBits(GPIO_CS_Pin_Type, GPIO_CS_Pin_Name) //片选脚电平拉高 //#define INDEX_ENABLE GPIO_SetBits(GPIOA, GPIO_Pin_4)/* for incremental signal index */ //#define CLK_H GPIO_SetBits(GPIOA, GPIO_Pin_5) //时钟脚PA5电平拉高 //#define CLK_L GPIO_ResetBits(GPIOA, GPIO_Pin_5) //时钟脚PA5电平拉低 //#define DATA_H GPIO_SetBits(GPIOA, GPIO_Pin_6) //PA6(MISO)电平拉高 //#define DATA_L GPIO_ResetBits(GPIOA, GPIO_Pin_6) //PA6(MISO)电平拉低 //#define READ_DATA GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6) /* 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 SPI5012B_Init(void); void SPI_SendData16(uint16_t SendData); uint16_t SPI_ReadData16(void); uint16_t 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

4. 源码下载:http://download.csdn.net/detail/keith_cheung/


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219582.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:14
下一篇 2026年3月17日 下午10:14


相关推荐

  • mshta进程「建议收藏」

    mshta进程「建议收藏」进程文件:mshta或者mshta.exe   进程名称:MicrosoftHTMLApplicationHost   描述:mshta.exe是微软Windows操作系统相关程序,用于执行.HTA文件。   出品者:MicrosoftCorp.   属于:MicrosoftWindowsOperatingSystem   系统进程:否   后…

    2022年7月15日
    19
  • java字符串转数组的方法(Java数组转为字符串的函数)

    可能大家都希望字符串直接转成char型的数组吧,因为很多时候要将数字型的字符串进行升降序,而java降序的方法好像只能对char型的数组降序;字符串转Char型数组://朱茂强QQ:896228072(望大牛们多多指教)publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub Stri…

    2022年4月14日
    47
  • webstorm激活码2021(JetBrains全家桶)

    (webstorm激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    316
  • poe交换机跟普通交换机_交换机可以接交换机吗

    poe交换机跟普通交换机_交换机可以接交换机吗POE也被称为基于局域网的供电系统,有时也被简称为以太网供电,这是利用现存标准以太网传输电缆的同时传送数据和电功率的最新标准规范,并保持了与现存以太网系统和用户的兼容性。那么POE交换机和普通交换机之间存在那些不同呢?1.可靠性不同:POE交换机就是支持对网线供电的交换机,和普通交换机相比就是受电终端(比如AP、数字摄像头等)不用再进行电源布线,对整个网络而言可靠性更高。2.功能不同:POE交换机就是除了能提供普通交换机所具有的传输功能,还能给网线的另一端设备提供供电功能。3.优势不同:POE交换机有很多

    2022年10月5日
    5
  • JSONObject与JSONArray的使用

    JSONObject与JSONArray的使用

    2021年12月3日
    114
  • 智谱发布针对 OpenClaw 小龙虾专门优化模型:GLM-5-Turbo

    智谱发布针对 OpenClaw 小龙虾专门优化模型:GLM-5-Turbo

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号