ds2502的stm32程序及分析

article/2025/10/24 7:31:28

ds2502在一次性器件上应用较多,通过写入时间或特定的信息做限时使用(一次性)保证,
因为ds2502 每位只能由逻辑 1 编程为逻辑 0,但永远不能从逻辑 0 改为逻辑 1(Individual bits can be changed only from alogical 1 to a logical 0, never from a logical 0 to a logical 1.)

ds2502只需要两个脚接入即可工作,data数据脚和gnd地脚,数据的写入和读出及芯片供电均通过data脚进行
在这里插入图片描述
在这里插入图片描述

ds2502的硬件电路是这样的
在这里插入图片描述
2n7000可用2n7002替代(PNP型mos管)
bss110可用bss84替代(NPN型mos管)

从图中可以看出ds2502的输出都在一个脚,而且写了(open drain),所以我们需要把单片机的引脚设为开漏输出状态,

PGM脚是编程脚(低电平有效),设成推挽输出,

void DQ_Init (void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; 		 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 GPIO_Init(GPIOB, &GPIO_InitStructure);					
}
void PGM_Init (void)
{GPIO_InitTypeDef  GPIO_InitStructure;	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;				 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 GPIO_Init(GPIOB, &GPIO_InitStructure);					 }

在这里插入图片描述
“复位和在线应答脉冲”初始化时序

int DS_Init(void)
{int flag=0;			//初始化标志:0不成功,1成功unsigned int t=0;DQ_OUT=0;delay_us(800);//拉低480~960us均可DQ_OUT=1;delay_us(30);//置高15~60uswhile(t<1600)		{if(DQ_IN==0){flag=1;break;}t++;}delay_us(100);				//return flag;
}

在这里插入图片描述
写1时序
在这里插入图片描述
写0时序

