您的位置:首页 > 其它

STM8固件库+IAR 之--CLK

2011-03-31 14:08 253 查看
STM8的时钟控制十分强大,用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。本程序是更改内部2M或者外部8M晶振,让led2闪灯,通过不同初始化,能观察出led的快慢,上代码:

#include "stm8s.h"

/*========内部高速时钟初始化========*/
void init_hsiclk(void)
{
CLK_DeInit(); //寄存器复位
CLK_HSICmd(ENABLE); //内部高速时钟使能
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); //内部8分频 2M
}

/*==========外部高速时钟初始化=======*/
void init_hseclk(void)
{
CLK_HSECmd(ENABLE); //外部时钟开 8M
CLK_ClockSwitchCmd(ENABLE); //切换使能
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO ,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE); //切换配置
CLK_ClockSecuritySystemEnable(); //开启时钟安全系统 当外部晶振损坏,自动转为内部2M时钟,牛X
}

/*========GPIO初始化========*/
void init_gpio(void)
{
GPIO_DeInit(GPIOD); //PD口复位
GPIO_Init(GPIOD , GPIO_PIN_2 , GPIO_MODE_OUT_PP_LOW_SLOW); // LED2初始化 推挽输出
}

/*========延时函数===========*/
void delay(u16 n)
{
u16 i=0;
while(n--)
{
for(i=0;i<330;i++);
}
}

/*========主函数===========*/
void main(void)
{
init_hsiclk(); //更换成init_hseclk();观察led闪灯速度
init_gpio();
while (1)
{
GPIO_WriteReverse(GPIOD,GPIO_PIN_2);
delay(1000);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: