工程框图:
环境:STVD + Cosmic
程序:
#include "STM8S207S6.h"
void Delay(unsigned int count)
{
while(count--);
}
void Gpio_Init(void)
{
PD_DDR |= 0x0D;
PD_CR1 |= 0x0D;
PD_CR2 |= 0x00;
}
void Clock_Init(void)
{
CLK_SWCR |= 0x02;//使能切换机制
CLK_ECKR |= 0x01;//外部晶振使能
while(!(CLK_ECKR & 0x02));//等待HSE准备就绪
CLK_SWR = 0xB4;//选择HSE为主时钟
CLK_CSSR |= 0x01;//时钟安全系统使能
}
main()
{
Clock_Init();
Gpio_Init();
while (1)
{
PD_ODR = 0x0D;
Delay(50000);
PD_ODR = 0x00;
Delay(50000);
}
}
我的这块板子的主芯片是STM8S207S6,反正都是STM8S系列的
上述程序,没有Clock_Init()函数程序也可以运行,只不过LED灯闪烁的频率会比现在低。手册上说:启动时,主时钟源默认为HSI的8分频,即HSI/8=2MHZ
程序中Clock_Init()函数的作用是将主时钟源切换为外部晶振(HSE),这里板子上接的外部晶振为8MHZ,所以用外部晶振作为时钟源是LED的闪烁频率会比用HSI/8作为时钟时的频率高。这里时钟切换采用是自动切换,并且使能了时钟安全系统,(当HSE失效时,HSI/8作为备用时钟源),验证的方法是程序运行了,将外部晶振拔掉,会看到LED闪烁的频率有明显的变化