如何降低stm32核心时钟频率?

如何降低stm32核心时钟频率?,第1张

在你的main函数初始化的最后,进入大循环之前,添加如下语句:
RCC->CFGR &= ~0x00000003;//系统时钟清0
RCC->CFGR |= 0x00000001 ;//00:HSI 01:HSE 10:PLL,最低两位00内部RC,01外部晶振,是没有倍频的

m15r1。
Alienware笔记本电脑,由于力求极致的性能,机身不可避免地被设计得十分厚重,以我曾经使用的M18xR2为例,这是一台搭载184英寸屏幕的双卡机型,整机尺寸达436mm332mm53~542mm,板砖都相形见绌。
历经更新换代,Alienware迎来了新一代旗舰笔记本——AlienwareM15,相比老前辈们,它一改往日Alienware笔记本家族厚重的形象,机身变薄了许多,不难看出,Alienware在追求质量性能外观的同时,也开始在厚度上发力了。那么,AlienwareM15,这一台成功瘦身的产品能否在变薄的同时,像它的老前辈们那样力求极致的性能呢。

#include<reg52h>
//#include<intrinsh>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;//按键1
sbit key2=P3^5;//按键2
sbit key3=P3^6;//按键3
sbit key4=P3^7;//按键4
sbit dula=P2^2; //取段
sbit wela=P2^3; //取位
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0x40,0x00};
void init();
void jianpan();
void display(uchar,uchar,uchar,uchar,uchar,uchar,uchar);
uchar a,b,c,d,e,f,miao,fen,shi,i,j,k;
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
init();
while(1)
{

jianpan();
display(a,b,c,d,e,f,j);
}
}
void jianpan()
{
if(key1==0||key2==0||key3==0||key4==0) //按键扫描
{
delay(5);
if(key1==0) //去抖
{
miao++; //加秒
if(miao==60)
miao=0;

while(!key1); //去抖
delay(5);
while(!key1);

}
if(key2==0)
{

fen++; //加分
if(fen==60)
fen=0;
a=miao%10;
b=miao/10; //让miao=0 分离成 0 ,0
c=fen%10;
d=fen/10;
e=shi%10;
f=shi/10;
display(a,b,c,d,e,f,j);
while(!key2);
delay(5);
while(!key2);
}
if(key3==0)
{
shi++; //加时
if(shi==24)
shi=0;

while(!key3);
delay(5);
while(!key3);
}
if(key4==0)
{
delay(5);
if(key4==0)
{
k++;
if(k==1)
TR0=1; //开执行中断 ,启动时钟。
if(k==2)
{
TR0=0;
k=0; //关执行中断,暂停时钟。
}
while(!key4);
delay(5);
while(!key4);
}
}
a=miao%10;
b=miao/10; //让miao=0 分离成 0 ,0
c=fen%10;
d=fen/10;
e=shi%10;
f=shi/10;

}
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar j) //数码管显示函数
{
P1=0xff;
dula=1;
P1=table[a];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面
wela=1;
P1=0x7f;
wela=0;
delay(1);
P1=0xff;
dula=1;
P1=table[b];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面去
wela=1;
P1=0xbf;
wela=0; //以上都是秒控制显示
delay(1); //控制数码管上面数亮的时间,过长会闪烁,过短会产生重叠,

P1=0xff;
dula=1;
P1=table[c];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面去
wela=1;
P1=0xef;
wela=0;
delay(1); //控制数码管上面数亮的时间,过长会闪烁,过短会产生重叠,

P1=0xff;
dula=1;
P1=table[d];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面去
wela=1;
P1=0xf7;
wela=0; //cd分控制位
delay(1); //控制数码管上面数亮的时间,过长会闪烁,过短会产生消影
P1=0xff;
dula=1;
P1=table[e];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面去
wela=1;
P1=0xfd;
wela=0;
delay(1); //控制数码管上面数亮的时间,过长会闪烁,过短会产生重叠,
P1=0xff;
dula=1;
P1=table[f];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面去
wela=1;
P1=0xfe;
wela=0; //ef位时控制显示
delay(1); //控制数码管上面数亮的时间,过长会闪烁,过短会产生重叠
dula=1;
P1=table[j];
dula=0;
P1=0xff; //防止上面的P1跑入刚刚打开的位里面去
wela=1;
P1=0xdb;
wela=0; //中间间隔的斜杠
delay(1); //控制数码管上面数亮的时间,过长会闪烁,过短会产生重叠
}

void init() //初始值
{
miao=0;
fen=0;
shi=0;
a=miao%10; //分离两个数,bcef同a
b=miao/10;
c=fen%10;
d=fen/10;
e=shi%10;
f=shi/10;

k=0;
i=0;//初始0
j=20; //间隔闪动
TMOD=0x01; //设置T0的工作方式1
EA=1; //开总中断
ET0=1; //开定时中断
TR0=0; //开T0执行允许位
TH0=(65536-50000)/256; //给定初值
TL0=(65536-50000)%256; //给定初值
}
void timer0() interrupt 1 //定时函数
{
TH0=(65536-50000)/256; //给上面赋值
TL0=(65536-50000)%256;
i++;//开始计数

if(i==20) //20次中断一到就是1s
{
i=0;
j++;
if(j==22)
j=20;

miao++; //秒在按1s速度增加
a=miao%10; //分离个位
b=miao/10; //分离十位
}
if(miao==60)//60秒一到就进入分
{
miao=0;
fen++;
a=miao%10;
b=miao/10; //让miao=0 分离成 0 ,0
c=fen%10;
d=fen/10;
}
if(fen==60)
{
fen=0;
c=fen%10; //分离fen=0 成 0,0
d=fen/10;
shi++;
e=shi%10;
f=shi/10;
if(shi==24)
shi=0; //到24后复位
e=shi%10;
f=shi/10; //分离shi=0 成 0,0
}

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存