求助!STC32F自动追频CRE按照按照例程无法开启
#define FOSC 64000000UL#if (FOSC < 30000000UL)
#define WAIT 0x00
#elif (FOSC < 60000000UL)
#define WAIT 0x01
#else
#define WAIT 0x02
#endif
// 自动追频定义
// 定义IRCBAND(IRC频段选择)寄存器设置值
#if (FOSC > 35000000UL)
#define BAND 0x02
#elif (FOSC > 20000000UL)
#define BAND 0x01
#else
#define BAND 0x00
#endif
// 定义CLKDIV寄存器设置值(系统时钟主分频)
#if (FOSC > 15000000UL)
#define DIV 0x01
#elif (FOSC > 12000000UL)
#define DIV 0x02
#elif (FOSC > 8000000UL)
#define DIV 0x03
#elif (FOSC > 6000000UL)
#define DIV 0x04
#else
#define DIV 0x05
#endif
// 定义追频寄存器目标值
#define MCLK (FOSC * DIV)
#if (MCLK < 50000000UL)
#define CNT ((16 * MCLK) / 32768) // 低频
#define CREHF 0x00
#else
#define CNT ((8 * MCLK) / 32768) // 高频
#define CREHF 0x08
#endif
#define XRES (CNT * 5 / 1000)
void Core_Init(void)
{
AUXR |= 0x80; // 定时器时钟1T模式
TMOD &= 0xF0; // 设置定时器模式
TL0 = 0x00; // 设置定时初始值
TH0 = 0x06; // 设置定时初始值
TF0 = 0; // 清除TF0标志
TR0 = 1; // 定时器0开始计时
ET0 = 1; // 使能定时器0中断
EA = 1;
// IO初始化
P0M0 = 0x00;
P0M1 = 0x2f;
P1M0 = 0x28;
P1M1 = 0x3f;
P2M0 = 0xef;
P2M1 = 0x00;
P3M0 = 0x10;
P3M1 = 0xec;
P4M0 = 0x00;
P4M1 = 0xdf;
P5M0 = 0x10;
P5M1 = 0xf3;
Open_ICache();//打开高速缓存
// 允许操作寄存器
P_SW2 = 0x80;
EAXFR = 1; // 使能访问外部XFR
// CKCON = 0x00; // 外部数据总线速度为最快
// WTST = 0x00;// CPU执行程序等待时间设置为0,保证执行速度为最快
// STC32F兼容性屏蔽,WTST由宏定义计算自动调整
// 打开CRE自动追频
X32KCR = 0x80; // 打开外部32K振荡器
while (!(X32KCR & 1))
; // 等待稳定标志位
IRTRIM = 0x80; // 初始化为频段的中间频率
WTST = WAIT;
_nop_();
_nop_();
_nop_();
_nop_();
CLKDIV = DIV; // 设置系统分频系数
IRCBAND = BAND; // 设置IRC频段范围
// 设置追频参数
CRECNTH = CNT >> 8;
CRECNTL = CNT;
CRERES = XRES; // 设置CRE校准误差
CRECR = 0x90 | CREHF;
}
void main(void)
{
Core_Init();
Menu_Init();
Uart_Init();
while (1)
{
if (CRECR & 0x01) // CRE时钟追频校准完成
{
printf("test\r\n");
P20 = ~P20;
}
}
}
这个是所使用的电路,下载程序后会出现无法启动的情况,只有屏蔽掉CRE部分才能正常使用。
开了CRE不正常的时候,偶尔还会出现使用Link1D在460800波特率下卡死在检测MCU的情况。
这个电路在STC8H1K17T上使用正常,可以正常通过if (CRECR & 0x01)追频完成检测 技术晚些上来回复您 我用楼主的代码在追风剑板子上测了可以完成追频。
64MHz是这款芯片的上限频率,可能个别芯片由于制造误差导致这个频率下无法正常运行,建议降低频率试试。 现在推荐用 56MHz
这个是官方的追风剑DEMO例程第一个,修改加入CRE后无法追频完成(体现在LED灯不亮了),使用的也是追风剑板子,能帮忙测试一下这个嘛? 乘风飞扬 发表于 2023-6-21 15:38
我用楼主的代码在追风剑板子上测了可以完成追频。
64MHz是这款芯片的上限频率,可能个别芯片由于制造误差导 ...
能否给个测试的程序文件?我也在我这的追风剑上试一下,看看是不是我代码写的有问题 王昱顺 发表于 2023-6-21 17:22
能否给个测试的程序文件?我也在我这的追风剑上试一下,看看是不是我代码写的有问题 ...
附件例程在追风剑上运行成功,请参考。
乘风飞扬 发表于 2023-6-21 18:28
附件例程在追风剑上运行成功,请参考。
测试追风剑可以正常完成追频,参考移植到我自己的程序里面也成功的完成了追频,十分感谢! 开心,追风剑 能鞍前马后的帮楼主干活了{:4_196:}
网站更新 20230621更新第2次
一,STC-ISP V6.91V 版本 发布
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.91V.zip
Ver6.91V(2023-6-21)
1. 驱动程序安装过程中增加强制搜索驱动程序步骤
2. 调整STC32F12K54系列的最高工作频率 56MHz
3. STC32F12K54系列单片机下载完成后回显WTST设置的值
Ver6.91U (2023-6-19)
1. 调整驱动程序安装菜单项
2. USB驱动安装智能化
Ver6.91T (2023-6-16)
1. 修正串口助手发送字符串时对转义字符处理不正确的问题
2. 增加ADC转换速度计算器工具
3. 修正OLED12864调试接口显示异常的问题
4. 更新STC-USB Link1D仿真/下载器固件 (v1.11)
5. 脱机下载板U8W固件更新为v1.47
(解决使用STC-USB Link1D对STC32F12K54系列进行ISP时高频IRC调整失败的问题)
二,STC32F12K54-56MHz-LQFP48/32 系列 32位8051 中文数据手册 ,2023/6/21 第2次更新
http://www.stcmcudata.com/STC8F-datasheet/STC32F12K54.pdf
====56MHz 主频,三角/反三角函数运算器 + 单精度浮点运算器
====I2S 音频,高速12位ADC, 高级16位PWM
====edata = 8k; xdata = 4k
三,追风剑-STC32F12K54核心功能实验板,程序包, 2023/6/21
http://www.stcmcudata.com/OpenSo ... DIP48-DEMO-CODE.zip
更新记录2023.06.21
1.修改例程默认时钟频率;
2.增加例程"32-自动追频跑马灯";
2023.06.19
1.增加例程"28-老梁示波器-虚拟显示-CDC模式"及使用说明书;
2.增加例程"29-老刘爱捣鼓示波器,使用OLED屏显示或者虚拟OLED接口显示"及使用说明书;
3.增加例程"30-STC32_U8G2_DMA_OLED";
4.增加例程"31-科学计算器使用CDC虚拟液晶屏显示";
5.增加例程"A0-核心板简单测试程序";
6.增加文件"通过USB CDC协议进行STC-ISP调试接口显示使用说明";
7.增加文件"通过USB HID协议进行STC-ISP调试接口显示使用说明";
8.增加文件"追风剑-烧录-不停电下载使用说明"。
页:
[1]