STM32调试TIC12400笔记

news2024/11/15 13:50:28

工作中需要用到,但是有关这个芯片的参考资料好少,自己写一下调试过程,持续更新中,还没调完。

用的是正点原子的mini板,芯片是stm32f103RCT,需要知道spi的相关知识,先配置spi,用cubemx,用硬件spi,下面会细说为什么用硬件,不用模拟 

一、建立通讯

1.tic时序分析 

首先是调通spi通信,和芯片建立联系,这部分需要看手册

先看时序,可以看到起始为低电平(也就是CPOL=0),在第二个沿采样(红色部分),也就是偶数个边沿也是下降沿采样(CPHA=1),spi最重要的两个参数就确定好了

1.1配置cubemx 

接下来就可以配置cubemx了

 cubemx老生常谈的步骤SYS-->RCC-->时钟树-->connectivity

 RCC

时钟树 

 采用软件片选,需要自己添加一路引脚,任选,只要不和你用的其他引脚发生冲突就行,我选的PA2

增加一路串口,用来调试

1.2基础代码 

新建好工程以后,在spi.cl里添加sp读写单字节代码,注意位置,否则改cubemx配置会覆盖代码

/* USER CODE BEGIN 1 */
/*SPI1 读写一个字节数据*/
uint8_t spi1_read_write_byte(uint8_t txdata){
	uint8_t rec_data;
	HAL_SPI_TransmitReceive(&hspi1,&txdata,&rec_data,1,1000);
	return rec_data;
}

/* USER CODE END 1 */

在uart.c里添加重定向函数,用来打印,同样注意位置,如果报错,还需添加头文件stdio.h

/* USER CODE BEGIN 1 */
int fputc(int ch, FILE *f)
{
	/* 发送一个字节数据到串口DEBUG_USART */
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);	
	
	return (ch);
}
/* USER CODE END 1 */

2.读写函数 

接下来是读写格式,用来编写读写函数,发现tic12400这块芯片每次发送32bit,而硬件spi都是8bit或者16bit,我们这里依旧采用板子自带的硬件8位spi,每八位一发,连发四次,凑够32bit,因为自己写时序比较麻烦,所以不用模拟spi

2.1 读写格式分析

写数据到芯片:要写 读写位+寄存器地址+数据+校验位

MOSI:      1  +  reg_addr  +    data     +   PAR

                bit 31  bit[30-25]      bit[24-1]     bit 0

可以看到写也是有返回值的,会返回六位标志位和上一次写入寄存器的值,可以通过接收写函数的返回值,判断数据发送对了

 从芯片读数据:要写 读写位+寄存器地址+don't care+校验位

MOSI:      0  +  reg_addr  +  don't care   +   PAR

                bit 31  bit[30-25]      bit[24-1]          bit 0

读也要写寄存器地址,不关心的位可以任意写,我写的全是0

从上图可以看到是有校验的,需要自己添加奇偶校验位,读手册可知用的是奇校验,所以我自己写了添加校验位的函数

2.2 读写函数代码

可能会需要延时,不需要太精确,用的for循环的

void for_delay_us(uint32_t nus)
{
 uint32_t Delay = nus * 168/4;
 do
 {
		__NOP();
 }
 while (Delay --);
}
uint32_t odd_parity(uint32_t num){
	uint8_t i=0,count=0;
	uint32_t ret=num;
	for(i=0;i<32;i++){
		if(num & 0x1) count++;
		(num)>>=1;
	}
	if(count%2==0){
		ret |=0x1;
	}
	return ret;
}
uint32_t tic12400write(uint8_t addr,uint32_t data){
	uint32_t senddata=0x80000000;//写bit31=1
	uint32_t ret,temp;
	
	senddata|=(addr<<25);//加入六位地址
	senddata|=(data<<1);//24位数据
	senddata=odd_parity(senddata);//添加奇偶校验位
	
	SPI_CS(1);//片选
	SPI_CS(0);
	
	temp=spi1_read_write_byte(senddata>>24);//发送数据,MSB先行,同时会有数据回传,也接收数据
	ret=temp<<24;
	temp=spi1_read_write_byte(senddata>>16);
	ret|=temp<<16;
	temp=spi1_read_write_byte(senddata>>8);
	ret|=temp<<8;
	temp=spi1_read_write_byte(senddata);
	ret|=temp;
	
	SPI_CS(1);
	return ret;
}

