历史上的今天
今天是:2025年04月18日(星期五)
2020年04月18日 | STM8S主时钟切换(使用HSE时钟源)
2020-04-18 来源:eefocus
使用的时钟切换方式为手动切换,在中断中进行时钟切换,然后将切换后的主时钟输出到CLK_CCO口
时钟切换流程图(手动切换流程图):

时钟树:

寄存器版:
unsigned char i=255;
PD_DDR_DDR0=1;//配置PD0为输出模式
PD_CR1_C10=1;//配置PD0为推挽模式
PD_CR2_C20=1;//配置PD0输出最大为10Mhz
if(CLK_CMSR==0xE1) //如果HSI为主时钟源(复位值),切换到HSE
{
CLK_SWCR_SWIEN=1;//时钟切换中断使能
CLK_SWR=0xB4;//HSE为主时钟源
asm("rim");//开启全局中断
}
while(CLK_SWCR_SWBSY)//等待忙标志复位
{
i--;
if(i==0) {
CLK_SWCR_SWBSY=0;//如果时钟切换没有成功,清除标志位SWBSY以复位当前的切换操作
break;
}
}
while(CLK_CCOR_CC0BSY);//等待CCO时钟空闲 (0:CCO时钟空闲)
CLK_CCOR_CCOSEL=0x0c;//配置时钟输出源选择Fhse
CLK_CCOR_CCOEN=1;//使能CCO时钟输出
while(1);
}
#pragma vector=CLK_SWITCH_vector
__interrupt void CLK_IRQHandler(void)
{
CLK_SWCR_SWIF=0;//清除中断标志
CLK_SWCR_SWEN=1;//使能时钟切换的执行
}
库函数版:
main.c文件
void main(void)
{
CLK_DeInit();//重置时钟相关寄存器到默认复位值
GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_FAST);//高速(10MHz)推挽高电平输出
enableInterrupts();//使能全局中断
ErrorStatus es;
es = CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL, CLK_SOURCE_HSE, ENABLE, CLK_CURRENTCLOCKSTATE_ENABLE);
//手动切换;新的时钟源:HSE;启动切换中断;保持原时钟源开启
if (es == SUCCESS) //切换是否成功,SUCCESS or ERROR
{
CLK_CCOConfig(CLK_OUTPUT_MASTER);//配置时钟输出脚的时钟源:f(master)
CLK_CCOCmd(ENABLE);//启动时钟输出功能
};
/* Infinite loop */
while (1)
{
}
}
stm8s_it.c文件
INTERRUPT_HANDLER(CLK_IRQHandler, 2)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
ITStatus flags_tatus;
flags_tatus = CLK_GetITStatus(CLK_IT_SWIF);//检测时钟切换中断标志
if (flags_tatus == SET) //如果时钟切换中断标志SWIF是置位状态,SET or RESET
{
CLK_ClearITPendingBit(CLK_IT_SWIF);//清除时钟切换中断标志
CLK_ClockSwitchCmd(ENABLE);//启动时钟切换功能
};
}
结果:
史海拾趣
|
正常情况下,电视监控系统摄像机大多采用SYV75-5视频线缆传送视频信号进机房,由于线路较长,而且电磁干扰无处不在,所以我们很难保证图像不出现干扰。经统计,在终端电电视墙上,图像较容易产生干扰的摄像机其安装部位第一为电梯桥厢,第二为户外 ...… 查看全部问答> |
|
关于USB MassStorage Client Function的几个问题? 在WinCE上实现优盘的功能已经实现了,现在我有几个小问题想请教一下? 1、usbmsfn.dll是MassStorage Client Function对应的驱动文件,这个文件的源代码在哪里,如何编译? 我通过查阅以前的帖子,发现可以通过sysgen_capture usbmsfn 得到对应的s ...… 查看全部问答> |
|
在keilC51里,用了可以位寻址的存储器,可是工程芯片设成89C51时编译可以通过,就是不能实现功能(在电脑上通过串口仿真)。只有把芯片改成89C52才可以实现。 在平凡单片机书上也写了用到内部数据存储器时工程里需要把芯片设成52系列的。 不知道 ...… 查看全部问答> |
|
我最近在用430F169做个东西,其中用到了FLASH的读写,遇到了难题,请热心人帮忙解决. 问题是这样的: 在程序中我需要四个常量,这四个常量通过上位机写入FLASH存储区.在调试时通过上位机改变四个常数的一个或几个,并且我希望在写入一个时不希望 ...… 查看全部问答> |
|
最近我开始学习FPGA,但看了一些教程后,自己很困惑,好像没有在教程中看见不同的芯片之间有什么不同,我以前一直都是学习单片机的,习惯上了处理器外设的这种配置,我知道FPGA的一切都需要自己设计,但不同的FPGA之间都有那些区别啊?我就知道他们 ...… 查看全部问答> |




