albertjacksoon 发表于 2014-12-11 21:57:49

STM8 HSE 时钟切换问题

本帖最后由 albertjacksoon 于 2014-12-11 22:29 编辑

    CLK->ECKCR = 0x01;
    while((CLK->ECKCR != 0x03));
    CLK->SWR = 0x04;
    CLK->CKDIVR = 0x00;
    while(!(CLK->SWCR & 0x08));
    CLK->SWCR |= 0x02;
在时钟切换过程中停止在    while(!(CLK->SWCR & 0x08)); 屏蔽改行代码后MCU能运行使用hse 输出CCO正常为晶振频率(接近考虑为器件误差).在主函数中写入while (1)
{
//      GPIO_ToggleBits(GPIOB, GPIO_Pin_2);
            GPIOB->ODR ^= GPIO_Pin_2;
    }
只能看到1.1M的方波(晶振是13.56M).
并且使用GPIO_ToggleBits(GPIOB, GPIO_Pin_2);与GPIOB->ODR ^= GPIO_Pin_2;比较输出的方波频率相差较大,使用寄存器操作时为1.1M,使用库函数操作时只有300多K,开发环境是COSMIC+STVD.请高手指教.

那片清茶 发表于 2014-12-12 09:35:29

你看一下切换到HSI的程序:
    CLK_SWCR = CLK_SWCR | 0x02;    // SWEN <- 1
    CLK_SWR = 0xE1;                // 选择HSI为主时钟源
    while((CLK_SWCR & 0x08) == 0); // 等待切换成功

    CLK_SWCR = CLK_SWCR & 0xFD;    // 清除切换标志

albertjacksoon 发表于 2014-12-12 13:50:37

清茶老师 按你的代码修改后还是不可以,仍然停止等待切换成功这条代码上.

小贾-370388 发表于 2014-12-12 16:38:33

还以是你外部文件的问题,工程中用到的源文件看看全不全

albertjacksoon 发表于 2014-12-13 17:12:40

全的 直接从st官网下载的外设库.源文件不全就会报错啦.而且整个工程 只有时钟配置这几条和GPIO的翻转操作.

奔跑小蜗牛 发表于 2014-12-14 12:25:07

。。。IO口输出速度怎么可能达到晶振的速度??手册的2M 10M 50M是翻转速度,不是输出速度。13.56M的晶振,IO能输出个2M 3M就很不错了。
页: [1]
查看完整版本: STM8 HSE 时钟切换问题