uint32_t tic12400read(uint8_t addr){
	uint32_t senddata=0;
	uint32_t ret,temp;
	senddata|=(addr<<25);//加入六位地址
	senddata=odd_parity(senddata);//添加奇偶校验位
	
	SPI_CS(1);
//	for_delay_us(2);
	SPI_CS(0);
//	for_delay_us(2);
	
	temp=spi1_read_write_byte(senddata>>24);//发送数据,MSB先行,同时会有数据回传,也接收数据
	ret=temp<<24;
	temp=spi1_read_write_byte(senddata>>16);
	ret|=temp<<16;
	temp=spi1_read_write_byte(senddata>>8);
	ret|=temp<<8;
	temp=spi1_read_write_byte(senddata);
	ret|=temp;
	ret=odd_parity(ret);//添加奇偶校验位
	
	SPI_CS(1);
	return ret;
}

读写函数都写好之后我们来检测一下是否能与tic12400通信成功

这里需要用到下面这个寄存器

读到的结果会是bit5=1,也就是0x20

还有一点,tic12400所有的寄存器给的都是数据位,也就是相当于读写函数里的bit[1-24]

我们前面写的读函数接收到的是32位数据,所以这里要对数据进行处理,添加数据处理函数

uint32_t get_data(uint32_t data){
		data>>=1;
		data&=0xffffff;
	  return data;
}

这样读出来结果是0x20,如果不做数据处理,读到的结果会是0x40,也是对的,要分清自己的代码读出的结果

 接下来就可以测试通信了,在mian里加入下面的代码,

 打开串口调试助手,可以接收到数据,通信成功,说明读写代码是没有问题的

 至此通信配置完成,确定可以和tic12400正常通信

接下来就是正是配置这个芯片了

二、配置芯片 

1.寄存器

因为我要检测开关通断,不需要知道具体的数值,所以比较模式就够用了,所以只说比较模式

首先来看寄存器,圈出来的五个是和比较模式有关的寄存器

 1.1DEVICE_ID  0x1

这个芯片可以用来检测通信是否成功,直接调用tic12400read读出的结果是0x40

1.2 INT_STAT  0x2

这个芯片主要用来清空标志位,如果读到的数据有错误(读写格式前六位的标志位),需要手动读取这个寄存器,清空标志位,否则无法通信 

跟比较模式配置有关的寄存器按照配置顺序介绍 

1.3 CONFIG  0x1A

这个寄存器相当于一个开关,bit11写1芯片开始工作,有两位比较重要

    bit11

当触发器位设置为逻辑1时,正常的设备操作(润湿电流激活和轮询)开始。要停止设备操作并使设备处于空闲状态,请将此位解除断言为0。
       在触发设备正常操作后,如果在任何时候需要重新配置设备设置,则需要微控制器首先将位TRIGGER设置为逻辑0以停止设备操作。一旦重新配置完成,微控制器可以将TRIGGER位设置回逻辑1以重新启动设备操作。如果在没有首先停止设备操作的情况下动态地进行重新配置,则可能报告错误的开关状态并可能发出意外中断。

以下寄存器位是例外,当触发器位设置为逻辑1时可以配置:

•TRIGGER (CONFIG寄存器的第11位)

•CRC_T (CONFIG寄存器的第9位)

•rest (CONFIG寄存器的第0位)

•CCP_CFG1寄存器0h =停止TIC12400的正常操作。

 bit0 软复位

1.4IN_EN  0x1B

1.5THRES_COMP  0x21

1.6 Mode  0x32

这个芯片是有默认配置的,先什么都不做,读读默认配置

main函数添加以下代码

说明只有奇偶校验位,其余位全是零,根据读写格式可知,前六位全零没错

将CNOFIG[11]=1

除了CNOFIG[11]变为1 了,其余没变化

