- 打卡等级:常住居民I
- 打卡总天数:74
- 最近打卡:2025-06-15 09:35:48
中级会员
- 积分
- 394
|
1.基本情况:MCU STC8051U PDIP40; VCC=5V;
更新后的硬件选项为:
. 系统ISP工作频率: 24.000MHz
. 内部IRC振荡器的频率: 24.000MHz
. 掉电唤醒定时器的频率: 35.725KHz
. 振荡器放大增益使能
. 用户EEPROM大小被设置为 1 K
. P3.2和P3.3与下次下载无关
. 上电复位时增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时复位
. 低压检测门槛电压 : 2.00 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 256
. 空闲状态时看门狗定时器停止计数
. 下次下载用户程序时,将用户EEPROM区一并擦除
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. 内部参考电压: 1193 mV (参考范围: 1100~1300mV)
芯片出厂序列号 : F8B4C8FD0299FA
单片机型号: STC8051U-34K64
2. 问题介绍:使用内部IRC时钟和48MHZ时钟都没问题,但无法使用PLL时钟做为系统时钟,usb时钟和IO时钟。计划使用PLL96MHZ三分频后作为SYSCLK,2分频后为USBCLK,不分频到IO和TFPU。
之前使用最小系统时可以运行,但时有时无,有时PLL能启动。不知是硬还是软件问题,目前已在制做新的最小系统进行测试,代码方面参考的例程,请大家帮忙分析一下哪里有问题。P4.7脚有时输出8MHz的时钟。
void clk_delay(void) //100us @ 24MHz
{
unsigned char data i, j;
i = 3;
j = 82;
do
{
while (--j);
} while (--i);
}
HIRCCR = 0x80; //打开IRC高速时钟
while(!(HIRCCR&0x01)); //等待内部IRC时钟稳定
CLKSEL &=0X7F; //选择PLL输出为96MHz
USBCLK &= 0X1f; //关闭PLL倍频器,清除分频器设置为00
USBCLK |= 0X20; //设置PLL输入分频器2分频
USBCLK |= 0X80; //打开PLL倍频器
clk_delay();
CLKDIV = 0X03; //MCLK时钟3分频后送SYSCLK
CLKSEL &= 0XF0; //清除数据
CLKSEL |= 0X04; //PLL输出到系统时钟分频器
IRCBAND &= 0x3f; //选通USB PLL/2 时钟
HSCLKDIV = 0x01; //IO时钟不分频 96 MHz
CLKSEL |= 0X40; //选择PLL为IO时钟, IRC为系统时钟
MCLKOCR = 0X01; //SYSCLK原频输出到P4.7
以上,谢谢。
|
|