SPI读取TLE5012B编码器角度数据_ACM32G103

news2024/10/3 2:22:42

买到一个带编码器的电机,卖家留出来读取编码器数据的接口有SPI
具体的原理图如下:
在这里插入图片描述
P2标注的是SPI的接口,其中MISO和MOSI是硬件连接到一起的
使用ACM32G103的硬件SPI2去读取其角度数据
原理大概如下:
1、先发送读取数据的指令,然后再接收数据,一个半双工通信的过程
2、因为MOSI和MISO硬件上连接到了一起,根据TLE5102B的通信时序要求就要稍微修改一下MOSI引脚的状态,片选使用软件片选
3、SPI2的配置CPOL=0,CPHA=1
4、SPI2引脚:
PB9 CS AF3
PB8 SCK AF3
PB7 MOSI AF3
PB6 MISO AF3
其中CS的初始化要修改一下,要初始化为GPIO
接下来直接看代码

#define SPI_USE SPI2
void SPI_USE_Transfer_OneByte(uint8_t *sdata,uint16_t ssize)
{
    /* Clear Batch Done Flag  */
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_TX_BATCH_DONE);
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_BATCH_DONE);
    
    /* Clear TX FIFO */
    SET_BIT(SPI_USE->TX_CTL, SPI_TX_CTL_FIFO_RESET);
    CLEAR_BIT(SPI_USE->TX_CTL, SPI_TX_CTL_FIFO_RESET);
	
    /* Set Data Size */
    SPI_USE->BATCH = ssize;
    
    /* Tx Enable */
    SPI_USE->TX_CTL |= SPI_TX_CTL_EN;
	
	/* Transmit Start */
	SPI_USE->CS |= SPI_CS_CS0;
	
	  while(ssize > 0)
		{
				while (SPI_USE->STATUS & SPI_STATUS_TX_FIFO_FULL)
				{}
				SPI_USE->DAT = *sdata;
				sdata++;
				ssize--;
		}
			
		while (!(SPI_USE->STATUS & SPI_STATUS_TX_BATCH_DONE))
		{}
			
    /* Clear Batch Done Flag  */
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_TX_BATCH_DONE);
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_BATCH_DONE);

    /* Tx Disable */
    SPI_USE->TX_CTL &= (~SPI_TX_CTL_EN);
	SPI_USE->CS &= (~SPI_CS_CS0);
}


void SPI_USE_Receive_OneByte(uint8_t *rdata,uint16_t rsize)
{
    /* Clear Batch Done Flag  */
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_RX_BATCH_DONE);
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_BATCH_DONE);
    
    /* Set Data Size */
    SPI_USE->BATCH = rsize;
    
    /* Rx Enable */
    SPI_USE->RX_CTL |= SPI_RX_CTL_EN;
    
    /* Receive Start */
    SPI_USE->CS |= SPI_CS_CS0;
	
		while(rsize > 0)
		{
				/* Wait Rx FIFO Not Empty */
				while (SPI_USE->STATUS & SPI_STATUS_RX_FIFO_EMPTY)
				{}
        *rdata = 	SPI_USE->DAT;
        rsize--;
			  rdata++;
		}
    /* Wait Transmit Done */
    while (!(SPI_USE->STATUS & SPI_STATUS_RX_BATCH_DONE));
    /* Clear Batch Done Flag  */
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_RX_BATCH_DONE);
    SET_BIT(SPI_USE->STATUS, SPI_STATUS_BATCH_DONE);

    /* Rx Disable */
    SPI_USE->RX_CTL &= (~SPI_RX_CTL_EN);

    /* Receive End */
    SPI_USE->CS &= (~SPI_CS_CS0);
}

再来看读取角度的过程

//        TxBuffer[0] = 0x80;
//	      TxBuffer[1] = 0x21;		
GPIOB->BSC = GPIO_PIN_9 << 16U;
PB7_OUTPUT();			
SPI_USE_Transfer_OneByte(TxBuffer,2);					
PB7_INPUT();
SPI_USE_Receive_OneByte(RxBuffer,2);				
GPIOB->BSC = GPIO_PIN_9;
Angle= (RxBuffer[0]<<8 | RxBuffer[1])&0x7FFF;		