data=tic12400read(INT_STAT);
	printf("INT_STAT:%x\n",data);
	
	data=tic12400read(DEVICE_ID);
	printf("DEVICE_ID:%x\n",data);
	
	tic12400write(CONFIG,0x0);
	data=tic12400read(CONFIG);
	printf("CONFIG:%x\n",data);
	
	tic12400write(IN_EN,0xffffff);
	data=tic12400read(IN_EN);
	printf("IN_EN:%x\n",data);
	
	tic12400write(THRES_COMP,0x7ff);
	data=tic12400read(THRES_COMP);
	printf("THRES_COMP:%x\n",data);
	
	tic12400write(CONFIG,0x400);
	data=tic12400read(CONFIG);
	printf("CONFIG:%x\n",data);
	
	data=tic12400read(IN_STAT_COMP);
	data=get_data(data);
	printf("IN_STAT_COMP:%x\n",data);
	

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

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

相关文章

Ubuntu初期配置常见问题汇总

ubuntu配置vim 代码配色 终端配置 ubuntu配置vim 代码配色 终端配置_ubuntu的vim配置-CSDN博客https://blog.csdn.net/GM2418/article/details/134195020小缺点是无法自动补齐 ubuntu中vim实现代码补全等功能_ubuntu vim 自动补全-CSDN博客https://blog.csdn.net/weixin_4580…

图纸加密软件有哪些?2024好用不踩雷的10款图纸加密软件推荐!

在当今数字化时代&#xff0c;图纸作为工程设计、建筑规划等领域的重要文件&#xff0c;其安全性至关重要。为了保护这些敏感信息不被泄露&#xff0c;图纸加密软件应运而生。本文将为您推荐2024年10款好用且不踩雷的图纸加密软件&#xff0c;帮助您选择最适合的工具来保护您的…

【machine learning-十-grading descent梯度下降实现】

grading descent 梯度下降参数更新方法 --导数和学习率 从导数项直观理解梯度下降 grading descent 算法就是更新参数&#xff0c;今天来学习下如何更新w和b 梯度下降 还是以线性回归的均方差损失函数如下为例&#xff1a; 损失函数的可视化图如下 &#xff1a; 横轴和纵轴分…

平价头戴式蓝牙耳机哪个牌子好?四大平价爆款头戴式耳机品牌推荐

在追求高品质音乐生活的同时&#xff0c;我们往往被高昂的价格所困扰&#xff0c;然而随着科技的进步和市场竞争的加剧&#xff0c;越来越多的平价头戴式蓝牙耳机品牌开始崭露头角&#xff0c;它们以出色的音质、舒适的佩戴体验和亲民的价格赢得了广大消费者的喜爱&#xff0c;…

数据结构之线性表(python)

华子目录 线性表的定义前驱与后继 1.顺序表&#xff08;顺序存储结构&#xff09;python列表与数组的区别列表数组 1.1插入数据实例 1.2删除元素实例 1.3查找元素1.4修改元素1.5综合示例 2.单链表2.1单链表的初始化2.2插入元素示例注意 2.3删除元素示例 2.4修改元素2.5查找元素…

【网络】TCP协议的简单使用

目录 echo_service server 单进程单线程 多进程 多线程 线程池 client echo_service_code echo_service 还是跟之前UDP一样&#xff0c;我们先通过实际的代码来实现一些小功能&#xff0c;简单的来使用TCP协议进行简单的通信&#xff0c;话不多说&#xff0c;我们先实现…

LabVIEW提高开发效率技巧----合理使用数据流与内存管理

理使用数据流和内存管理是LabVIEW开发中提高性能和稳定性的关键&#xff0c;特别是在处理大数据或高频率信号时&#xff0c;优化可以避免内存消耗过大、程序卡顿甚至崩溃。 1. 使用 Shift Register 进行内存管理 Shift Register&#xff08;移位寄存器&#xff09; 是 LabVIE…

五分钟上手Spring AI Alibaba,轻松打造智能聊天应用

文章目录 快速上手快速体验示例示例开发指南总结 快速上手 Spring AI Alibaba 已经完全适配了阿里云通用模型&#xff0c;接下来&#xff0c;我们将学习如何使用 spring ai alibaba 开发一个基于通用模型服务的智能聊天应用。 快速体验示例 下载项目 运行以下命令下载源码&…

【产品更新】中汇保函-电子保函管理平台