void DS_Write(unsigned char command) 
{unsigned char i,temp;for(i=0;i<8;i++){temp=command&0x01;command=command>>1;DQ_OUT=0;delay_us(2);if(temp) DQ_OUT=1;elseDQ_OUT=0;delay_us(60); //    delay(80); //>60DQ_OUT=1;delay_us(10); //    delay(80); //>60}
//	delay_us(10);
}

在这里插入图片描述
读数据时序

unsigned char DS_Read(void)
{unsigned char i,j;unsigned char dat = 0;for (i=8;i>0;i--){for(j=0;j<5;j++);  DQ_OUT = 0; 			// dat=dat>>1;       //delay_us(2);	DQ_OUT = 1; 			// delay_us(15);if(DQ_IN==1)dat|=0x80;delay_us(50);}return(dat);
}

校验

unsigned char getcrc(unsigned char *p,unsigned char len)
{unsigned crc,i,n,cbit,bit0,byte,r;	crc=0;for(i=0;i<len;i++){byte=*p;for(n=0;n<8;n++){cbit=crc&0x01;bit0=byte&0x01;crc=crc>>1;r=cbit^bit0;if(r==1) crc=crc^0x8c;byte=byte>>1;}p++;} return crc;			//crc==0 校验正确
}

主函数。。。

int main(void)
{int init_flag=0;int DQ_Buf ,DQ_Buf2;int ci;unsigned char ds_num[100];u8 cmd[100];u8 tmp[100];u8 tcrc;u8 tcrc1;int si;LED_Init();delay_init();	    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); TIM3_Int_Init(4999,7199);//10KhzµÄ¼ÆÊýƵÂÊ£¬¼ÆÊýµ½5000Ϊ500ms uart_init(9600);	 //´¿Ú³õʼ»¯Îª//usart2_init(9600);//usart3_init(9600);printf("no problem\r\n"); PGM_Init ();DQ_Init ();PGM = 1;init_flag = DS_Init();				//³õʼ»¯printf("init_flag = %d\r\n",init_flag); DS_Write(DS_READROM);for(ci=0;ci<8;ci++)ds_num[ci]=DS_Read();printf("DS_Num = ");for(ci=0;ci<8;ci++)printf("%x ", ds_num[ci]);printf("\r\n"); //======================================================================cmd[0]=DS_READMEMORY;cmd[1]=0x00;cmd[2]=0;tcrc = getcrc(cmd,3);printf("tcrc_2=%d \r\n",tcrc);DS_Init();	//³õʼ»¯DS_Write(DS_SKIPROM);			//SKIP ROMDS_Write(cmd[0]);			//read memory					DS_Write(cmd[1]);			//¶ÁÈ¡µÚ2502µÄ0Ò³ÊÕ¾Ý			DS_Write(cmd[2]);tcrc1=DS_Read();   		//¶ÁÈ¡CRCУÑéÖµif(tcrc1==tcrc){printf("tcrc == tcrcl\r\n");}printf("tcrc = %d tcrcl = %d \r\n",tcrc, tcrc1);for(ci=0;ci<48;ci++)ds_num[ci]=DS_Read();for(ci=0;ci<48;ci++){printf("[%2d]=%x ", ci, ds_num[ci]);}//===========================================================================tmp[0]=0xaa;//**дDS2502************************************cmd[0]=DS_WRITEMEMORY;cmd[1]=0x00;	//µØÖ·0x20cmd[2]=0x00;cmd[3]=tmp[0];ci=0;tcrc=getcrc(cmd,4);si=0;	 				//дÈë³É¹¦¼ÆÊýDS_Init();	//³õʼ»¯DS_Write(DS_SKIPROM);			//SKIP ROMDS_Write(DS_WRITEMEMORY);		//write memoryDS_Write(0x00);			//µØÖ·DS_Write(0x00);DS_Write(tmp[0]);			//ҪдÈëµÄÊý¾Ý	tcrc1=DS_Read();if(tcrc1==tcrc){printf("tcrc == tcrcl\r\n");}printf("tcrc = %d tcrcl = %d \r\n",tcrc, tcrc1);//if(tcrc1==tcrc)  //	crcУÑéÕýÈ·{delay_us(10);PGM2=0;delay_ms(1);	//дÈëÂö³å		PGM2=1;delay_us(5);delay_us(500);tcrc=DS_Read();printf("write tcrc=%d \r\n",tcrc);	if(tcrc==tmp[0])si++;}//============================================================================cmd[0]=DS_READMEMORY;cmd[1]=0x00;cmd[2]=0;tcrc = getcrc(cmd,3);printf("tcrc_2=%d \r\n",tcrc);DS_Init();	//³õʼ»¯DS_Write(DS_SKIPROM);			//SKIP ROMDS_Write(cmd[0]);			//read memory					DS_Write(cmd[1]);			//¶ÁÈ¡µÚ2502µÄ0Ò³ÊÕ¾Ý			DS_Write(cmd[2]);tcrc1=DS_Read();   		//¶ÁÈ¡CRCУÑéÖµif(tcrc1==tcrc){printf("tcrc == tcrcl\r\n");}printf("tcrc = %d tcrcl = %d \r\n",tcrc, tcrc1);for(ci=0;ci<48;ci++)ds_num[ci]=DS_Read();for(ci=0;ci<48;ci++){printf("[%2d]=%x ", ci, ds_num[ci]);}while(1){}}

欸,本来想详细分析的,拖太久了,不想动了,留给自己看吧


http://chatgpt.dhexx.cn/article/pKCTcKfZ.shtml

相关文章

mt2502穿戴芯片模块方案,mt2502开发板原理图资料介绍

MTK LinkIt Assist mt2502 v1.0.3 开发板原理图 Autocad mt2502平台智能穿戴模块定制开发&#xff0c;mt2502方案开发&#xff0c;mt2502开发技术资料&#xff0c;可到一牛网论坛 http://bbs.16rd.com/thread-24867-1-1.html mt2502平台资料&#xff1a;

MT2502处理器参数,MT2502智能穿戴芯片资料介绍

MT2502家族芯片采用高度整合、超轻薄的系统封装&#xff0c;支持双模蓝牙功能及整合式2G modem&#xff0c;微型控制器单元采用ARM v7架构&#xff0c;具备整合内存控制器。专为单一功能型可穿戴设备所打造的高度整合式系统单芯片&#xff0c;体积超轻薄&#xff0c;采用ARM7EJ…

mysql中2502_mysql出现错误代码2502怎么办

mysql出现错误代码2502的解决方法&#xff1a;首先运行CMD&#xff1b;然后输入命令【msiexec /package "D:\搜狗高速下载\mysql-installer-community-5.7.10.0.msi"】即可。 mysql出现错误代码2502的解决方法&#xff1a; 解决办法一: 1.运行CMD(管理员) 2.输入以下…

MT2502 datasheet,MT2502硬件设计,MT2502芯片资料

MT2502家族芯片采用高度整合、超轻薄的系统封装&#xff0c;支持双模蓝牙功能及整合式2G modem&#xff0c;微型控制器单元采用ARM v7架构&#xff0c;具备整合内存控制器。专为单一功能型可穿戴设备所打造的高度整合式系统单芯片&#xff0c;体积超轻薄&#xff0c;采用ARM7EJ…

代码优化③——Android Studio自带代码扫描工具Lint

前言 前面介绍了AlibabaIDE插件和通过JenkinsSonarQube 两种方式审查书写代码规范的方式&#xff0c;今天介绍下AndroidStudio 自带的代码扫描工具。 按图所示运行Lint检查项目工程&#xff1a; 点击OK&#xff0c;等待扫描结果&#xff1a; 由于当前安装了Alia的扫描插件&…

代码质量提升,代码扫描 review 之 Codacy 工具使用

目录 一、什么是Codacy二、GitHub 上使用 Codacy三、Codacy上导入GitHub项目 一、什么是Codacy Codacy 是用于代码 review 检测(即代码审查)的工具&#xff0c;目前支持对40多种编程语言检测&#xff0c;如 c、c、c#、java 、python、javascript 等。 Codacy 可用于 GitHub 和…

Android 自定义 Lint 实现静态代码扫描工具

文章目录 关于静态代码扫描工具Lint的简单使用一、Lint 与 IDE 的结合使用二、Lint 与 gradle 命令的结合使用具体位置如下图&#xff1a;生成的HTML在浏览器打开如图&#xff1a; 自定义 Lint为什么需要自定义 Lint?Lint 需要自定义检查的问题参考美团的方案针对 Lint 实施的…

静态代码扫描工具—— TScanCode

一、简介 TscanCode支持以下类型规则扫描&#xff1a; 空指针检查&#xff0c;包含可疑的空指针&#xff1b;数据越界&#xff1b;内存泄漏&#xff0c;分配和释放不匹配&#xff1b;逻辑错误&#xff0c;重复的代码分支&#xff0c;bool类型和INT进行比较&#xff0c;表达式永…

揭秘代码的安全漏洞是如何被发现的:代码扫描工具fortify的详细介绍

前言 在许多对安全性有所关注的公司中&#xff0c;代码安全扫描已成为一项关键的实践。但是&#xff0c;面对频繁出现的安全漏洞升级&#xff0c;大家可能会感到困惑和头疼。那么&#xff0c;这些令人不安的漏洞究竟是如何被发现的呢&#xff1f;今天我们将为大家揭示安全漏洞发…

全面剖析PMD静态代码扫描工具

这是个人原创的一篇全面介绍PMD静态代码扫描工具的文档&#xff0c;最近部门需要调研静态代码扫描工具以提高代码的质量&#xff0c;经过对比几十款工具&#xff0c;剔除了商用和多年没有更新的&#xff0c;最终锁定的有PMD、SanorQube以及Facebook infer。 PMD是使用JavaCC生…

php代码 扫描,PHP代码安全扫描工具(AutoPHPCheck)

PHP代码安全扫描工具(AutoPHPCheck)是一款好用的安全扫描工具&#xff0c;该软件能够帮助用户自动完成检测服务器主要参数、PHP主要参数、PHP安全选项以及服务器性能等功能&#xff0c;当你编辑完一段PHP代码后&#xff0c;就可以将其导入到这个软件里&#xff0c;有兴趣的小伙…

sonarQube(代码扫描工具)安装配置

sonarqube使用介绍[TOC]sonarqube使用介绍 sonarQube使用介绍 本文不讲解 什么是sonarQube&#xff0c;请自行了解 sonarQube安装 sonarQube分为2个 部分 sonarQube 展示扫描结果&#xff1b;sonarScanner 扫描工具&#xff1b; 环境 jdk11&#xff1b;sonarQube的运行需…

Java学习之代码扫描工具的使用方法

有些刚进行Java学习的小伙伴对Java代码扫描工具还不是很了解&#xff0c;不知道该如何使用&#xff0c;下面千锋重庆的小编就来告诉大家使用方法。 1.插件的安装 由于使用的mac所有以Mac下idea插件安装流程为例&#xff0c;首先进入idea的preferences&#xff0c;点击plugin选…

静态代码扫描工具(多种)简要入门介绍-SonarQube社区版-免费、TscanCode工具、PMD工具、flake8工具

SonarQube社区版-免费 适用语言&#xff1a;Java, C#, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, Scala, Flex, Python, PHP, HTML, CSS, XML and VB.NET 下载安装 由于实际操作中&#xff0c;JDK版本的限制&#xff0c;8及以下&#xff0c;进入…

《Python代码审计》(1)一款超好用的代码扫描工具

1.前言 从本文开始&#xff0c;我将开始介绍Python源代码审计&#xff0c;代码审计是检查源代码中的安全缺陷&#xff0c;检查源代码是否存在安全隐患&#xff0c;或者编码不规范的地方。通常使用自动化工具或者人工审查的方式&#xff0c;自动化工具效率高&#xff0c;但是误…

java 静态扫描_静态代码扫描工具 – (八)- 扫描Java项目

静态代码扫描工具 – (八)- 扫描Java项目 1、准备好Java项目代码 只要是java语言实现的项目均可。 比如&#xff0c;自动化测试的代码&#xff0c;测试平台等均可以。 本次案例&#xff0c;使用java语言实现的测试平台来做为扫描对象。 2、了解java项目代码的结构。 为什么要了…

Android和iOS静态代码扫描工具

Android 名称 来源 功能特点 检查SQL注入 检查NullPointException 支持IDE情况 Android Lint Android SDK 针对Android&#xff0c;检查范围广 否 是 Eclipse、Android Studio FindBugs 国外 针对Java程序&#xff0c;失去对Android特性的检查 否 是 Eclipse、…

[C++]TscanCode代码扫描工具

TscanCode介绍 TscanCode 是腾讯研发的静态代码扫描工具&#xff0c;最早的版本是基于 cppcheck 二次开发。之后又重新自研&#xff0c;不仅支持 C&#xff0c;还支持 C#&#xff0c;Lua 语言&#xff0c;在发掘 C 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有…

源代码扫描工具

1. DMSCA-企业级静态源代码扫描分析服务平台 系统架构 客户可以通过Internet或者局域网络 从浏览器、Eclipse、Visual Studio 、命令行 、甚至 Web 服务访问DMSCA 服务平台&#xff0c;上传扫描代码&#xff0c;选择扫描策略&#xff0c;自动化扫描&#xff0c; 并利用平台可视…

Fortify代码扫描工具

一、Fortify介绍 Fortify是一款强大的静态代码扫描分析工具&#xff0c;其发现代码漏洞缺陷的能力十分强悍&#xff0c;主要是将代码经过编译&#xff0c;依托于其强大的内置规则库来发现漏洞的。其次fortify SCA团队在开发此商业工具时&#xff0c;也提供了自定义规则的…