对一款国产3D霍尔传感器的SPI封装

发布者:山宝宝最新更新时间:2024-01-08 来源: elecfans关键字:国产  STM32F4 手机看文章 扫描二维码
随时随地手机看文章

对一款国产的3D霍尔传感器的SPI封装.上

这篇文章完成我们的封装,以及在STM32F4的板子上面测试。

一次费我这么多引脚,我吐了。看来得上IIC,然后就是板子的引脚选择注意在cubuMX里面和实际的板子丝印多次比对,一个中断脚改了两次,气死我了。

BUTT_OUT 管脚用于检测磁铁与芯片之间的按键功能,并且也可以配置为 Trigger 模式,触发单次测量。

INT:主机向芯片发送持续感应模式或单次测量命令,芯片完成一次对应测量项的测量后,INT 脚会置 1,并且在芯片发送读取命令,读回测量数据以前,都保持为 1。主机向芯片发送唤醒睡眠模式命令后,当芯片周围测量项的变化量超出寄存器中设定的变化阈值时,INT 脚会置 1,并且在芯片发送读取命令,读回测量数据以前,都保持为 1。

芯片开启唤醒睡眠模式后,当芯片周围的某一测量项强度发生变化,且当前强度与基准值的差值,超出阈值寄存器中设定值时,芯片 INT 脚会拉高。在主机通过测量数据回读帧(data Read Frame),一次性将测量数据读回后,INT 脚拉低,否则保持为高电平。芯片 INT 脚不会主动拉低,即某一时刻被测量项的强度与基准值差值,超出设定阈值,INT 脚拉高后,如果下一时刻,被测量项的强度减弱,此时差值低于设定阈值,但主机没有读回测量数据,INT 脚并不会主动拉低。

010abf12-3b1b-11ee-9e74-dac502259ad0.png

除了重置芯片,其他命令发送完后芯片均会返回芯片运行状态(status)说明。

01281cba-3b1b-11ee-9e74-dac502259ad0.png

重置

01499cf0-3b1b-11ee-9e74-dac502259ad0.png

018738f8-3b1b-11ee-9e74-dac502259ad0.png

01cd810a-3b1b-11ee-9e74-dac502259ad0.png

定义registerName变量,用于保存寄存器地址。

定义一个comWR数组,用于保存写入命令的数据。

将要写入的寄存器地址Register,左移2位后赋值给registerName。这里的左移2位很可能是因为寄存器地址需要以字(Word)对齐。

组装写入命令数据:

comWR[0]写入命令字WRITE_REGISTER

comWR[1]写入要写入数据的高8位

comWR[2]写入要写入数据的低8位

comWR[3]写入目标寄存器地址registerName

这样就组装好了一个完整的寄存器写入命令。

所以这段代码的主要作用就是根据传入的寄存器地址Register和要写入的数据writeData,规范地组装成一个寄存器写命令,保存在comWR数组中。

01f5e3fc-3b1b-11ee-9e74-dac502259ad0.png

再来一段延时的代码

定义一个uint8_t类型的循环变量i。

for循环从0循环到4,共执行5次。

每次循环中调用__NOP()空操作。实际上是一个微秒级的延时函数

0204cade-3b1b-11ee-9e74-dac502259ad0.png

事实上,在HAL库里面是有一个延时的函数的

获取当前的系统tick计数作为起始tick值。

将需要延时的ms数保存在wait变量中。

如果延时小于HAL_MAX_DELAY,添加一个系统tick频率uwTickFreq,这个操作是为了保证至少延时1个tick。

循环查询当前tick和起始tick之差,直到大于或等于需要延时的tick数wait。

这样就可以实现精确的ms级延时等待。

整体来说,这是一种常见且高效的延时实现方法,通过查询系统tick计数器来判断延时时间,避免了空轮询耗时。

但是自带的延时函数是ms的,我们需要ns的,所以上面就又写了一个。

