一键双雕外部时钟如何修改【已解决】

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看看。

回复

支持

反对

使用道具

举报

送花