[STM8] STM8关于时钟问题

[复制链接]
 楼主| huangfeng33 发表于 2013-9-15 16:32 | 显示全部楼层 |阅读模式
原来用内部16M的串口波特率正常,切到外部16M晶振后全乱码了,一步步查下去发现 CLK_GetClockFreq();得到的居然是24M频率,但我实现接的是16M晶振,也正常起振了,示波器显示也是16M。我的切换外部时钟的代码如下:

u32 ttt;
ErrorStatus status = ERROR;
CLK_DeInit();
ttt=CLK_GetClockFreq();//这里得到的是2M
CLK_HSECmd(ENABLE);
CLK_HSICmd(ENABLE);
CLK_LSICmd(ENABLE);
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY));
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
ttt=CLK_GetClockFreq();//这里得到的是2M
CLK_ClockSwitchCmd(ENABLE);
status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
if (status == SUCCESS)  //SUCCESS or ERROR
{
CLK_ClockSecuritySystemEnable();
ttt=CLK_GetClockFreq();//这里得到的是24M
}

tianli1980 发表于 2013-9-15 18:04 | 显示全部楼层
你仔细阅读下pdf,然后分析每个一个函数,是不是中间被倍频啦
pofu007 发表于 2013-9-18 11:50 | 显示全部楼层
既然要用外部晶振,你把CLK_HSICmd(DISABLE);CLK_LSICmd(DISABLE)试试。
 楼主| huangfeng33 发表于 2013-9-18 20:14 | 显示全部楼层
这些都是调的库函数,看库里的示例也是差不我这种写法,刚则直接把库的示例代码拷过来跑也一样24M。而且据说STM8S没有倍频的功能只有分频的功能
乌月明星稀 发表于 2013-9-19 12:51 | 显示全部楼层
tianli1980 发表于 2013-9-15 18:04
你仔细阅读下pdf,然后分析每个一个函数,是不是中间被倍频啦

STM8只有分频器,没有倍频器吧????内部没有PLL电路的。
 楼主| huangfeng33 发表于 2013-9-19 20:25 | 显示全部楼层
谢谢楼上各位朋友的回复,刚刚试出来用手动切换就正常了,刚开始玩STM8,谁能给个解释啊?
status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_HSE, DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
cjhk 发表于 2013-9-20 09:49 | 显示全部楼层
问题应该有眉目了吧   楼主   我感觉问题的关键应该就是分频器这一块的问题   
拿起书本 发表于 2013-9-26 17:27 | 显示全部楼层
我用的一个改了频率后要update一下,库里有个专门的函数用来更新当前时钟.STM8不知道需不需要
trumpxp 发表于 2013-9-26 20:52 | 显示全部楼层
不懂这一块的知识点   帮楼主顶一个了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

506

主题

2446

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部