STM8S系列学习第一周目:4.STM8S STVD 定时器Timer

STM8S系列定时器TIME 库函数使用,咱们继续点灯(渝兴未到工作室) 很简单小白也可以跟着学。

今天给大家介绍关于STM8S系列的定时器基础使用,今天咱们继续点灯(←_←)。

上一章节的GPIO我这里还是给个传送门吧:

GPIO的控制输出

https://blog.csdn.net/weixin_42714281/article/details/105705144


首先我还是把项目给配置一下吧!! 大家可以参考我上面👆的传送门。或者看我前两期的博客(配置教程)。 我这用的是STM8S105k4T6的单片机作为例子开发,因为便宜.。。。。。
懒的话我这里就直接个传送门:

链接:https://pan.baidu.com/s/1_UCfQ4BqZHmq8HIMbP5SaA
提取码:nx5y

复制这段内容后打开百度网盘手机App,操作更方便哦

下面这张图片就工程环境配置完成后的样子👇。如果导入我的工程报错请务必查看一下我GPIO那个博客,以后在实际开发中也会遇到这种错误!!
在这里插入图片描述

然后配置完成后我们就开始来写一个定时器计时点亮一个灯的教程,比较简单

首先我们还是来配置时钟,在Main.c里面 插入以下代码。具体意思大家可以参考ST官方的api数据手册 我也有给了相应的文档注释

小青蛙工具:链接:https://pan.baidu.com/s/1R_j0ZXGBr_aKoADPQjJnrA
提取码:6fd8
在这里插入图片描述

//-------------------- 初始化系统时钟---------------------------
void DriveM_InitSystemclock(void)
{
	CLK_DeInit();                                   // 重置时钟恢复默认值    
	CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  // 配置内部高速时钟HSI分频  1分频
	CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);        // 配置系统时钟分频
	CLK_HSICmd(ENABLE);								// 打开内部高速时钟 HSI
}

然后接下来我们开始配置就是输出口,就是确定哪个引脚拿来点灯 今天我们用PD7作为输出口
在这里插入图片描述

在这里插入图片描述

//-------------------- 配置端口 ---------------------------------
void DriveM_InitGpio(void)
{
	GPIO_DeInit(GPIOD);   									   //重置端口GPIOD (包括PD0~7)
	GPIO_Init(GPIOD, GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_SLOW); //配置端口GPIOD PD7,低速推挽输出
}
上面的代码在我给的GPIO 的博客里面应该是一样的,下面我们开始配置Timer定时器

大家可以通过查看自己使用的单片机数据手册上面查看到的资源来确定 timer .

在这里插入图片描述
这里设置分频,我们这里timer设置的16分频
在这里插入图片描述
在这里插入图片描述

//-------------------- TIMER 2端口 ---------------------------------
void DriveM_InitTimer(void)
{
	//enable timer2 and iic clk  
	CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, ENABLE);  //使能Timer2 打开定时器
	/*timer2 init*/
	TIM2_DeInit();											  //Timer2 恢复默认值
	/*timer2 base init 1Mhz	->	interrupt 1ms	*/
	TIM2_TimeBaseInit(TIM2_PRESCALER_16, 1000);				  //Timer2 初始化设置16分频 16M/16=1MhZ, 后面那个值是定时计数值 1000 ~= 1ms
	//enable IT
	TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);					  //这是中断更新设置,就是计时完成后在中断处理计时(一般项目用法)						
	//enable timer2
	TIM2_Cmd(ENABLE);										  //打开Time定时器。。。。。 开始工作
}


以上就是基础的系统时钟,GPIO输出和定时器设置, 是不是比较简单啊!!!

我们继续 接下来就是要完成我们的灯的闪烁好现在 我们把这些配置函数导入main 函数里面,让程序一运行就初始化
这里一定要注意**要打开全局中断不然中断没法使用**
要加入 _asm(“rim”); 这句代码
在这里插入图片描述

就像这样 然后定时器就开始计时咯!!!我们就需要等待它计时到然后处理就行了
因为我们设置的中断更新然后 为了方便我就再中断里面处理了这种处理方式真实开发不推荐
在这里插入图片描述
上面的就 定时器计时到位的中断处理的位置!! 再stm8s_it.c里面的(中断函数处理都在这里的) INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
然后
在这里插入图片描述
下面就是定时器处理灯的状态!! 实现一亮一灭的效果

 INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
 {
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
	static uint16_t tiemr2_cnt =0;      			 //创建一个静态变量用于计数
	//clear update falg
	TIM2_ClearFlag(TIM2_FLAG_UPDATE);	       //清除Time2标志位,计时到了的标志
	//clear interrupt updata flag
	TIM2_ClearITPendingBit(TIM2_IT_UPDATE);  //清除进入中断更新标志
	tiemr2_cnt ++;													 //每次进入中断tiemr2_cnt ++
	if((tiemr2_cnt % 2000) == 0)	           //timer2 1s
	{
		GPIO_WriteReverse(GPIOD, GPIO_PIN_7);  //灯的状态改变
		tiemr2_cnt =0;
	}
 }

然后下面我就上电调试一下
在这里插入图片描述
在这里插入图片描述

运行正常的画就可以看到 灯 2s闪烁一次 这是用的 定时器实现点灯效果

在这里插入图片描述
以上就是简单的实现通过定时器控制的点灯效果(临时用到的开发板)


整体来讲的话还是简单

大家可以加入我们的交流群:764284134

后面我还是会接着弄着走,有什么不懂得大家也可以在论坛上面评论,有需要开发板的也可以联系我!!或者加我们的群


后面我还是把项目放到GitHub上面! ! !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值