关于STM32基本定时器设置秒数分析
先略览一下寄存器,CR1和CR1是控制寄存器,SR是状态寄存器,ARR就是溢出值寄存器,CNT就是计数器的当前值,PSC是预分频寄存器。预分频寄存器?听的傻眼了吧,前面几个个寄存器听的还能理解,一听到预分频寄存器,好像不知道是干嘛用的。瑞生来给你解释一下吧,你可以给预分频寄存器里面写一个从0~65535的值,这个值+1,就是定时器运行的时钟。举个例子,比如单片机工作在主频72MHz,预分频寄存器写0,预分频系数就是0+1=1,定时器的时钟就是72MHz/1=72MHz;再举个例子,比如单片机还是工作在主频72MHz,预分频寄存器写71,预分频系数就是71+1=72,定时器的时钟就是72MHz/72=1MHz。知道定时器的时钟有什么用?相信很多初学者不清楚,定时器的时钟关乎定时器计数器CNT递增的时间间隔,根据频率和周期的公式f=1/T,定时器计数器递增的时间间隔就是1/定时器的时钟,例如当定时器时钟为1MHz时,定时器计数器递增的时间间隔就是1/1MHz=1微秒,这时,如果你把溢出值设置为1000,就是1000*1us=1ms溢出。第一条语句,设置预分频系数为35999+1=36000,所以定时器的时钟为72000000/36000=2000Hz,那么定时时间间隔就是1/2000=0.0005秒,即0.5毫秒。
第二条语句,设置溢出值为ms乘以2,假如要延时1秒,函数的参数ms就是1000,溢出值就是1000*2=2000,2000*0.5毫秒=1000毫秒,即1秒。这时候,有人会说,为什么不干脆把预分频值PSC设置为71999,即预分频系数为72000,定时器的时钟就是72000000/72000=1000Hz,定时时间就是1毫秒,那么直接把函数的参数ms给了溢出值寄存器ARR就可以了,就不必乘以2了。想法是可以,但是你得知道,定时器都是16位的,所以PSC的值最大到65535,到不了71999。这下你明白了吧?
c++下识别文件夹下的内容
//函数名称:FindFile
//函数功能:查找文件夹中的文件
//参数说明:
// 基础路径:pstrBase(如:d:\soft);
// 查找类型:pfileType
// pfileType = ".":表示查找的是文件夹;
// pfileType = 其他(如:".txt"):表示查找的是文件;
// 得到的内容:strfileNames[]
// 内容个数:fileNum,默认为0;
//返 回 值:内容个数
int FindFileInf(LPCTSTR pstrBase, LPCTSTR pfileType, CString strfileNames[], int fileNum)
{
CFileFind finder;
//CString strfileNames[100];
CString strBasepath(pstrBase);
CString strfileType(pfileType);
//.表示查找基路径下的文件夹
if(strfileType == ".")
{
strBasepath += _T("\\*.*");
}
else
{
strBasepath = strBasepath + _T("\\*")+ strfileType;
}
BOOL bWorking = finder.FindFile(strBasepath);
while(bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDots())//根目录
{
continue;
}
else if(finder.IsDirectory())//文件夹
{
if(strfileType==".")
{
CString str = finder.GetFileName();
strfileNames[fileNum] = str;
fileNum++;
//FindFile(strBasepath+"\\"+str, strfileType,strfileNames, fileNum);//如果要看子文件夹中的文件夹,使用该递归
}
//else//查找子文件夹中的文件
//{
// CString str = finder.GetFileName();
// strfileNames[fileNum] = str;
// fileNum++;
// FindFile(strBasepath+"\\"+str, strfileType,strfileNames, fileNum);
//
//}
}
else//文件
{
if(!strfileType.Compare("."))
{
CString str = finder.GetFileName();
strfileNames[fileNum] = str;
fileNum++;
//FindFile(strBasepath+“\\”+str, strfileType, fileNum);
}
}
}
return fileNum;
}
_USE_32BIT_TIME_T 32BIT time_t
新版本的VC的time_t为8位。如果要使用32位的time_t,需要在stdafx.h里面前面定义_USE_32BIT_TIME_T:
#define _USE_32BIT_TIME_T
000000000000000000000
还原 备份 mssql sqlserver
SQL Server备份表数据:
bcp table1 out table1.dat -Uuser -Ppass -Sip -w -t "|@}2!"
还原表数据:
bcp table1 in table1.dat -Uuser1 -Ppass1 -Sip1 -w -E -t "|@}2!"