主机向芯片发送唤醒睡眠模式命令(0x28)

0220d8fa-3b1b-11ee-9e74-dac502259ad0.png

这个是设置的命令

芯片上电后,进行内部初始化,当电源稳定后读取OTP的值到对应的寄存器中,上电后4ms内完成OTP的读取,在上电后4ms内不允许进行通信,当初始化完成后芯片进入空闲状态,允许通信测量。

023831e4-3b1b-11ee-9e74-dac502259ad0.png

这里就这样写就行

02550df0-3b1b-11ee-9e74-dac502259ad0.png

这个就是一个中断的接口

数据OK了以后,就设置为了,这个是引脚中断。

027af074-3b1b-11ee-9e74-dac502259ad0.png

读取到这值以后

02a40c7a-3b1b-11ee-9e74-dac502259ad0.png

这个就是

02c50952-3b1b-11ee-9e74-dac502259ad0.png

定义counter变量,初始化为1,用于保存需读取的数据计数。

定义com变量,用于保存读取命令,其中包含了轴信息axis。

进入for循环,循环4次,对应4个轴(XYZ)。

每次循环:

根据axis的最低位值,如果为1则计数加2,如果为0则计数不变。

然后右移axis的位,判断下一位。

这样通过位运算判断axis的每一位,根据每个轴是否启用来累加计数。

最后counter保存总的需读取数据计数。

02e586aa-3b1b-11ee-9e74-dac502259ad0.png

接着把中断号码来还原,等着下次继续

用于解析传感器读取回来的数据,并计算出三轴xyz的数据。

主要逻辑是:

从DataReadFrame数组取出两两字节的数据,分别对应温度t和三轴xyz。

对xyz各轴数据,通过位运算(左移8位)和按位或运算来组合两个字节的数据。

例如x轴,高字节DataReadFrame[3]左移8位,低字节DataReadFrame[4]不变,最后进行按位或,就可以组合成16位有符号整数数据。

温度t也是同样的处理过程。

030acd2a-3b1b-11ee-9e74-dac502259ad0.png

开始选择SPI

03495e28-3b1b-11ee-9e74-dac502259ad0.png

对着数据手册好好看

035d9d70-3b1b-11ee-9e74-dac502259ad0.png

CS引脚

03855310-3b1b-11ee-9e74-dac502259ad0.png

这个就是中断了

0399f0b8-3b1b-11ee-9e74-dac502259ad0.png

TRIG

03c20e18-3b1b-11ee-9e74-dac502259ad0.png

记得打开中断开关

03d31b68-3b1b-11ee-9e74-dac502259ad0.png

为了好计算,时钟都是1Mhz

03f16942-3b1b-11ee-9e74-dac502259ad0.png

0419a6b4-3b1b-11ee-9e74-dac502259ad0.png

第一次通过

error: call to undeclared library function 'printf' with type 'int (const char *, ...)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]


043d904c-3b1b-11ee-9e74-dac502259ad0.png

这个是忘了加头文件,以及如果用microLIB就要加stdio

04570ee6-3b1b-11ee-9e74-dac502259ad0.png

047a43b6-3b1b-11ee-9e74-dac502259ad0.png

这个是因为,你在文件层面的添加是无用的,记得在这里添加

04a33140-3b1b-11ee-9e74-dac502259ad0.png

OK

04d46634-3b1b-11ee-9e74-dac502259ad0.png

确定无误

04fb553c-3b1b-11ee-9e74-dac502259ad0.png

上传成功

0516941e-3b1b-11ee-9e74-dac502259ad0.png

这里就是调试,但是我没有磁铁不知道是不是没有感应到信号

053320ac-3b1b-11ee-9e74-dac502259ad0.png

调试页面


关键字:国产  STM32F4 引用地址:对一款国产3D霍尔传感器的SPI封装

上一篇:标准库函数与基于HAL库函数的说明
下一篇:嵌入式开发中需要注意的几个C用法介绍