中汇保函 新增 1.手机扫描保函验真二维码直接跳转小程序模块&#xff0c;验真快人一步。 2.新增客户服务服务&#xff0c;可直接联系微信客服。 优化 1.提交申请、登录程序响应速度。 更新内容说明 1.手机扫描保函验真二维码直接跳转小程序模块&#xff0c;验真快人一步。 2.…

从零开始之AI面试小程序

从零开始之AI面试小程序 文章目录 从零开始之AI面试小程序前言一、工具列表二、部署流程1. VMWare安装2. Centos安装3. Centos环境配置3.1. 更改子网IP3.2. 配置静态IP地址 4. Docker和Docker Compose安装5. Docker镜像加速源配置6. 部署中间件6.1. MySQL部署6.2. Redis部署 7.…

华为OD机试 - 出租车计费(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

飞睿智能实时雷达活体探测传感器模块,智能家居静止检测实时感知人员有无

随着科技的飞速发展&#xff0c;我们的生活正在经历着未有的创新。在这个创新的浪潮中&#xff0c;实时雷达活体探测传感器模块的技术正逐渐崭露头角&#xff0c;以其独特的优势为我们的生活带来安全与便捷。今天&#xff0c;我们就来详细探讨一下这项技术&#xff0c;看看它是…

帮13岁小孩哥2分钟完成开发,这位AI程序员究竟是何方神圣?

通义灵码再升级&#xff0c;真AI程序员来了 随着通义系列基础模型能力的全面提升&#xff0c;各个具体领域的应用模型也随之飞升。这次在云栖大会上迎来重磅升级的&#xff0c;就包括用于代码生成的通义灵码。 一年前的通义灵码还只能完成基础的辅助编程任务&#xff0c;很难…

基于SpringBoot和Vue框架的医保管理系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 1.研究的主要内容与方法 &#xff08;1&#xff09;主要内容 医保管理系统采用B/S模式进行开发&#xff0c;采用Springboot框架、VUE技术、Idea为环境、MySQL为数据库开发。主要功能有&#xff1a;个人资料管理、投保用户管理、…

上海我店平台 8月新增注册用户89w 两年破百亿销售额!

近年来&#xff0c;网络空间内涌现了一个备受瞩目的新平台——“上海我店”&#xff0c;其公布的业绩数据显示&#xff0c;短短三年内&#xff0c;该平台交易流水已突破百亿大关&#xff0c;上月更是迎来了近百万的新增注册用户&#xff0c;这一消息迅速吸引了众多商家的目光。…

【深度好文】你必须要知道-大模型的上下文窗口(Context Window )

Context Window 上下文窗口&#xff1a;捕捉信息的范围 上下文窗口指的是 AI 模型在生成回答时考虑的 Token 数量。它决定了模型能够捕捉信息的范围。上下文窗口越大&#xff0c;模型能够考虑的信息就越多&#xff0c;生成的回答也就越相关和连贯。 在语言模型中&#xff0c;上…

SysML图例-手电筒

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>

第二证券:股价为什么出现大跌?股价大跌时怎么办?

股票是预期收益率较大的出资之一&#xff0c;但同时股票商场的动摇也会是比较大的&#xff0c;股价大涨大跌都是有或许出现的。股价大涨会让出资者获利更多&#xff0c;而大跌也会加大出资者的损失。下面为我们分析股价为什么会大跌&#xff0c;并介绍股价大跌出资者应该如何应…

【测试】——Selenium API (万字详解)

&#x1f4d6; 前言&#xff1a;本文详细介绍了如何利用Selenium进行Web自动化测试&#xff0c;包括定位元素&#xff08;如cssSelector和xpath&#xff09;、常用操作函数&#xff08;如点击、输入等&#xff09;、窗口管理、键盘鼠标事件和浏览器导航&#xff0c;以及处理弹窗…

linux 的 sed 命令的 使用学习

&#xff08;1&#xff09; sed 概述&#xff1a; &#xff08;2&#xff09; 首先谢谢 b 站这位老师&#xff0c;这位专家的完美讲解 讲解继续&#xff1a; &#xff08;3&#xff09; 关于 sed 里的模式&#xff1a; &#xff08;4&#xff09; sed 支持的常用的对文本编辑的…