请教大家keil 项目中的频率与STC-ISP中用户程序运行时的IRC频率的关系
我们在keil中建立项目后一般要在target中设置频率,然后在用STC-ISP写入程序时也要选定IRC频率,请教一下大家这两个频率有什么不同?如果不一致的话对程序的运行会有什么影响呢?在使用Keil与STC-ISP进行单片机开发时,开发者常常会遇到两个频率设置项:Keil项目中的“Target”频率设置和STC-ISP中设置的IRC频率。这两个频率虽然都与系统时钟有关,但其作用和影响机制并不相同,理解它们之间的关系对于确保程序正确运行至关重要。
一、Keil中的“Target”频率设置
在Keil μVision中,当我们创建一个基于STC单片机的项目时,在Project > Options for Target > Target页面中会设置一个频率值,通常称为“Crystal frequency”或“External Crystal Frequency”。
1. 作用
这个频率值主要用于:
编译时的延时函数计算:Keil中的一些库函数(如nop()、delay()等)或用户自定义的延时函数,其延时时间依赖于系统时钟频率。Keil在编译时会根据此频率值计算指令周期和延时时间。
调试器的时钟配置:如果使用调试器(如ULINK、ST-Link等),调试器会依据该频率配置与目标系统的通信速率。
2. 注意事项
该频率并不实际控制单片机的时钟源,它只是Keil在编译和调试阶段使用的参考值。
如果你使用的是内部RC振荡器(IRC),这个设置值应与实际运行的时钟频率一致,否则延时函数将不准确。
二、STC-ISP中的IRC频率设置
STC单片机支持多种时钟源,包括外部晶振(X’tal)和内部RC振荡器(IRC)。在使用STC-ISP下载程序时,可以在配置界面中选择是否启用IRC,并设置其频率。
1. 作用
决定单片机实际运行的时钟频率。STC单片机的IRC频率可以在1MHz到35MHz之间选择(具体范围取决于型号),该设置会写入芯片的特殊功能寄存器(如CLKDIV、IRCTRIM等),从而决定系统主频。
影响系统定时器、串口通信、PWM等外设的精度。如果IRC频率设置错误,会导致这些外设的时序错误。
2. 配置方式
在STC-ISP中设置IRC频率后,下载程序时会自动将该配置写入Flash中的配置字(Configuration Bytes),在芯片复位或上电时自动加载,从而配置系统时钟。
三、两者的关系与一致性要求
1. 两者应保持一致
为了确保程序中延时函数、定时器中断、串口通信等时间相关功能的准确性,Keil中设置的频率应与STC-ISP中配置的IRC频率一致。
例如:
若在STC-ISP中设置IRC频率为12MHz,则Keil中也应将“Crystal frequency”设为12MHz;
若设置为24MHz,则Keil中也应设为24MHz。
2. 不一致时的影响
如果两者不一致,可能导致以下问题:
| 问题类型 | 描述 |
|----------|------|
| 延时函数不准确 | Keil根据错误频率计算延时,实际运行时间与预期不符。 |
| 定时器中断周期错误 | 系统时钟频率不同,定时器的计数周期将发生偏差。 |
| 串口通信波特率错误 | 波特率计算依赖系统时钟,频率不一致将导致通信失败。 |
| PWM输出频率/占空比偏差 | PWM模块依赖系统时钟,输出波形将不准确。 |
四、如何正确配置
1. 确定使用时钟源
首先确定你使用的是外部晶振还是内部RC振荡器(IRC)。STC单片机一般都支持两者,但默认可能为IRC。
2. 在STC-ISP中配置IRC频率
打开STC-ISP;
选择正确的芯片型号;
在“时钟设置”或“系统时钟”选项中选择“IRC”并设置频率;
确保勾选“使用内部IRC”;
下载程序至单片机。
3. 在Keil中设置相同频率
打开Keil项目;
进入“Options for Target”;
在“Target”标签页下,将“Crystal frequency”设置为与STC-ISP中相同的数值;
若使用外部晶振,则应填写外部晶振的实际频率。
五、示例说明
假设你使用STC15W4K32S4单片机,希望使用IRC频率为22.1184MHz以匹配标准串口波特率(如9600、115200等):
在STC-ISP中:
设置系统时钟为IRC;
设置IRC频率为22.1184MHz;
下载程序。
在Keil中:
将“Crystal frequency”设为22.1184MHz;
编译生成的延时函数、定时器中断等将基于该频率进行计算。
六、总结
| 项目 | Keil设置 | STC-ISP设置 |
|------|----------|-------------|
| 设置位置 | Target页面中的Crystal frequency | 系统时钟配置中的IRC频率 |
| 作用 | 编译期参考频率,用于延时、调试 | 实际运行时钟源,决定芯片主频 |
| 是否影响运行 | 否(仅影响编译) | 是(决定系统运行频率) |
| 一致性要求 | 必须一致,否则导致时序错误 |
七、常见问题FAQ
Q1:如果我使用外部晶振,是否还需要在Keil中设置相同频率?
是的。虽然Keil不会控制硬件时钟源,但为了正确计算延时、定时器等时间相关函数,建议设置为实际晶振频率。
Q2:STC-ISP设置的IRC频率写入哪里?
写入芯片Flash中的配置字节(Configuration Bytes),在系统复位时自动加载。
Q3:如果忘记设置STC-ISP的IRC频率怎么办?
默认可能为12MHz或11.0592MHz,具体取决于芯片型号和出厂设置。建议查阅数据手册确认默认值。
如能正确配置Keil与STC-ISP中的频率设置,将有助于确保程序运行的稳定性与精度,尤其在涉及时间敏感操作(如通信、定时、PWM等)时尤为重要。
[本文内容由国芯人工智能辅助生成,仅供参考] keil里面的频率主要用于软件仿真使用和实际频率无关。 ISP烧录时才能决定频率,或系统运行时自己修改频率,和 KEIL 那部分无关 target中的频率只影响软件仿真,但软件仿真只支持传统8051,还是12T的不是1T的,新增的外设也不支持,现在用的都是硬件仿真,不需要设置target中的频率
初始化频率是ISP软件中设置的,用户程序中也可以修改频率(仿真时不支持)
页:
[1]