每次发送完读取数据的指令之后,因为MOSI和MISO硬件连接到一起,我们就要将MOSI引脚由复用为SPI设置为输入状态,下一次发指令的时候重新复用为SPI
其中将MOSI引脚设置成输入和复用的代码如下

void PB7_INPUT(void)
{
	GPIOB->MD  &= ~(3<<14);
}

void PB7_OUTPUT(void)
{
	GPIOB->AF0 |= GPIO_FUNCTION_3 << 28;
	GPIOB->DS0 |= GPIO_DRIVE_LEVEL3 <<28;
	GPIOB->OTYP &= (~GPIO_PIN_7);
	GPIOB->PUPD |= GPIO_PULLUP<<14;
	GPIOB->MD |= GPIO_MODE_AF_PP<<14;
}

读取速度,TLE5012B推荐的SPI速率最大是8M,可以根据实际情况提高,也能读到数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在colab上训练YOLOv5

在colab上训练YOLOv5 参考链接&#xff1a;知乎 牛头检测 1.首先在自己的本地电脑上下载YOLO 新建一个文件夹YOLO&#xff0c;输入以下命令下载压缩包&#xff1a; cmd git clone https://github.com/ultralytics/yolov5.git2.将YOLO压缩包上传到colab 首先在colab上新建一…

CSS中有哪些方式可以隐藏页面元素(区别详解)

文章目录 一、前言二、实现方式display:nonevisibility:hiddenopacity:0设置height、width属性为0position:absoluteclip-path小结 三、区别参考文献 一、前言 在平常的样式排版中&#xff0c;我们经常遇到将某个模块隐藏的场景 通过css隐藏元素的方法有很多种&#xff0c;它…

STM32驱动W5500作为客户端进行通讯

STM32驱动W5500作为客户端进行通讯 模块简介引脚说明接线代码部分代码测试是否通讯成功 模块简介 SR-ES1内嵌Wiznet的W5500芯片&#xff0c;使用硬件逻辑门电路实现TCP/IP协议栈的传输层及网络层&#xff08;如&#xff1a;TCP&#xff0c;UDP&#xff0c;ICMP&#xff0c;IPv…

Linux:非常实用的Linux命令

非常实用的Linux命令 系统服务管理 systemctl systemctl命令是Systemd系统和服务管理器的一部分&#xff0c;用于控制systemd系统和服务管理器。Systemd是大多数最新的Linux发行版使用的初始化系统和服务管理器&#xff0c;它用于启动守护进程并管理它们的运行。systemctl提…

element-ui plus v2.60 终于修复了 radio checkbox 取值不明确的问题,label value 值

element-ui plus v2.60 终于修复了 radio checkbox 取值不明确的问题&#xff0c;label value 值 昨天想反馈这个关于 label 和 value 的问题的时候&#xff0c;发现新版本已经修正这个问题了。 一、ElementUI 旧版关于 label 和 value 的问题 从之前 element-ui 用过来的&a…

第十一篇 - 应用于市场营销视频场景中的人工智能和机器学习技术 – Video --- 我为什么要翻译介绍美国人工智能科技巨头IAB公司(1)

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

论文阅读《FENET: FOCUSING ENHANCED NETWORK FOR LANE DETECTION》

ABSTRACT 受人类驾驶专注力的启发&#xff0c;这项研究开创性地利用聚焦采样&#xff08;Focusing Sampling&#xff09;、部分视野评估&#xff08;Partial Field of View Evaluation&#xff09;、增强型 FPN 架构和定向 IoU 损失&#xff08;Directional IoU Loss&#xff…

【Pytorch】新手入门:基于sklearn实现鸢尾花数据集的加载

【Pytorch】新手入门&#xff1a;基于sklearn实现鸢尾花数据集的加载 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望…

递归、搜索与回溯算法简介

何为递归&#xff1a;递归就是递去归来&#xff0c;函数自己调用自己的情况。 不在意递归的细节展开图 把递归的函数当成黑盒&#xff08;给黑盒一个东西&#xff0c;它就能完成想要的事&#xff09; 相信黑盒一定能完成这个任务 深度优先遍历和深度优先搜索都是指一个东西dfs…

