stm8时钟切换问题
答案:1 悬赏:0
解决时间 2021-02-22 10:35
- 提问者网友:樱花树下最美的约定
- 2021-02-21 19:52
#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);话的逻辑是什么?网上说等待时钟稳定,但他是如何工作的?谢谢啦
最佳答案
- 二级知识专家网友:猎杀温柔
- 2021-02-21 21:16
应该是延时的for循环被优化了,可以调整编译器优化选项或在循环体内加点指令试试,可以不改程序,先跟踪到while循环体看看for循环如何了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |