一键双雕外部时钟如何修改【已解决】
2025-05-13 11:36:15 世界杯冠军最多
查看: 681|回复: 13
一键双雕外部时钟如何修改【已解决】
[复制链接]
firef***
firef***
当前离线
积分236
打卡等级:初来乍到
打卡总天数:3
最近打卡:2025-03-30 20:18:10
11
主题45
回帖236
积分
中级会员
中级会员, 积分 236, 距离下一级还需 264 积分
中级会员, 积分 236, 距离下一级还需 264 积分
积分236
电梯直达
楼主
发表于 2024-6-9 15:53:42
|
只看该作者
|只看大图
|倒序浏览
|阅读模式
本帖最后由 firefly2k 于 2024-6-12 09:02 编辑
使用的是一键双雕程序。现要测量外部频率信号,所以需要精度很高的外部晶振。我晶振选用的是22.1184M。主程序中增加下面代码,选择外部晶振。但实际外部晶振并没用,而一直用的是IRC
P_SW1 = 0x00;
P_SW2 = 0x80; //扩展寄存器(XFR)访问使能
XOSCCR = 0xc0; //启动外部晶振
while (!(XOSCCR & 1)); //等待时钟稳定
CLKDIV = 0x00; //时钟不分频
CKSEL = 1; //选择外部晶振(CKSEL = 1也试过了)
我测量晶振的两端是有22M的振荡信号的,也就是晶振起振了
程序运行中我读取CKSEL,发现读到的低2位是00(IRC),并不是设置的01(XOSC)。也就是不管咋改只能用IRC工作,而在程序中我并未找到哪里有修改CKSEL的地方,请问是什么原因?
问题已解决,上面设置没问题,程序中也没有地方修改CKSEL。
而是printf时是按字%x打印的,会输出为0x100(以为低字节为00);改为按字节%bx打印就没问题了,输出0x1
本主题由 管理团队 于 2024-6-9 15:58 移动
收藏0
淘帖0
支持0
反对0
0
回复
使用道具
举报
送花
神***
神***
当前离线
积分15701
打卡等级:常住居民I
打卡总天数:66
最近打卡:2025-05-13 11:26:56
719
主题1万
回帖1万
积分
管理员
积分15701
沙发
发表于 2024-6-9 16:01:17
|
只看该作者
截图202406091600396970.jpg (213.05 KB, 下载次数: 0)
下载附件
2024-6-9 16:00 上传
截图202406091601133042.jpg (105.66 KB, 下载次数: 1)
下载附件
2024-6-9 16:01 上传
回复
支持
反对
使用道具
举报
送花
so***
so***
当前离线
积分4980
打卡等级:以坛为家II
打卡总天数:434
最近打卡:2025-05-13 06:20:21
已绑定手机19
主题3198
回帖4980
积分
论坛元老
论坛元老, 积分 4980, 距离下一级还需 9995019 积分
论坛元老, 积分 4980, 距离下一级还需 9995019 积分
积分4980
板凳
发表于 2024-6-9 16:17:07
来自手机
|
只看该作者
是clksel不是CKSEL吧
回复
支持
反对
使用道具
举报
送花
firef***
firef***
当前离线
积分236
打卡等级:初来乍到
打卡总天数:3
最近打卡:2025-03-30 20:18:10
11
主题45
回帖236
积分
中级会员
中级会员, 积分 236, 距离下一级还需 264 积分
中级会员, 积分 236, 距离下一级还需 264 积分
积分236
地板
发表于 2024-6-9 16:20:05
|
只看该作者
本帖最后由 firefly2k 于 2024-6-9 16:24 编辑
神*** 发表于 2024-6-9 16:01
我就是从官方例程复制下来的,但是如上我写的不行呀。
注:官方之前例程的头文件没有CLKSEL的定义,后来看文件里定义的是CKSEL(这个名称不影响结果)
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
#define MCK_IRC24M 0x00
#define MCK_XOSC 0x01
#define MCK_IRC32K 0x03
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02)
#define ENIRC24M 0x80
#define IRC24MST 0x01
回复
支持
反对
使用道具
举报
送花
firef***
firef***
当前离线
积分236
打卡等级:初来乍到
打卡总天数:3
最近打卡:2025-03-30 20:18:10
11
主题45
回帖236
积分
中级会员
中级会员, 积分 236, 距离下一级还需 264 积分
中级会员, 积分 236, 距离下一级还需 264 积分
积分236
5#
发表于 2024-6-9 16:22:38
|
只看该作者
本帖最后由 firefly2k 于 2024-6-9 16:26 编辑
so*** 发表于 2024-6-9 16:17
是clksel不是CKSEL吧
请见您楼下的说明,例程头文件没有定义CLKSEL,只定义了CKSEL。而且真像您说的那种问题,编译都不会通过的
回复
支持
反对
使用道具
举报
送花
so***
so***
当前离线
积分4980
打卡等级:以坛为家II
打卡总天数:434
最近打卡:2025-05-13 06:20:21
已绑定手机 19
主题3198
回帖4980
积分
论坛元老
论坛元老, 积分 4980, 距离下一级还需 9995019 积分
论坛元老, 积分 4980, 距离下一级还需 9995019 积分
积分4980
6#
发表于 2024-6-9 17:58:13
来自手机
|
只看该作者
firefly2k 发表于 2024-6-9 16:22
请见您楼下的说明,例程头文件没有定义CLKSEL,只定义了CKSEL。而且真像您说的那种问题,编译都不会通过的 ...
范例中这个问题我也碰到过,就只有这个范例是CKSEL,且头文件是独立于keil目录下,我查看了其他范例全都是CLKSEL。我也为了对一箭双雕官方范例改成外部晶振发现这个问题的。
回复
支持
反对
使用道具
举报
送花
firef***
firef***
当前离线
积分236
打卡等级:初来乍到
打卡总天数:3
最近打卡:2025-03-30 20:18:10
11
主题45
回帖236
积分
中级会员
中级会员, 积分 236, 距离下一级还需 264 积分
中级会员, 积分 236, 距离下一级还需 264 积分
积分236
7#
发表于 2024-6-9 19:19:37
|
只看该作者
so*** 发表于 2024-6-9 17:58
范例中这个问题我也碰到过,就只有这个范例是CKSEL,且头文件是独立于keil目录下,我查看了其他范例全都 ...
您也改外部晶振了?请问怎么改的?
回复
支持
反对
使用道具
举报
送花
乘风***
乘风***
当前在线
积分6883
打卡等级:以坛为家II
打卡总天数:419
最近打卡:2025-05-12 14:04:12
已绑定手机39
主题2015
回帖6883
积分
论坛元老
论坛元老, 积分 6883, 距离下一级还需 9993116 积分
论坛元老, 积分 6883, 距离下一级还需 9993116 积分
积分6883
8#
发表于 2024-6-11 11:26:41
|
只看该作者
你用什么方式读取CKSEL内容的?
我用串口打印CKSEL,切换主频后是可以打印出CKSEL值产生变化的。
此外可以用主频分频输出方式进行验证,例如晶振22.1184M,烧录是IRC频率设置11.0592M,用示波器测量输出脚信号就可以判断主频是22.1184M还是11.0592M。
截图202406111106049637.jpg (129.12 KB, 下载次数: 0)
下载附件
2024-6-11 11:06 上传
回复
支持
反对
使用道具
举报
送花
firef***
firef***
当前离线
积分236
打卡等级:初来乍到
打卡总天数:3
最近打卡:2025-03-30 20:18:10
11
主题45
回帖236
积分
中级会员
中级会员, 积分 236, 距离下一级还需 264 积分
中级会员, 积分 236, 距离下一级还需 264 积分
积分236
9#
发表于 2024-6-11 13:17:23
|
只看该作者
乘风*** 发表于 2024-6-11 11:26
你用什么方式读取CKSEL内容的?
我用串口打印CKSEL,切换主频后是可以打印出CKSEL值产生变化的。
此外可以 ...
我是用串口打印的CKSEL,跟您的方法一样。这个不会有问题的
因为我用的是一箭双雕的程序,我猜您用的应该不是这个程序。这个的IRC的频率会自动调整和设置。所以我不知道IRC自动调整时,哪里会修改CKSEL(我搜索不到哪里有修改)。甚至我把自动调整主频的部分屏蔽掉都不行,还是会修改CKSEL
回复
支持
反对
使用道具
举报
送花
xxkj***
xxkj***
当前离线
积分5396
打卡等级:以坛为家II
打卡总天数:532
最近打卡:2025-05-13 07:54:32
109
主题1944
回帖5396
积分
论坛元老
论坛元老, 积分 5396, 距离下一级还需 9994603 积分
论坛元老, 积分 5396, 距离下一级还需 9994603 积分
积分5396
10#
发表于 2024-6-11 14:54:40
|
只看该作者
改外部晶振,我用的那段代码跟你差不多,只是我没有分频( CLKDIV = 0x00;)。
我没有读取CKSEL,但感觉外部晶振能正常启动,找个时间也读取一下CKSEL看看。
回复
支持
反对
使用道具
举报
送花