STM32系统时钟初始化程序。

STM32系统时钟初始化程序。,第1张

不会的,这两句用的是位或的方式,前面那句 PLL<<18位,因为 PLL最小是2,所以

这句执行的结果是 影响 CFGR 的第 19位以上,因为 2<<18 相当于 1<<19,所以影响的最小位是19位,后面那句 1<<16,只影响到CFGR的第16位, 两者不在同一区域,所以互不影响.

而且,后面的 1<<16位,只能第16位是1,其他位全是 0,跟前面的位或,不会影响其他位.

开启一个定时器,在程序当前行和下一行代码上打上断点,调试,运行至代码处,查看定时器计数寄存器值,再运行,继续查看定时器寄存器值,计算出时间差。

看程序被编译的汇编代码,通过汇编代码执行周期数计算时间。

struct tm是直观意义上的时间表示方法:

struct tm {

int tm_sec/* 秒–取值区间为[0,59] */

int tm_min/* 分 - 取值区间为[0,59] */

int tm_hour/* 时 - 取值区间为[0,23] */

int tm_mday/* 一个月中的日期 - 取值区间为[1,31] */

int tm_mon/* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */

int tm_year/* 年份,其值从1900开始 */

int tm_wday/* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */

int tm_yday/* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */

int tm_isdst/* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/

long int tm_gmtoff/*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/

const char *tm_zone/*当前时区的名字(与环境变量TZ有关)*/

}

程序举例#include <stdio.h>

#include <time.h>

int main(void)

{

struct tm *ptr

time_t lt

lt =time(NULL)

ptr=localtime(&lt)

printf("second:%d\n",ptr->tm_sec)

printf("minute:%d\n",ptr->tm_min)

printf("hour:%d\n",ptr->tm_hour)

printf("mday:%d\n",ptr->tm_mday)

printf("month:%d\n",ptr->tm_mon+1)

printf("year:%d\n",ptr->tm_year+1900)

return 0

}

tim 是一个时间计数,是从1900年0分0秒到现在的时间。所以转化从我们日常用的表示一般年要加上1900,月要加上1,而你这里for (i = 1day >= days_in_month(i)i++) 表示月的i是从1开始的,tm_mon不是从0开始,所以day也要+1. 因为日常表示中没有0月0号,只有1月1号


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11614541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存