从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
是直接操作的,结果实际测得周期是205.6mS 和程序里配置的相差很大,
====main.c==============
//时钟初始化
//=================================
void CLK_init(void)
{
CLK_ECKR=0x00; //关外部时钟
CLK_ICKR=0x01; //内部时钟开启
CLK_CMSR=0xe1; //HSI为主时钟源
CLK_CKDIVR=0x18; //16MHZ/8分频=2MHZ
// CLK_PCKENR1=0XFF;
// CLK_PCKENR2=0XFF;
// CLK_SWR=0xe1;
}
void TIM4_init(void)
{
TIM2_EGR =0X01; //允许更新事件
TIM2_PSCR = 0X01; //2MHZ/2=1MHZ 1/1MHZ=1uS
TIM2_ARRH = 0X00;
TIM2_ARRL = 0X32; //0X32=50 50*1uS=50uS
TIM2_CNTRH = 0X00;
TIM2_CNTRL = 0X00; //初值
TIM2_IER |= 0X01;
TIM2_CR1 |= 0X81; //使能
/*
TIM4_CNTR =0; //计数器值
TIM4_PSCR =0x07; //预分频器 2MHZ/128分频 2MHZ/2^7=0.015625MHZ
TIM4_ARR =0XFA; //自动重装寄存器 0XFA=250 T=1/0.015625MHZ=64uS 250*64uS=1.6mS
TIM4_EGR =0X01; //计数器重新初始化并产生寄存器更新
TIM4_IER =0X01; //使能中断
TIM4_CR1 =0X81; //使能定时器
*/
// TIM4_CR1 |= 0X04;
// TIM4_IER |= 0X01;
// TIM4_PSCR = 0X06;
// TIM4_ARR = 0XFA;
// TIM4_CNTR = 0XFA;
// TIM4_CR1 |= 0X01;
// TIM4_EGR |= 0X01;
}
//mian file
//====================================
main()
{
_asm("rim"); //开启中断
CLK_init(); //时钟初始化
GPIO_init(); //IO口初始化
TIM4_init(); //TIM4初始化
while (1);
}
//中断服务程序
@far @interrupt void TIM2(void) // TIM2_UPD_IRQHandler(void)
{
static unsigned int i=0;
i++;
if(i>=2000)
{
i=0;
PB_ODR^=0XFF;
}
TIM2_SR1 =0x00;//=0x0e;//清楚中断标志位
return;
}
噢,没有错,是我示波器测错了,我测得是一个波形的周期,而实际应该是高电平的时间是100mS,这样就刚好与我程序100mS翻转对上了