推荐阅读最新更新时间:2024-11-10 20:19

国产内存真的来了:紫光可提供DDR3、DDR4内存芯片
  还记得前段时间闹得沸沸扬扬的国产 DDR4 芯片的传闻吗?当时有消息称 紫光 旗下的半导体公司量产了国内首个 DDR4 内存,只是这事疑点重重,最后 紫光 官方也辟谣称目前并没有 DDR4 内存量产,相关产品正在研发中。下面就随网络通信小编一起来了解一下相关内容吧。   国产内存真的来了:紫光可提供DDR3、DDR4内存芯片   现在国产DDR4内存又来了,涉及的还是 紫光 旗下的西安国芯半导体,其官网页面明确提到了可以长期供应DDR3、DDR4在内的DRAM芯片和裸晶圆。   这次涉及国产DDR4的还是紫光集团的子公司紫光国芯,旗下拥有西安紫光国芯、深圳国微、紫光同创等公司。根据官网介绍,“紫光国芯是紫光集团旗下半导体
[网络通信]
纳芯微电子姚迪:模拟芯片不完全依赖先进制程,是国产芯片机会所在
10月31日,2023全球新能源与智能汽车供应链创新大会在广州召开。在11月1日的汽车芯片分论坛上,纳芯微电子副总裁姚迪围绕新能源汽车,做出了关于汽车芯片供应链方面的思考。 纳芯微电子副总裁姚迪; 图片来源:中国电动汽车百人会 姚迪表示,第一,这几年来,新能源汽车开发迭代速度明显加快,传统汽车开发可能要4-7年,应用5-8年,然而现在迭代速度被大大缩短,可能只有2-3年。中国本土企业甚至更快,可能是1-1.5年的迭代速度。这导致芯片的整个技术迭代随着汽车的迭代进一步加速。同时,整个供应链结构已经演变成网络结构,不再是链式结构,这也要求芯片公司跟Tier 1以及主机厂,三方紧密合作,来推动产品芯片的技术研发。 第二
[汽车电子]
纳芯微电子姚迪:模拟芯片不完全依赖先进制程,是<font color='red'>国产</font>芯片机会所在
联发科的盛与衰:曾经的国产之光 如今仅被两家选择
  说起 联发科 (MediaTek)或者是 MTK 这两个名字,相信第一时间就会想起他们曾经推出过的 Helio X20、P10、X10 这些明星处理器。目前,全球拥有研发或制造移动级处理器芯片的大厂一共有五家,分别是美国的高通、苹果、韩国的三星、我国的海思以及 联发科 。下面就随手机便携小编一起来了解一下相关内容吧。 联发科的盛与衰:曾经的国产之光 如今仅被两家选择   可尽管如此,大部分手机厂商都没有将自家所研发的芯片出售给第三方,仅用在自家的最新设备里。除了三星曾经将少批量的 Exynos 5430 出售过给魅族外,目前能够将处理器芯片制造并出口的,就剩下高通和 联发科 两家。    (高通骁龙 835 处理
[手机便携]
联发科的盛与衰:曾经的<font color='red'>国产</font>之光 如今仅被两家选择
机构:国产DRAM内存芯片和三星的技术差距缩短至5年
数字经济时代,芯片扮演着重要角色。得益于人才聚集、产业升级、政策扶持等,我国的半导体产业正在蓬勃发展,并不断拉近与先进地区、企业的差距。日前,韩国研究机构OERI在报告中称,估计韩企和中国厂商在DRAM芯片的技术差距已缩短至5年。 具体来说,三星和SK海力士计划在年底前投产第五代10nm级(1b或者说12nm)内存芯片,国产DRAM代表企业合肥长鑫今年的打算则是第二代10nm(1y或者说16/17nm)。 一般而言,DRAM每一代的演进时间是2年到2年半。 按照正常节奏,国产内存芯片完全有机会进一步缩短差距,可目前有一个比较棘手的问题在于,三星和SK海力士已经为生产更先进的DRAM芯片引入了EUV(极紫外光刻)设备,
[手机便携]
机构:<font color='red'>国产</font>DRAM内存芯片和三星的技术差距缩短至5年
国产MCU的GD32E230串口通信
之前一直使用ST的STM32F031单片机,但是由于疫情还是啥啥原因,ST的芯片价格涨得没法看,因为我们是做产品,而且量比较大,ST的芯片就无法再用了,这个成本真的扛不起。 于是在很多国产MCU里面做了甄选,最终GD的因为新能优越,价格便宜获选。GD32E230对标的STM32F031,实现了PIN TO PIN兼容,寄存器不是完全兼容,但是GD的主频可以实现72M,这就很恐怖,STM32F031才48M,之前还得超频到56M使用。不得不说,GD强! 仅仅对比固件库,GD的库函数封装的比ST的库要好很多,当然,ST现在主推HAL库,这个HAL库确实也很好。 在使用串口之前同样要配置引脚,时钟。 GPIO引脚配置 void
[单片机]
<font color='red'>国产</font>MCU的GD32E230串口通信
一部手机卖1万美金!国产自拍神机炒出天价
电子报道:对于大多数人来说,5000多块的iPhone已经是一个比较高的价格了。但是在国产自拍神器美图M8面前,这个价格简直是弱爆了。 日前美图M8美少女战士限量版悄然现身国际电子商务平台ebay,售价高达10000美元(约合人民币68000元),如此之高的售价让网友慨叹“太给国产手机长脸了”! 美图M8美少女战士限量版为何卖这么贵?据悉,美图M8美少女战士限量版是美图手机首次基于知名动漫IP美少女战士定制,不仅在产品包装、手机后盖、配件等外部融入美少女战士元素进行专属外观设计,更拥有专属UI主题和定制的配件组合。 该产品刚刚发布时,官方就宣布全球限量10000台,数量十分稀少,本着“物以稀为贵”的原则,价格如此之高也
[手机便携]
中兴玩微投,华为玩PC,国产品牌不务正业小心机
     搜狐科技 毛启盈 巴塞罗那报道   MWC2016亮点乏善可陈,VR、机器人、智能手表等“黑科技”没有超过美国CES。作为一届通信领域的国际大展,参观者和媒体多为通信人。据说,今天就拥入了4000多媒体人,再加上自媒体人,长枪短炮的阵势,史无前例。这么多人到底看什么?记者通过一线采访发现,应了那句话:世界看中国,中国看手机,手机看中兴华为……   这届巴展给我的总体感觉是,国产手机整体上表现出“不务正业”:华为高调进军PC与联想争夺市场,中兴发布震撼的投影技术(微投)以及针对虚拟现实VR计划,OPPO推快充15分钟……   面对国产手机在国际大展上的“阴盛阳衰”疲态,手机大佬以及业界怎么评价?国产手机到底何处去?   “中
[手机便携]
国产手机代工厂低价抢订单:一台才赚2分钱
    “原来给手机品牌厂商做代工生产,最少也有2个点的利润,但目前一些代工厂为了抢生意,加工利润低到每台2分钱也都肯做。”近日,本报记者在深圳、东莞等地的 手机代工厂走访发现,一些本土手机品牌厂商花费巨资建成的手机生产线产能巨大,除了生产自己品牌的手机之外,常年“吃不饱”,甚至连日常运营都很困难,不 得不低价、甚至没利润也要抢代工单。 巨资引入生产线“吃不饱” 国产手机代工厂低价抢订单 本报独家调查发现 业内人士表示,巨资建设生产工厂的背后是中国本土手机“一窝蜂”冲动的产业背景,而在中国本土手机核心竞争力尚不能与洋品牌“平起平坐”的时候,如何加大自有品牌市场表现以及降低生产成本,成了中国手机生产工厂生存的关键。 文/图 记者段郴群
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved