STM32F103C8开发紫外线传感器SI1133的使用(七)

2023-05-16

SI1133传感器是基于I2C通信的,关于I2C部分请参考:


关于传感器初始化参数的说明:


PARAM_CHAN_LIST:配置通道,从bit0到bit5,分别代表通道0到5,共六个通道,最高两位无效;


PARAM_ADCCONFIGx:半导体功能配置,0x78表示配置成UV紫外线检测,积分时间基数短24.4us,即CFG_RATE_SHORT|CFG_UV,其余见datasheet;
PARAM_ADCSENSx:检测信号范围,最高位置1表示高,可防止结果溢出,低4位表示积分时间;
PARAM_ADCPOSTx:测量结果设置,0x00表示结果为16位模式,0x40表示24位模式;
PARAM_MEASCONFIGx:计数器选择,0x00表示不设置,0x40设置计数器0,0x80设置计数器1,0xc0设置计数器2


PARAM_MEASRATE_H:采样频率设置高位
PARAM_MEASRATE_L:采样频率设置低位


REG_IRQ_ENABLE:开启通道中断


按照SI1133_init()中的设置,积分时间基数为24.4us,积分时间t = 24.4us * 2^0x09 = 12.5ms,采样频率f = 1250Hz/0x09c4 = 0.5Hz;




关于结果:
根据以上配置,传感器检测结果保存在REG_HOSTOUT0-REG_HOSTOUT11中,每个通道占用两个字节,高位在前;
CH0H,CH0L,CH1H,CH1L..............
如设置了24位模式,则结果如下:

CH0H,CH0L,CH1H,CH1M,CH1L........

头文件:

#ifndef __SI1133_H__
#define __SI1133_H__

#include "tim.h"
#include "i2c.h"

#define SI1133_PART_ID				  0xAA

//*******************************************************//
//*                   ADCCONFIGx                        *//
//*******************************************************//

//=========================================================
//  measurement rate,Offsets for Parameter Table ADCCONFIGx
//=========================================================
#define CFG_RATE_SHORT  		  0X60 //24.4us
#define CFG_RATE_NORMAL 		  0X00 //48.8us
#define CFG_RATE_LONG   		  0X20 //97.6us
#define CFG_RATE_VLONG  		  0X40 //195us
//==========================================================
// Photodiodos select,Offsets for Parameter Table ADCCONFIGx
//==========================================================
#define CFG_SMALL_IR 			  0X00 
#define CFG_MEDIUM_IR			  0X01
#define CFG_LARGE_IR			  0X02
#define CFG_WHITE   			  0X0B
#define CFG_LARGE_WHITE 		  0X0C
#define CFG_UV  				  0X18
#define CFG_UV_DEEP 			  0X19

//------------------------END------------------------------

//*******************************************************//
//*                   MEASCONFIGx                       *//
//*******************************************************//

//===========================
// MEASCOUNTER select,Value for Parameter Table MEASCONFIGx
//===========================
#define MEAS_COUNT_NONE 		  0X00
#define MEAS_COUNT_0 			  0X40
#define MEAS_COUNT_1 			  0X80
#define MEAS_COUNT_2 			  0XC0

//------------------------END------------------------------

//*******************************************************//
//*                      ADCPOSTx                       *//
//*******************************************************//
//===========================
// OUTPUT setting,Offsets for Parameter Table ADCPOSTx
//===========================
#define POST_BITS_16			  0X00
#define POST_BITS_24			  0X40
//===========================
// THRESHOLD setting,Offsets for Parameter Table ADCPOSTx
//===========================
#define POST_THRESHOLD_NONE		  0X00
#define POST_THRESHOLD_0		  0X01
#define POST_THRESHOLD_1		  0X02
#define POST_THRESHOLD_2		  0X03
//------------------------END------------------------------

//===========================
// I2C Registers Address
//===========================
#define REG_PART_ID               0x00
#define REG_REV_ID                0x01
#define REG_MFR_ID                0x02
#define REG_INFO0             	  0x03
#define REG_INFO1                 0x04

#define REG_HOSTIN3               0x07
#define REG_HOSTIN2               0x08
#define REG_HOSTIN1               0x09
#define REG_HOSTIN0               0x0A
#define REG_COMMAND               0x0B

#define REG_IRQ_ENABLE            0x0F
#define REG_RESET                 0x0F
#define REG_RESPONSE1             0x10
#define REG_RESPONSE0             0x11
#define REG_IRQ_STATUS            0x12

#define REG_HOSTOUT0              0x13
#define REG_HOSTOUT1              0x14
#define REG_HOSTOUT2              0x15
#define REG_HOSTOUT3              0x16
#define REG_HOSTOUT4              0x17
#define REG_HOSTOUT5              0x18
#define REG_HOSTOUT6              0x19
#define REG_HOSTOUT7              0x1A
#define REG_HOSTOUT8              0x1B
#define REG_HOSTOUT9              0x1C
#define REG_HOSTOUT10             0x1D
#define REG_HOSTOUT11             0x1E
#define REG_HOSTOUT12             0x1F
#define REG_HOSTOUT13             0x20
#define REG_HOSTOUT14             0x21
#define REG_HOSTOUT15             0x22
#define REG_HOSTOUT16             0x23
#define REG_HOSTOUT17             0x24
#define REG_HOSTOUT18             0x25
#define REG_HOSTOUT19             0x26
#define REG_HOSTOUT20             0x27
#define REG_HOSTOUT21             0x28
#define REG_HOSTOUT22             0x29
#define REG_HOSTOUT23             0x2A
#define REG_HOSTOUT24             0x2B
#define REG_HOSTOUT25             0x2C
//============================================================
// Parameter Table Offsets
//============================================================
#define PARAM_I2C_ADDR            0x00
#define PARAM_CHAN_LIST           0x01

#define PARAM_ADCCONFIG0          0x02
#define PARAM_ADCSENS0            0x03
#define PARAM_ADCPOST0            0x04
#define PARAM_MEASCONFIG0         0x05

#define PARAM_ADCCONFIG1          0x06
#define PARAM_ADCSENS1            0x07
#define PARAM_ADCPOST1            0x08
#define PARAM_MEASCONFIG1         0x09

#define PARAM_ADCCONFIG2          0x0A
#define PARAM_ADCSENS2            0x0B
#define PARAM_ADCPOST2            0x0C
#define PARAM_MEASCONFIG2         0x0D

#define PARAM_ADCCONFIG3          0x0E
#define PARAM_ADCSENS3            0x0F
#define PARAM_ADCPOST3            0x10
#define PARAM_MEASCONFIG3         0x11

#define PARAM_ADCCONFIG4          0x12
#define PARAM_ADCSENS4            0x13
#define PARAM_ADCPOST4            0x14
#define PARAM_MEASCONFIG4         0x15

#define PARAM_ADCCONFIG5          0x16
#define PARAM_ADCSENS5            0x17
#define PARAM_ADCPOST5            0x18
#define PARAM_MEASCONFIG5         0x19

#define PARAM_MEASRATE_H          0x1A
#define PARAM_MEASRATE_L          0x1B
#define PARAM_MEASCOUNT0          0x1C
#define PARAM_MEASCOUNT1          0x1D
#define PARAM_MEASCOUNT2          0x1E

#define PARAM_LED1_A        	  0x1F
#define PARAM_LED1_B        	  0x20
#define PARAM_LED2_A        	  0x21
#define PARAM_LED2_B        	  0x22
#define PARAM_LED3_A        	  0x23
#define PARAM_LED3_B        	  0x24

#define PARAM_THRESHOLD0_H  	  0x25
#define PARAM_THRESHOLD0_L  	  0x26
#define PARAM_THRESHOLD1_H  	  0x27
#define PARAM_THRESHOLD1_L  	  0x28
#define PARAM_THRESHOLD2_H  	  0x29
#define PARAM_THRESHOLD2_L  	  0x2A
#define PARAM_BURST         	  0x2B

//==================================================================
//COMMAND Register Value
//==================================================================
#define CMD_RESET_CTR			  0x00
#define CMD_RESET_SW			  0x01
#define CMD_FORCE				  0x11
#define CMD_PAUSE				  0x12
#define CMD_START				  0x13
#define CMD_WRITE				  0x80
#define CMD_READ				  0x40

/*******************************************************************************
 *******    Si115x Register and Parameter Bit Definitions  *********************
 ******************************************************************************/
#define RSP0_CHIPSTAT_MASK      0xe0
#define RSP0_COUNTER_MASK       0x1f
#define RSP0_SLEEP              0x20

extern int16_t SI1133_ReadRegister(uint8_t addr);
extern int16_t SI1133_WriteRegister(uint8_t addr, uint8_t data);
extern int16_t SI1133_ReadParameter(uint8_t addr);
extern int16_t SI1133_WriteParameter(uint8_t addr, uint8_t data);
extern int16_t SI1133_Init(void);
extern int16_t SI1133_NOP(void);
extern int16_t SI1133_Force(void);
extern int16_t SI1133_Start (void);
extern int16_t SI1133_Pause(void);

#endif

驱动:


#include "si1133.h"

int16_t SI1133_ReadRegister(uint8_t addr)
{
	uint8_t x;
	I2C_ReadByte(SI1133_PART_ID, addr, &x);
	return x;
}

int16_t SI1133_WriteRegister(uint8_t addr, uint8_t data)
{
	I2C_WriteByte(SI1133_PART_ID, addr, &data);
	return 0;
}

static int16_t SI1133_WriteBlock(uint8_t addr, uint8_t* p_data, uint16_t len)
{
	I2C_WriteBlock(SI1133_PART_ID, addr, p_data, len);
	return 0;
}

static int16_t SI1133_ReadBlock(uint8_t addr, uint8_t* p_data, uint16_t len)
{
	I2C_ReadBlock(SI1133_PART_ID, addr, p_data, len);
	return 0;
}

static int16_t WaitUntilSleep(void)
{
	int16_t retval = -1;
	uint8_t count = 0;
	while (count < 5)
	{
		retval = SI1133_ReadRegister(REG_RESPONSE0);
		if ((retval & RSP0_CHIPSTAT_MASK) == RSP0_SLEEP)   break;
		if (retval <  0)   return retval;
		count++;
	}
	return 0;
}

static int16_t SI1133_SendCMD(uint8_t command)
{
	int16_t  response, retval;
	uint8_t  count = 0;
	response = SI1133_ReadRegister(REG_RESPONSE0);
	if (response < 0) return response;
	response = response & RSP0_COUNTER_MASK;
	for (count = 0 ; count < 5; count++)
	{
		if ((retval = WaitUntilSleep()) != 0) return retval;
		if (command == 0) break;
		retval = SI1133_ReadRegister(REG_RESPONSE0);
		if ((retval & RSP0_COUNTER_MASK) == response) break;
		else if (retval < 0) return retval;
		else
			response = retval & RSP0_COUNTER_MASK;
	}
	if ((retval = (SI1133_WriteRegister(REG_COMMAND, command)) != 0))
	{
		return retval;
	}
	for (count = 0 ; count < 5; count++)
	{
		if (command == 0)  break;
		retval = SI1133_ReadRegister(REG_RESPONSE0);
		if ((retval & RSP0_COUNTER_MASK) != response) break;
		else if (retval < 0) return retval;
	}
	return 0;
}

int16_t SI1133_ReadParameter(uint8_t addr)
{
	int16_t retval;
	retval = SI1133_SendCMD(CMD_READ | (addr & 0x3F));
	if ( retval != 0 )    return retval;
	retval = SI1133_ReadRegister(REG_RESPONSE1);
	return retval;
}

int16_t SI1133_WriteParameter(uint8_t addr, uint8_t data)
{
	uint8_t buffer[2];
	int16_t retval, response_stored, response;
	buffer[0] = data; buffer[1] = CMD_WRITE | (addr & 0x3F);
	if ((retval = WaitUntilSleep()) != 0)    return retval;
	response_stored = RSP0_COUNTER_MASK & SI1133_ReadRegister(REG_RESPONSE0);
	retval = SI1133_WriteBlock(REG_HOSTIN0, (uint8_t *)buffer, 2);
	if (retval != 0)  return retval;
	response = SI1133_ReadRegister(REG_RESPONSE0);
	while ((response & RSP0_COUNTER_MASK) == response_stored)
	{
		response = SI1133_ReadRegister(REG_RESPONSE0);
	}
	if (retval < 0)   return retval;
	else   return 0;
}