STM32---通用定时器(一)理论基础

写在前面&#xff1a;在STM32F103中有众多的定时器&#xff0c;其中包括两个基本定时器&#xff0c;基本定时器的内容已经在上节进行了介绍&#xff0c;基本定时器的功能、结构、使用都较为简单。而STM32F1中还含有4个通用定时器&#xff08;TIM2\3\4\5&#xff09;,这些定时器…

So you think you understand IP fragmentation?

文章目录 前言一、Why care?二、Prevention三、Well-understood?四、Introducing fragquiz五、A novel (?) algorithm六、Reader challenge七、traceroute八、ICMP参考资料 前言 本文来自&#xff1a;https://lwn.net/Articles/960913/ February 7, 2024This article was …

数据库的基本数据类型

基本数据类型之整型 【1】整型的分类 tinyint smallint mediumint int bigint 【2】整型的符号 符号不是用来限制位数的而是用来控制显示长度的 【3】tinyint 是否带符号 默认情况下是带符号, 默认带的符号是 号 超出最大范围 超出会报错 【4】unsigned(无符号) 每…

【C语言】文件操作篇-----程序文件和数据文件,文件的打开和关闭,二进制文件和文本文件,fopen,fclose【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作篇-----程序文件和数据文件&#xff0c;文件的打开和关闭&#xff0c;二进制文件和文本文件【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 在了解完动态内存管…

【PHP安全】PHP伪协议

PHP伪协议&#xff1a; file:// #访问本地文件系统http:// #访问HTTPs网址ftp:// #访问ftp URLphp:// #访问输入输出流zlib:// #压缩流data:// #数据&#xff08;RFC 2397&#xff09;ssh2:// #security shell2expect:// #处理交互式的流glob:// #查找匹配的文件路径phar:// #P…

【神经网络与深度学习】深度神经网络(DNN)

概述 深度神经网络&#xff08;Deep Neural Networks&#xff0c;DNN&#xff09;是一种由多个隐藏层组成的神经网络模型。每个隐藏层由多个神经元组成&#xff0c;这些神经元通过权重和激活函数进行信息传递和计算。 深度神经网络通过多层的非线性变换&#xff0c;可以学习到…

狂雨CMS-采集规则(novelfull.com)

1. 填写采集规则的基本信息 首先点击采集管理中的添加按钮来新建规则&#xff1a; 然后进入到信息页面填写&#xff0c;包括&#xff1a; 规则名称&#xff1a;一般以要采集的源站名命名。 网站编码&#xff1a;默认自动检测即可。 类型&#xff1a;根据网站类型来选择&#x…

遗传算法(GA)求解基于栅格地图的机器人最优路径规划,可以自行修改地图(提供MATLAB代码)

通过栅格法建立栅格地图作为机器人路径规划的工作环境,采用遗传算法作为机器人路径搜索的规则.将所有机器人放置于初始位置.经过NC次无碰撞迭代运动找到最优路径.到达目标位置.为防止机器人在路径搜索过程中没有达到最大迭代次数时路径大小已不发生变化而陷入局部最优。 一、部…

个人博客系列-后端项目-RBAC角色管理(6)

修改上一篇文章创建的用户表 ## 用户表 from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.models import AbstractBaseUserclass User(AbstractBaseUser):username models.CharField(max_length255, uniqueTrue, verbose_na…

day-18 猜数字游戏

1.由于两个数字位数相同&#xff0c;所以可以遍历字符串吧&#xff0c;找出公牛个数 2.在通过两个数组分别统计两个数字0-9的个数 3.Math.min(arr1[i],arr2[i])即为对应数字的奶牛个数 code class Solution {public String getHint(String secret, String guess) {int arr1[]n…

C++进阶:详细讲解继承

现在也是结束了初阶部分的内容&#xff0c;今天开始就进入进阶部分了。一刻也没有为初阶的结束而哀悼&#xff0c;立刻赶来“战场”的是进阶部分里的继承 文章目录 1.继承的概念和定义1.1继承的概念1.2继承的定义1.2.1继承的格式1.2.2再讲访问限定符(详讲protected)1.2.3**继承…