中易网

stm8时钟切换问题

答案:1  悬赏:0  
解决时间 2021-02-22 10:35


#include"stm8s105s4.h"
//函数功能:延时功能
//输入参数:ms--要延时的毫秒数,这里假设cpu的主频为2M
//输出参数:无
//返回参数:无
//备 注: 无
void DelayMs(unsigned int ms)
{
while(ms != 0)
{
unsigned char i;
for(i=0;i<250;i++);
for(i=0;i<75;i++);
ms--;
}
}
void GPIO_Int(void)
{
PD_DDR = 0x18;
PD_CR1 = 0x18;
PD_CR2 = 0x00;
}
_Bool led2 @PD_ODR:3;
_Bool led1 @PD_ODR:4;
main()
{
int i;
GPIO_Int();
led1 = 1;
led2 = 1;
CLK_ECKR = 0x01;//enable HSE
while((CLK_ECKR & 0x02) == 0x00);//等待HSE
for(;;)
{
CLK_SWCR = CLK_SWCR | 0x02;//enable switch
CLK_SWR = 0xB4;//set hse as master clock
while((CLK_SWCR & 0x08) == 0);//judge hse ready or not
CLK_SWCR = CLK_SWCR & 0xFD;//clear sign
for(i=0;i<10;i++)
{
led2 = 1;
led1 = 1;
DelayMs(1000);
led2 = 0;
led1 = 0;
DelayMs(1000);
}
CLK_SWCR = CLK_SWCR | 0x02;
CLK_SWR = 0xE1;
while((CLK_SWCR & 0x08) == 0);
CLK_SWCR = CLK_SWCR & 0xFD;
for(i=0;i<10;i++)
{
led2 = 1;
led1 = 1;
DelayMs(1000);
led2 = 0;
led2 = 0;
DelayMs(1000);

}

}
}

为什么我把这段程序烧录进去发现两个led都是长亮的?
还有就是这句 while((CLK_SWCR & 0x08) == 0);话的逻辑是什么?网上说等待时钟稳定,但他是如何工作的?谢谢啦
最佳答案
应该是延时的for循环被优化了,可以调整编译器优化选项或在循环体内加点指令试试,可以不改程序,先跟踪到while循环体看看for循环如何了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
八山朱地址在什么地方,想过去办事
MySQL中数组变量作为查询参数sql语句该如何写
读数时万级的数按什么级读再在后面加一个什么
福来士在什么地方啊,我要过去处理事情
莫氏6号锥度怎么加工
米拉熊香港时尚童装三原店地址在什么地方,想
旋风少女百草和陈翔第一次说话在几集?
笔记本电脑鼠标可以动打开软件点不到东西关闭
岚皋县疾病预防控制中心在哪里啊,我有事要去
黄山奇石是什么样的散文
新生代农民工的出路,失地农民工和无地农民工
福顺驾培(报名处)我想知道这个在什么地方
思悼世子电影的主题曲
皇明专卖店我想知道这个在什么地方
豆包网怎么样啊
推荐资讯
大家好,请问下物流控货对买家来说有风险吗?
3x2-16x+5=0:“如何利用因式分解法化为(3x-
上沙河立交桥/吐乌大高速公路(路口)这个地址
如何更改wiwf密码
从松原到正兰的客车有几趟?
丰禾杂货店地址在什么地方,想过去办事
铸宝传情在什么地方啊,我要过去处理事情
手机搜狗浏览器在其他手机上登录账户后 收藏
请教Reductions in Uterine Perfusion Pressu
三只松鼠龙井茶怎么样啊
金地·格林小镇东北门地址在哪,我要去那里办
用友财务软件 所得税贷方红字 是不是冲减计提
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?