(蓝桥杯)STM32G431RBT6(定时器1)

一、CubeMx配置

(1)基础配置
(2)LED配置

(3)TIM配置

        选用最基础的定时器

(4)注意

        每次把单片机连上电脑之后都要记得打开魔术棒,点击Debug选择合适的型号,就相当于是打开下载的路径

二、知识点讲解(其实没懂)

 2.1

        注意:1ms=1000Hz

        若要产生1000Hz的中断,我们要在reload寄存器里面写值,因为计数器是从reload寄存器里面填的值往0减,减到0之后再从reload这个值再往0减,这样周期性的工作。        

        现在SysTicktimer里面的时钟频率是170兆(170MHz=170 000 000),也就是里面的计数器是按照170兆的频率在递减

        若把170 000 000 / 1000=170 000这个值填到reload里面,则SysTicktimer工作起来产生的中断就是1000Hz

        reload寄存器是24位,所以写入里面的值不能大于(2的24次方-1=16777215)

         这个图就相当于,系统的内核时钟除以1000 得到的就是1000Hz的频率

2.2

        当我们选择SysTick之后,系统就自动的配好了  HAL_Init(); SystemClock_Config();。在 HAL_Init();中自动的把SysTicktimer里面的中断周期配置成了1ms,自动的往reload里面填了相应的值

        真正的系统时钟是在SystemClock_Config();这个里面完成的。所以HAL_Init();里面用的是单片机内部的高速时钟,用其也可以产生1ms的中断

        所以如果我们要自己修改SysTick的中断频率的话,要在SystemClock_Config();这个下面修改

2.3 

HAL_SYSTICK_Config(170000000/10000);
2.4

        每过1ms就会进入到中断SysTick_Handler()里面去,每过1ms就会调用HAL_IncTick ();这个函数会把一个变量的值(uwTick)+1,这个变量会累加。我们可以去获取这个变量的值,然后把当前获取的跟先前获取的相减,就知道过了几个设定的中断时间

         通过HAL_GetTick()这个来获取

三、代码

         首先要定义一下,后面要用这个数据

uint32_t temCnt=0;

  HAL_SYSTICK_Config(170000000/10000);

	  if(HAL_GetTick()-temCnt>1000)
	  {
			HAL_GPIO_TogglePin (LED1_GPIO_Port,LED1_Pin);
		    temCnt=HAL_GetTick();
	  }

        用170000000/10000表示的是10KHz也就相当于0.1ms,下面的>1000,.也就相当于要经历1000次0.1ms,也就相当于0.1s,所以我的LED1灯是以0.1s的频率闪烁

        如果用的是170000000/1000,也就相当于一次中断定时是1ms,下面的>1000就相当于是经历1000次的1ms,也就是定时1s来实现LED1灯的电平翻转

        总的逻辑就是,每过你设定的一个频率(170000000/1000)就要进入中断,然后加一次数,要等到过1000次这个加一,才能进行翻转

总结:

        SysTick就相当于每过1ms(默认状态下)就进入一次中断函数 ,进入一次中断函数就开始+1,不断地累加得到一个值,累加得到的这个值其实也就相当于过了多少ms,然后通过一个函数来获取现在过了多少ms的值,用这个值减去一个我们设定的变量,当这个差值>某一个数之后就去执行它的程序,而这个算式就相当于是定时,定一个时间;SysTick就是计数,看过了多少的时间。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值