#define LED PC_ODR_ODR1//PC1->LED
#define SW PD_IDR_IDR3//按键
/****************************************************
PC1推挽输出,PD3上拉输入并开按键中断
****************************************************/
void GPIO_INIT()
{
PC_DDR_DDR1=1;
PC_CR1_C11=1;
PD_CR1_C13=1;//上拉输入
PD_CR2_C23=1;//开输入中断
}
/****************************************************
外部中断初始化
****************************************************/
void EXTI_INIT()
{
EXTI_CR1=0X80;//PD口下降沿触发中断
}
/***********************************************
系统时钟分频系数采用默认值8分频
上电后,系统以内部时钟8分频为时钟源,LED闪烁得比较慢
当按下按键PD3过后,时钟进行切换,使用了外部晶振8分频作为系统时钟源
因而LED闪烁速度明显加快,因为使用外部时钟后是24MHz不分频的时钟,是2M的12倍
在LED闪烁上可以看出,本程序内部2M时钟的情况下闪烁频率0.5Hz左右,使用外部时钟后是6Hz左右,验证了12倍
再按下复位键后速度还原
***********************************************/
#pragma vector=0x08//GPIOD中断向量号是6,+2即可
__interrupt void EXTI_PD3()
{
while(!SW);//判断是否按下
CLK_ECKR_HSEEN=1;//开外部
while(!CLK_ECKR_HSERDY);//等待外部时钟准备好
CLK_SWCR_SWEN=1;//使能时钟切换
CLK_SWR=0XB4;//HSE为主时钟源
while(!CLK_SWCR_SWIF);//等待切换成功,如果Option Bytes中的Flash_Wait_States不设置为1,此行不能通过
CLK_SWCR_SWEN=0;// 清除切换标志
}
void delay(unsigned int time)//延时程序
{
unsigned int x,y;
for(x=0;x
for(y=0;y<500;y++);
}
void main()
{
asm("sim");//关闭全局中断
GPIO_INIT();
EXTI_INIT();
asm("rim");//打开全局中断
while(1)
{
LED=0;
delay(500);
LED=1;
delay(500);
}
}
这个程序中需要用STLINK,stm8s的Option Bytes
下面截图说明怎么做
1:在IAR for stm8环境里右键工程选Options
上一篇:STM8S208R8的第五个程序---时钟CCO输出验证
下一篇:STM8S208R8的第三个程序---外部中断
推荐阅读最新更新时间:2024-03-16 15:15
设计资源 培训 开发板 精华推荐
- MPS EMI 知识充电节盛大开启!赚积分赢好礼!
- 免费下载|是德科技邀你体验各种测试软件
- 免费领取|射频年度大会EDI CON VIP全场通票(注册到场100%中奖!)
- 选修有礼:Keysisht“测试测量”系列12节新课程,炎夏预约开启~
- 【贝能好礼相送】我们拼啦 寻觅Infineon 调光恒流LED驱动器 ICL5102写真
- 有奖直播:ADI在中国能源互联网应用中的技术及产品 1月8日上午10:00-11:30 准时开启!
- Microchip直播:单片机编程不再难, 利用MPLAB®代码配置器(MCC)实现快速开发
- 身临其境不足以窥全貌,《TI嵌入式产品研讨会》比现场更有料的小小书
- 开启Altera SoC体验之旅,玩转Altera Cyclone V系列SoC
- 乐享惬意春天,TI A8开源硬件平台体验季!