1. 目录

    AD7705简介

    ​ADC芯片——AD7705最详细讲解(STM32)http://t.csdn.cn/UbXjw

    工程以及主要代码分享,另外,附带演示视频。


    AD7705简介

  • 模块对输入电压进行了0.5倍的分压,才进入芯片采集。

一句话说明白,

TM7705是一个外置16位分辨率双通道ADC芯片,SPI通信协议,采用Σ-∆转换技术。

价格便宜,对标同型号AD7705,基本能直接替换,程序基本通用。

  • AD7705和TM7705功能区别:

AD7705是美国模拟器件公司生产的。15元左右。
TM7705 是深圳天微生产的,引脚和功能和AD7705完全兼容。可以替代AD7705。价格比进口的便宜几倍。5元左右。
(1)TM7705多一个内部2.48V参考电压,可以通过写测试寄存器开启(默认不开启)
(2)TM7705多一种时钟设置方法,可以提高精度。时钟寄存器的ZERO 3个bit位中最高位=1来启用。这种模式下,数据刷新率变低(每秒10个样本),精度变高。

在文末放好调试成功的工程完整文件链接。

在CSDN上,搜索TM7705

这两篇文章是讲解的比较详细的,

ADC芯片——AD7705最详细讲解(STM32)http://t.csdn.cn/UbXjw

STM32F103ZET6驱动TM7705(AD7705)代码加心得http://t.csdn.cn/lWMiE

不过,都没有解决一个实际性的问题,怎么用起来 这个adc

  1. 第一篇,提供了完整工程链接下载,接口也方便,点赞

下载收费积分都是次要的。

最重要的一点是,代码问题重重。

经常TIME OUT ,超时

初始化,以及获取一次ADC需要大概10秒。

似乎是偶尔运行成功一样。

程序是存在问题的。

和作者评论区讨论未果,也许年代久远,作者也难在实际调试

此代码实际运行视频我会放在文末链接中。

  • 第二篇,ADC芯片——AD7705最详细讲解(STM32)

驱动原理讲解确实很详细,建议学习时,仔细阅读。点赞

却只给出了C,H文件,

加入工程并不难,不过,代码简单明了,适合老手进阶使用。

缺乏通用性,代码编程风格相比于前一个文章以及安富莱电子得代码来说,规范性上差太多了。

另外,每次获取值,都要初始化一次。似乎存在重复操作。

总之,在CSDN上,代码存在超时问题,一直未得到解决,

adc数据可以获取到,但是TM7705模块DRDY电平一直为高的问题,始终存在。

经过对数据手册的仔细阅读,程序大体流程如下:

大概可以理解成分布式的寄存器结构。

通信寄存器就是那个大哥,你要动他哪个小弟,怎么动,你都得先告诉他,有的小弟打完了还要告诉大哥结果怎们样。

不多废话了。直接上代码。

优化后,是网上代码-STM32F103ZET6驱动TM7705(AD7705)代码加心得代码修改而来。采用硬件SPI.

另外,自己也写了一个适合更改单片机引脚的软件SPI程序。

工程以及主要代码分享,另外,附带演示视频

百度云https://pan.baidu.com/s/1W1pj8wGVMaSwfc3mdO-0ZQ?pwd=6666

链接:https://pan.baidu.com/s/1W1pj8wGVMaSwfc3mdO-0ZQ?pwd=6666 
提取码:6666

MAIN.C


#include <delay.h>
#include <sys.h>
#include <usart.h>
#include <lcd.h>
#include <drv_spi.h>
#include <drv_tm7705.h>
char BUFFER[200];
int main(void)
{int volt1,volt2;uint16_t adc1,adc2;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVUC中断分组为2uart_init(115200);delay_init();LCD_Init();POINT_COLOR = RED;TM7705_Init();TM7705_CalibSelf(1); //自校准adc1 = TM7705_ReadAdc(1);TM7705_CalibSelf(2); //自校准adc2 = TM7705_ReadAdc(2);while(1){   adc1 = TM7705_ReadAdc(1);adc2 = TM7705_ReadAdc(2);volt1 = (adc1 * 5000) / 65535;volt2 = (adc2 * 5000) / 65535;sprintf(BUFFER,"CH1=%5d v1:%5dmv",adc1,volt1);printf("CH1=%5d v1:%5dmv\r\n",adc1,volt1);LCD_ShowString(60,154,200,16,16,BUFFER);sprintf(BUFFER,"CH2=%5d v2:%5dmv",adc2,volt2);printf("CH2=%5d v2:%5dmv\r\n",adc2,volt2);LCD_ShowString(60,170,200,16,16,BUFFER);}
}
#include <drv_tm7705.h>
#include <drv_spi.h>
#include <delay.h>
#include <lcd.h>
/*TM7705模块可以直接插到STM32f103战舰开发板模块的排母接口上。TM7705模块   STM32F103正点原子战舰开发板SCK   ------  PB13/SPI2_SCKDOUT  ------  PB14/SPI2_MISODIN   ------  PB15/SPI3_MOSICS    ------  PG7/NRF24L01_CSDRDY  ------  PG8/NRF24L01_IRQRST   ------  PG6/NRF_CE
*/#define TM7705_CS             PGout(7)  //CS片选宏定义,低电平有效
#define TM7705_RST          PGout(6)  //RST使能复位宏定义,低电平有效
#define TM7705_DRDY         PGin(8)  //DRDY,低电平时表示TM7705可读/*================下面为芯片的驱动数据定义============================*/
/* 通信寄存器bit定义 */
enum
{/* 寄存器选择  RS2 RS1 RS0  */REG_COMM  = 0x00,    /* 通信寄存器 */REG_SETUP    = 0x10,    /* 设置寄存器 */REG_CLOCK    = 0x20,    /* 时钟寄存器 */REG_DATA = 0x30,    /* 数据寄存器 */REG_ZERO_CH1 = 0x60,    /* CH1 偏移寄存器 */REG_FULL_CH1 = 0x70,    /* CH1 满量程寄存器 */REG_ZERO_CH2    = 0x61,    /* CH2 偏移寄存器 */REG_FULL_CH2 = 0x71,    /* CH2 满量程寄存器 *//* 读写操作 */WRITE         = 0x00,    /* 写操作 */READ       = 0x08,    /* 读操作 *//* 通道 */CH_1       = 0,   /* AIN1+  AIN1- */CH_2     = 1,   /* AIN2+  AIN2- */CH_3     = 2,   /* AIN1-  AIN1- */CH_4      = 3        /* AIN1-  AIN2- */
};/* 设置寄存器bit定义 */
enum
{MD_NORMAL      = (0 << 6),  /* 正常模式 */MD_CAL_SELF       = (1 << 6),  /* 自校准模式 */MD_CAL_ZERO      = (2 << 6),  /* 校准0刻度模式 */MD_CAL_FULL        = (3 << 6),  /* 校准满刻度模式 */GAIN_1         = (0 << 3),  /* 增益 */GAIN_2          = (1 << 3),  /* 增益 */GAIN_4          = (2 << 3),  /* 增益 */GAIN_8          = (3 << 3),  /* 增益 */GAIN_16         = (4 << 3),  /* 增益 */GAIN_32         = (5 << 3),  /* 增益 */GAIN_64         = (6 << 3),  /* 增益 */GAIN_128        = (7 << 3),  /* 增益 *//* 无论双极性还是单极性都不改变任何输入信号的状态,它只改变输出数据的代码和转换函数上的校准点 */BIPOLAR           = (0 << 2),  /* 双极性输入 */UNIPOLAR     = (1 << 2),  /* 单极性输入 */BUF_NO           = (0 << 1),  /* 输入无缓冲(内部缓冲器不启用) */BUF_EN          = (1 << 1),  /* 输入有缓冲 (启用内部缓冲器) 可处理高阻抗源 */FSYNC_0            = 0,FSYNC_1            = 1        /* 不启用 */
};/* 时钟寄存器bit定义 */
enum
{CLKDIS_0   = 0x00,        /* 时钟输出使能 (当外接晶振时,必须使能才能振荡) */CLKDIS_1 = 0x10,        /* 时钟禁止 (当外部提供时钟时,设置该位可以禁止MCK_OUT引脚输出时钟以省电 */CLK_4_9152M = 0x08,CLK_2_4576M = 0x00,CLK_1M       = 0x04,CLK_2M      = 0x0C,/*输出更新速率设置*/FS_20HZ     = 0X00,FS_25HZ     = 0x01,FS_100HZ    = 0x20,FS_200HZ    = 0x03,FS_50HZ     = 0x04,FS_60HZ     = 0x05,FS_250HZ    = 0x06,FS_500HZ    = 0x07,ZERO_0      = 0x00,ZERO_1      = 0x80
};static void TM7705_ResetHard(void);       //硬件复位
static void TM7705_SyncSPI(void);
static uint16_t TM7705_Read2Byte(void);/*====================芯片的驱动数据定义到此结束==========================*/void TM7705_Init(void) //初始化函数
{uint16_t read = 0;/*==信号引脚初始化==*/GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOG, ENABLE);    //使能PB,G端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;                 //PB12上拉 防止W25X的干扰GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;          //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化指定IOGPIO_SetBits(GPIOB,GPIO_Pin_12);//上拉               GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  //PG 7 推挽    CS GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定IOGPIO_SetBits(GPIOG,GPIO_Pin_7);  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;  //PG6  推挽   RST         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定IOGPIO_ResetBits(GPIOG,GPIO_Pin_6 );GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_8;    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IPU; //PG8 输入  DRAY  GPIO_Init(GPIOG, &GPIO_InitStructure);GPIO_ResetBits(GPIOG,GPIO_Pin_8 );SPI2_Init();           //初始化SPI2外设,在drv_spi.h中实现SPI2_SetSpeed(SPI_BaudRatePrescaler_4);//设置为时钟TM7705_CS = 1;           //TM7705初始化不选中TM7705_ResetHard();       //硬件复位TM7705_SyncSPI();      //同步SPI接口时序/*配置时钟寄存器*/TM7705_CS = 0; SPI2_ReadWriteByte(REG_CLOCK | WRITE |CH_1); //先写通信寄存器,下一步写时钟寄存器SPI2_ReadWriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ ); //刷新速率250HZSPI2_ReadWriteByte(REG_CLOCK | WRITE |CH_2); //先写通信寄存器,下一步写时钟寄存器SPI2_ReadWriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ ); //刷新速率250HZTM7705_CS = 1;SPI2_ReadWriteByte(REG_SETUP | WRITE |CH_1); //先写通信寄存器,下一步写设置寄存器SPI2_ReadWriteByte(MD_NORMAL | GAIN_1 | UNIPOLAR |BUF_EN |FSYNC_0    ); //写设置寄存器正常模式,增益为1、dan极性、有缓冲、滤波器工作、/*每次上电进行一次自校准*/TM7705_CalibSelf(1);      //内部自校准SPI2_ReadWriteByte(REG_SETUP | WRITE |CH_2); //先写通信寄存器,下一步写设置寄存器SPI2_ReadWriteByte(MD_NORMAL | GAIN_1 | UNIPOLAR |BUF_EN |FSYNC_0    ); //写设置寄存器正常模式,增益为1、dan极性、有缓冲、滤波器工作、TM7705_CalibSelf(2);      //内部自校准// SPI2_ReadWriteByte(0x39);
//  read = TM7705_Read2Byte();}    /*===硬件复位Tm7705芯片,无出入参数===*/
static void TM7705_ResetHard(void)  //硬件复位
{TM7705_RST = 1;delay_ms(1);TM7705_RST = 0;delay_ms(20);TM7705_RST = 1;delay_ms(1);
}/*=============================================
= 功能:同步TM7705芯片SPI接口时序
= 说明:连续发送32个1即可,不同步会发生数据错位
==============================================*/static void TM7705_SyncSPI(void)      //同步SPI接口时序
{TM7705_CS = 0;SPI2_ReadWriteByte(0xFF);//32个1SPI2_ReadWriteByte(0xFF);SPI2_ReadWriteByte(0xFF);SPI2_ReadWriteByte(0xFF);TM7705_CS = 1;delay_ms(1);}
/*====================================================================
=功能说明: 等待内部操作完成,自校准时间较长,需要等待
=参    数: 无
======================================================================*/
static void TM7705_WaitDRDY(void)
{delay_ms(40);while(GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_8==1)){}//待数据准备好AdDrdy=0,0代表数据准备好了。1的时候没准备好,等待
}/*====================================================================
= 功能说明: 启动自校准. 内部自动短接AIN+ AIN-校准0位,内部短接到Vref 校准满位。此函数执行过程较长,实测约 180ms
= 形    参:  _ch : ADC通道,1或2
=====================================================================*/void TM7705_CalibSelf(uint8_t _ch)
{if (_ch == 1){/* 自校准CH1 */SPI2_ReadWriteByte(REG_SETUP | WRITE | CH_1);  /* 写通信寄存器,下一步是写设置寄存器,通道1 */       SPI2_ReadWriteByte(MD_CAL_SELF | GAIN_1 | UNIPOLAR  |BUF_EN |FSYNC_0);/* 启动自校准 *///写设置寄存器,单极性、有缓冲、增益为1、滤波器工作、自校准delay_ms(190);TM7705_WaitDRDY(); /* 等待内部操作完成 --- 时间较长,约180ms */}else if (_ch == 2){/* 自校准CH2 */SPI2_ReadWriteByte(REG_SETUP | WRITE | CH_2);    /* 写通信寄存器,下一步是写设置寄存器,通道2 */SPI2_ReadWriteByte(MD_CAL_SELF | GAIN_1 | UNIPOLAR |BUF_EN |FSYNC_0);  /* 启动自校准 */delay_ms(190);TM7705_WaitDRDY(); /* 等待内部操作完成  --- 时间较长,约180ms */}}/*=====================================================================
=功能说明:读到一个8位数据
=参    数:返回读到的值
=====================================================================*/
static uint8_t TM7705_ReadByte(void)
{uint8_t read = 0;TM7705_CS = 0;read = SPI2_ReadWriteByte(0xFF);TM7705_CS = 1;return read;
}/*=====================================================================
=功能说明:读到一个16位数据(半字)
=参    数:返回读到16位数据的值
=====================================================================*/
static uint16_t TM7705_Read2Byte()
{uint16_t read = 0;TM7705_CS =0 ;read = SPI2_ReadWriteByte(0xFF);read <<=8;read += SPI2_ReadWriteByte(0xFF);TM7705_CS =1 ;return read;}/*=====================================================================
=功能说明:读到一个24位数据(3字节)
=参    数:返回读到24位数据的值
=====================================================================*/
static uint16_t TM7705_Read3Byte(void)
{uint32_t read = 0;TM7705_CS = 0;read = SPI2_ReadWriteByte(0xFF);read <<=8;read += SPI2_ReadWriteByte(0xFF);read <<=8;read += SPI2_ReadWriteByte(0xFF);TM7705_CS =1 ;return read;}/*=====================================================================
=功能说明:读取采样电压值
=参    数:返回采样值
=====================================================================*/
uint16_t TM7705_ReadAdc(uint8_t _ch)
{uint8_t i;uint16_t read = 0;/* 为了避免通道切换造成读数失效,读2次 */for (i = 0; i < 2; i++){TM7705_WaitDRDY();       /* 等待DRDY口线为0 */        if (_ch == 1){SPI2_ReadWriteByte(0x38);}else if (_ch == 2){SPI2_ReadWriteByte(0x39);}read = TM7705_Read2Byte();}return read;   }
#ifndef _DRV_TM7705_H
#define _DRV_TM7705_H#include "sys.h"void TM7705_CalibSelf(uint8_t _ch); //启动自校准
void TM7705_Init(void); //初始化函数
uint16_t TM7705_ReadAdc(uint8_t _ch);//读值
#endif
#include "drv_spi.h"//SPI口初始化
//这里针是对SPI2的初始化void SPI2_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef  SPI_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能 RCC_APB1PeriphClockCmd(  RCC_APB1Periph_SPI2,  ENABLE );//SPI2时钟使能   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB13/14/15复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOBGPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15上拉SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工SPI_InitStructure.SPI_Mode = SPI_Mode_Master;       //设置SPI工作模式:设置为主SPISPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;       //设置SPI的数据大小:SPI发送接收8位帧结构SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;       //串行同步时钟的空闲状态为高电平SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;  //串行同步时钟的第二个跳变沿(上升或下降)数据被采样SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;     //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;      //定义波特率预分频的值:波特率预分频值为256SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始SPI_InitStructure.SPI_CRCPolynomial = 7;  //CRC值计算的多项式SPI_Init(SPI2, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器SPI_Cmd(SPI2, ENABLE); //使能SPI外设SPI2_ReadWriteByte(0xff);//启动传输         }
//SPI 速度设置函数
//SpeedSet:
//SPI_BaudRatePrescaler_2   2分频
//SPI_BaudRatePrescaler_8   8分频
//SPI_BaudRatePrescaler_16  16分频
//SPI_BaudRatePrescaler_256 256分频 void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
{assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//检测传递给函数的参数是否是有效的参数SPI2->CR1&=0XFFC7;SPI2->CR1|=SPI_BaudRatePrescaler; //设置SPI2速度 SPI_Cmd(SPI2,ENABLE); } //SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI2_ReadWriteByte(u8 TxData)
{       u8 retry=0;                    while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位{retry++;if(retry>200)return 0;}              SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个数据retry=0;while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位{retry++;if(retry>200)return 0;}                               return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据
}
#ifndef __DRV_SPI_H
#define __DRV_SPI_H
#include "sys.h"void SPI2_Init(void);          //初始化SPI口
void SPI2_SetSpeed(u8 SpeedSet); //设置SPI速度
u8 SPI2_ReadWriteByte(u8 TxData);//SPI总线读写一个字节#endif

TM7705(AD7705)驱动调试总结-基于stm32f103zet6-填坑日记相关推荐

  1. Vue入门到上手(10)—— VueJs 填坑日记之在项目中使用Amaze UI

    Vue入门到上手(10)-- VueJs 填坑日记之在项目中使用Amaze UI 上一篇博文,我们把jQuery集成到了项目中,今天我们来集成Amaze ui(妹子UI).先来介绍一下妹子UI.Ama ...

  2. [单片机][at32][填坑日记] [USB卡包] usb快速发包导致卡包

    文章目录 一.问题现象 1. 发送频率过快,导致pc或mcu未能及时应答每一包,造成缓存区遗留上一次数据. 2. usb频发拔插枚举,导致pc/mcu数据丢失, ①mcu丢失数据,每次发送都只能发送上 ...

  3. [单片机][at32][填坑日记] [USB卡包] usb上电过程中快速发包导致卡包(终章)

    文章目录 一.原因造成如下: 1. 串口外设优先级大于USB中断(USBOTG_IRQn),导致串口数据打断USB,致使PC或MCU丢包. 2. 当PC请求usb设备描述符字符串时,USB的其他通道不 ...

  4. 20150726 填坑日记

    三中内填坑: 1. 组合数递推什么的 C(m,n)=C(m,n-1)+C(m-1,n-1).填了个大坑,以前没认真听课QAQ 2. 裸题过河卒 3. 缺角正方形摆放车统计,分上下部分,枚举上部分放几个 ...

  5. android多语言插件,Android 7.0多语言适配,填坑日记(附多语言插件)

    背景 最近项目在适配7.0系统的时候发现一些问题,其中也有多语言适配的问题,就拿出来说说,记记笔记,填填坑. 问题1 因为刚接手项目不久,发现一些奇奇怪怪的bug总是让人头疼,最近发现了在华为荣耀7. ...

  6. WindowsPhoneWindows8.1Windows8Unity3d 填坑日记

    最近的游戏开发大体上接近尾声,总结了不少关于Unity3d面向Windows几大平台开发时遇到的各种坑以及如何填坑的经验.总的来说,Windows8.1 Windows8/RT以及WindowsPho ...

  7. LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1

    LCD 分为LK 和kernel 两部分移植 首先要准备以下东西:屏IC 规格书,初始化代码,硬件原理图  屏IC 规格书->获得时序等数据 初始化代码 ->获得初始化屏幕ic的命令,用于 ...

  8. TP驱动调试分享——基于Qualcomm SDM710平台Android9.0,TP 采用I2C方式和CPU进行通信

    目录 1 厂商驱动代码的添加 1.1 synaptics_dsx代码放到SDM710 kernel input相应目录 1.2 修改input/touchscreen目录下的Makefile和Kcon ...

  9. x210ii DM9000驱动调试成功-基于x210ii/s5pv210开发板

    //-------------------------------------------------------------------------------------------------- ...

  10. 八、VueJs 填坑日记之参数传递及内容页面的开发

    我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是<router-link :to="'/content/' + ...

最新文章

  1. 白盒测试--基本路径测试法
  2. [NC21228]货币系统
  3. 模式识别,计算机视觉,计算机图形学,智能控制,信号处理,语音识别,知识处理,机器学习,数据挖掘领域区别
  4. 今天在cnblog开博啦
  5. hdu 1879 继续通畅工程(最小生成树)
  6. 基于C#在WinCE6.0系统SQLCE3.5的安装开发使用
  7. The server time zone value ‘XXXXXX’ is unrecognized or represents more than one time zone
  8. [c语言]运算符的优先级与结合性
  9. 领域驱动设计学习之路—DDD的原则与实践
  10. 小程序 input自动换行_直播 | 最实用的微信小程序自动化测试技术独家揭秘
  11. Toad9.7与Oracle11g在X86的Win7下的情况
  12. 最新版AWVS14.3.2下载安装教程(2021.6.17版本)
  13. VSCode之容器开发环境搭建 (Remote-Containers)
  14. sparc处理器开发工具_SPARC处理器启动代码的分析与编程
  15. 基于anchor-free的目标检测算法CenterNet研究
  16. 论文阅读《Learning for Disparity Estimation through Feature Constancy》
  17. 手把手教你使用热敏电阻NTC,产品级精度±0.1℃以内,简单明了,内附源码详解,方便移植
  18. Null pointer access: The variable xxx can only be null at this location 解决方案
  19. python HMAC SHA256 加密(python3 HmacSHA256加密)
  20. 查看移动光猫配置文件

热门文章

  1. 川大计算机类专业的录取分数线,四川大学重点专业排名及录取分数线
  2. C语言输出一个19行实心菱形,C语言打印菱形
  3. mysql 进行加减乘除运算,mysql加减乘除
  4. 卡耐基梅陇大学计算机学院名人,卡内基梅隆大学_美国计算机专业排名前十
  5. 个人电子邮箱格式大全,邮箱的正确格式是什么?
  6. 深入浅出MFC:Windows程序的生与死
  7. [游戏杂谈]浅谈单机游戏制作人到底应该具备什么样的能力
  8. java 定时任务 执行次数_java起一个定时任务,在规定的时间内自动执行
  9. Python小项目(学生成绩管理系统)7.排序、显示部分
  10. unity 彩带粒子_unity游戏缤纷五彩纸屑粒子特效Confetti FX 1.0