static int16_t SI1133_Reset(void)
{
	int16_t retval = 0;
	Delay_ms(10);
	Delay_ms(10);
	Delay_ms(10);
	retval += SI1133_WriteRegister(REG_COMMAND, CMD_RESET_SW);
	Delay_ms(10);
	return retval;
}

int16_t SI1133_NOP(void)
{
	return SI1133_SendCMD(CMD_RESET_CTR);
}

int16_t SI1133_Force(void)
{
	return SI1133_SendCMD(CMD_FORCE);
}

int16_t SI1133_Start (void)
{
	return SI1133_SendCMD(CMD_START);
}

int16_t SI1133_Pause(void)
{
	uint8_t countA, countB;
	int8_t  retval = 0;
	while ((RSP0_CHIPSTAT_MASK & retval) != RSP0_SLEEP)
	{
		retval = SI1133_ReadRegister(REG_RESPONSE0);
	}
	countA = 0;
	while (countA < 5)
	{
		countB = 0;
		while (countB < 5)
		{
			retval = SI1133_ReadRegister(REG_RESPONSE0);
			if ((retval & RSP0_COUNTER_MASK) == 0)     break;
			else
			{
				SI1133_WriteRegister(REG_COMMAND, 0x00);
			}
			countB++;
		}
		SI1133_SendCMD(CMD_PAUSE);
		countB = 0;
		while (countB < 5)
		{
			retval = SI1133_ReadRegister(REG_RESPONSE0);
			if ((retval & RSP0_COUNTER_MASK) != 0)        break;
			countB++;
		}
		retval = SI1133_ReadRegister(REG_RESPONSE0);
		if ((retval & RSP0_COUNTER_MASK) == 1 )      break;
		countA++;
	}
	return 0;
}
int16_t SI1133_Init(void)
{
	int16_t    retval;
	retval  = SI1133_Reset();
	Delay_ms(10);
	retval += SI1133_WriteParameter( PARAM_CHAN_LIST, 	0x3f);
	//UV
	retval += SI1133_WriteParameter( PARAM_ADCCONFIG0, 	0x78);
	retval += SI1133_WriteParameter( PARAM_ADCSENS0, 	0x89);
	retval += SI1133_WriteParameter( PARAM_ADCPOST0, 	0x00);
	retval += SI1133_WriteParameter( PARAM_MEASCONFIG0, 0x40);
	//
	retval += SI1133_WriteParameter( PARAM_ADCCONFIG1, 	0x6d);
	retval += SI1133_WriteParameter( PARAM_ADCSENS1, 	0x89);
	retval += SI1133_WriteParameter( PARAM_ADCPOST1, 	0x00);
	retval += SI1133_WriteParameter( PARAM_MEASCONFIG1, 0x40);

	retval += SI1133_WriteParameter( PARAM_ADCCONFIG2, 	0x6b);
	retval += SI1133_WriteParameter( PARAM_ADCSENS2, 	0x89);
	retval += SI1133_WriteParameter( PARAM_ADCPOST2, 	0x00);
	retval += SI1133_WriteParameter( PARAM_MEASCONFIG2, 0x40);

	retval += SI1133_WriteParameter( PARAM_ADCCONFIG3, 	0x61);
	retval += SI1133_WriteParameter( PARAM_ADCSENS3, 	0x89);
	retval += SI1133_WriteParameter( PARAM_ADCPOST3, 	0x00);
	retval += SI1133_WriteParameter( PARAM_MEASCONFIG3, 0x40);

	retval += SI1133_WriteParameter( PARAM_ADCCONFIG4, 	0x60);
	retval += SI1133_WriteParameter( PARAM_ADCSENS4, 	0x89);
	retval += SI1133_WriteParameter( PARAM_ADCPOST4, 	0x00);
	retval += SI1133_WriteParameter( PARAM_MEASCONFIG4, 0x40);

	retval += SI1133_WriteParameter( PARAM_ADCCONFIG5, 	0x79);
	retval += SI1133_WriteParameter( PARAM_ADCSENS5, 	0x89);
	retval += SI1133_WriteParameter( PARAM_ADCPOST5, 	0x00);
	retval += SI1133_WriteParameter( PARAM_MEASCONFIG5, 0x40);

	retval += SI1133_WriteParameter( PARAM_MEASRATE_H, 	0x09);
	retval += SI1133_WriteParameter( PARAM_MEASRATE_L, 	0xc4);
	retval += SI1133_WriteRegister(  REG_IRQ_ENABLE, 	0x3f);
	retval += SI1133_Start();
	return retval;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F103C8开发紫外线传感器SI1133的使用(七) 的相关文章

  • Pycharm配置Jupyter Notebook实现本地开发与调试

    Pycharm专业版中集成了Jupyter Notebook xff0c 方便用户编辑 xff0c 执行和调试Notebook代码 xff0c 并检查执行输出 个人感觉 xff0c 相比于Jupyter提供的网页编辑器 xff0c Pych
  • Zookeeper选举机制介绍

    ZooKeeper是一个高可用的分布式协调服务 xff0c 它的核心功能之一就是选举机制 当ZooKeeper集群中的一个节点宕机时 xff0c 需要通过选举机制来选出一个新的leader节点 xff0c 确保集群的正常运行 下面是ZooK
  • redis实现布隆过滤器

    Redis是一种基于内存的数据存储系统 xff0c 具有高性能 高可用性 高扩展性等特点 xff0c 因此被广泛用于实现布隆过滤器 以下是一种基于Redis实现布隆过滤器的方案 xff1a 创建一个长度为m的位数组 xff08 bit ar
  • 解决shiro的登录成功后跳转到自定义error.html的问题

    解决shiro的登录成功后跳转到error html 1 先说一下问题现象 xff1a saas项目中 xff0c 登录成功之后 xff0c 跳转了error html xff0c 停顿一会儿后进入主页面 2 说一下我处理这个问题的步骤 x
  • 喜茶皇茶茶叶带您走上致富之路

    我国是茶文化的发源地 xff0c 尤其是南方各类品种的茶层出不穷 xff0c 茶韵茶香引人入胜 消费者生活水平大幅提高 xff0c 饮茶几乎已经成为一种时尚 xff0c 皇茶 在市场上受到大家的认可与喜爱 xff0c 短短时间内迅速发展壮大
  • 处理Spire.Pdf 生成书签有 Evaluation Warning : The document was created with Spire.PDF for .NET.字样的问题

    处理spire Pdf生成时的警告信息 这俩天在使用spire Pdf生成书签的时候总是会有Evaluation Warning The document was created with Spire PDF for NET 的警告字样 x
  • Android Drawable Preview插件适配Android Studio4.1版发布

    Android Drawable Preview是一个在安卓开发中非常有用的AS IDEA插件 可以将drawable资源文件的icon替换成内容的预览图 达到不需要打开资源文件 快速预览内容的功能 实在是非常的方便快捷 让开发工作更加的愉
  • 变频器的逆变、变频原理

    变频器的逆变 变频原理 YJZhang 从事制造业质量管理 xff0c 做过PCBA 线束 电话机 变频器行业 90 人赞同了该文章 变频器将直流电转变为交流电的这个过程叫 逆变 xff08 inverting 先讲逆变过程 xff0c 分
  • ubuntu20.04设置自动文字模式登录

    文字模式登录后取得的程序称为 Shell xff08 壳 xff09 xff0c Linux 的壳程序是bash xff08 Bourne Shell的增强版本 xff09 设置文字模式登录 xff1a 第一步 xff1a 进入grub文件
  • 从高考到程序员

    记得当年进入考场的时候也是志气满满 xff0c 心里念叨着一定要考上自己理想的大学 xff0c 光宗耀祖 当时坐在学校安排的bus上向考场的方向行进 xff0c 看到路边的交警叔叔 xff0c 情不自禁的喊了一声 xff0c 交警大哥辛苦了
  • Android内存优化(二)之如何分析native heap

    如何获取native heap请阅读上篇文章 xff0c 本篇文章将主要介绍如何分析一个native heap文件 xff0c 以及我们的native memory leak问题如何发现并定位 首先先来看一下实际中我们看到的native h
  • 基于springboot的薪资管理系统设计

    一 系统介绍 项目源码 xff1a https gitee com oklongmm code 这是一个界面简洁的薪资管理系统 xff0c 虽然界面简单 xff0c 但其工资项配置 xff0c 与考勤挂钩 xff0c 自动核算功能强大 xf
  • Dijkstra算法详解

    1 dijkstra算法简介 Dijkstra算法是由E W Dijkstra于1959年提出 xff0c 又叫迪杰斯特拉算法 xff0c 它应用了贪心算法模式 xff0c 是目前公认的最好的求解最短路径的方法 算法解决的是有向图中单个源点
  • C++建立动态二维数组

    C 43 43 建立动态二维数组主要有两种方法 xff1a 1 使用数组指针 xff0c 分配一个指针数组 xff0c 将其首地址保存在b中 xff0c 然后再为指针数组的每个元素分配一个数组 int b 61 new int row 分配
  • 理解负载均衡

    什么是平均负载 xff1f 单位时间内 xff0c 系统处于可运行状态和不可中断状态的平均进程数 xff0c 也就是平均活跃进程数 xff0c 它和CPU使用率并没有直接关系 所谓可运行状态的进程 xff0c 是指正在使用CPU或者等待CP
  • 理解CPU使用率和CPU上下文切换

    1 CPU使用率 1 1 CPU使用率查看 当发现服务或机器卡的时候 xff0c 我们都是先通过top命令查看服务器CPU使用率 默认每3秒刷新一次 top top 18 10 58 up 1216 days 7 38 4 users lo
  • 自动驾驶概述

    1 自动化能力定义 对自动驾驶能力有多个定义标准 xff0c 比较常用的是SAE International关于自动化层级的定义 具体是 L0 驾驶员完全掌控车辆 L1 自动系统有时能够辅助驾驶员完成某些驾驶任务 L2 自动系统能够完成某些
  • java遍历泛型的方法

    一 List遍历 Java中List遍历有三种方法来遍历泛型 xff0c 主要为 xff1a 1 for循环遍历 2 iterator遍历 3 foreach遍历 package com gmail lsgjzhuwei import ja
  • java web文件下载功能实现

    需求 xff1a 实现一个具有文件下载功能的网页 xff0c 主要下载压缩包和图片 两种实现方法 xff1a 一 xff1a 通过超链接实现下载 在HTML网页中 xff0c 通过超链接链接到要下载的文件的地址 lt DOCTYPE htm
  • java创建线程的三种方式及其对比

    Java中创建线程主要有三种方式 xff1a 一 继承Thread类创建线程类 xff08 1 xff09 定义Thread类的子类 xff0c 并重写该类的run方法 xff0c 该run方法的方法体就代表了线程要完成的任务 因此把run

随机推荐

  • 史上最全面最易懂的,Spring框架学习教程

    Spring通过PlatformTransactionManager平台事务管理器接口对事务的管理进行高度抽象 xff0c 但是该接口下具体的实现是由各个平台自己实现 xff0c Spring并不直接管理事务 xff0c 而是提供了多种事务
  • 'hibernate.dialect' must be set when no Connection available

    今天碰到的这个问题 xff0c 很无厘头 xff0c 网上搜索了很多 xff0c 都不靠谱 xff0c 还是靠自己 解决方法是在hibernate cfg xml中添加 lt property name 61 34 dialect 34 g
  • javascript动态插入html元素

    主要有是两种方案 xff1a 1 使用DOM span class hljs comment 使用createElement创建元素 span span class hljs keyword var span dialog 61 docum
  • python中switch语句用法

    python中是没用switch语句的 xff0c 这应该是体现python大道至简的思想 xff0c python中一般多用字典来代替switch来实现 coding utf 8 from future import division d
  • ROS的 sudo rosdep init 的报错终极解决方案

    ROS的 sudo rosdep init 的报错解决方案 安装ROS时sudo rosdep init指令报错 xff1a ERROR span class token operator span cannot download span
  • 干支纪年

    干支纪年 摘自 xff1a http baike baidu com view 187057 htm 1 天干 xff08 甲 xff09 象草林破土而萌 xff0c 阳在内而被阴包裹 又有认为 xff0c 甲者铠甲也 xff0c 把万物冲
  • “密码不满足密码策略的要求,检查最小密码长度、密码复杂性和密码历史的要求”的解决办法(Windows...

    Windows Server 2003解决办法是 xff1a 选择 开始 gt 程序 gt 管理工具 gt 域安全策略 gt 帐户策略 gt 密码策略 密码必须符合复杂性要求 xff1a 由 已启用 改为 已禁用 xff1b 密码长度最小值
  • 解决android studio 不同ApplicationId可能导致xmlns命名空间报错

    遇到一个需求 xff0c 想出不同渠道 xff0c 我们可以知道在build gradle里面声明 productFlavors dev minSdkVersion 21 applicationId 34 xxx xxx xxx 34 ma
  • Manjaro Linux KDE 安装后的配置

    一 更换中国源 span class token function sudo span pacman mirrors i c China m rank 这个命令执行完毕的时候后弹窗让你选择想要使用的源 xff0c 选择速度最快的那个就可以了
  • 盘点程序员情人节的表白,前端程序员最浪漫,后端不服来战

    loonggg 读完需要3分钟 速读仅需1分钟 今天是七夕 xff0c 中国的情人节 xff0c 当然了就是牛郎和织女团聚的日子 在 IT 群体中 xff0c 很多人都说程序员不浪漫 xff0c 程序员不懂得浪漫 xff0c 程序员木讷 x
  • 毕业设计 Spring Boot的在线音乐网站系统(含源码+论文)

    文章目录 1 项目简介2 实现效果2 1 界面展示 3 设计方案3 1 概述3 2 系统流程3 2 1 系统开发流程 3 3 系统结构设计 4 项目获取 1 项目简介 Hi xff0c 各位同学好呀 xff0c 这里是M学姐 xff01 今
  • mac(osx) apache无法启动 localhost无法访问服务器

    问题描述 xff1a 由于删除了 private var log下面的日志 xff0c 导致重启电脑后apache无法正常工作 删除log的初衷是 xff1a 当系统用久了 xff0c 日志文件占据了几十个G的硬盘容量 造成的后果 xff1
  • 去掉了“摆动窗口”特效

    自从安装了KDE4以后 xff0c 我就再也离不开那些华丽的特效了 很多的时候 xff0c 不得不忍受万分缓慢的速度 昨天 xff0c 对开启的特效进行了一些精简 xff1a 最大化 最小化窗口特效仅保留魔灯 xff1b 关闭了摆动窗口特效
  • 单片机关键字sfr和sbit的理解

    在单片机C语言编程中 xff0c 扩充了两个关键字sfr和sbit sfr Special Function Register特殊功能寄存器的缩写 xff0c sbit 特殊功能寄存器位 xff0c 与定义一般的int char型变量不同
  • CSR1010蓝牙开发I/O操作

    CSR1010开发前期准备 1 开发环境CSR uEnergy SDK 2 5 1 2 硬件准备keyfob蓝牙开发板 xff0c USB SPI下载器 CSR1010 I O开发须知 xff1a 关于I O操作的函数库被定义在头文件 lt
  • ArchLinux必备命令记录

    1 添加新账户 useradd username新建账户 useradd d home xxx m xxx创建用户 xff0c 并同时生成用户目录 xff0c 不然账户无法正常启用 passwd username修改密码 userdel f
  • CSR1010蓝牙开发探索(一)

    花了多少时间我已经不想提起 xff0c 但是至少还是有点成果的 xff0c 分析了不少代码 xff0c 也看了不少资料 xff0c 发现比较接地气的东西还是比较少 xff0c 不多花点时间积累 xff0c 说实话很辛苦 现在还没有足够的水平
  • STM32F103C8开发74HC595串行转并行输出(五)

    1 新建项目 xff0c 选择芯片型号 xff0c 选中如下库文件 xff1a 代码如下 xff1a include 34 stm32f10x h 34 define MOSIO GPIO Pin 12 61 PA12 define R C
  • STM32F103C8开发I2C通信(六)

    关于参数id的说明 xff1a id是指与MCU相通信的设备的地址 xff0c 其中id为七位地址 xff0c 最后一位作为读写标志位使用 例如 xff1a 当外接设备为型号为24C02的E2PROM时 xff0c 根据24C02数据手册说
  • STM32F103C8开发紫外线传感器SI1133的使用(七)

    SI1133传感器是基于I2C通信的 xff0c 关于I2C部分请参考 xff1a 关于传感器初始化参数的说明 xff1a PARAM CHAN LIST 配置通道 xff0c 从bit0到bit5 分别代表通道0到5 xff0c 共六个通