900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > STM32G431RBT6-----Timer

STM32G431RBT6-----Timer

时间:2023-12-04 07:36:10

相关推荐

STM32G431RBT6-----Timer

目录

一、定时器原理

二、打开工程,添加必要代码

三、实现功能

13届省赛

前面在讲LED模块的时候可以用HAL_DLAY()这个函数实现,但是当时间控制得多了,用这个函数就不方便了,因此我们用定时器来实现计时的功能

一、定时器原理

1.定时器资源有许多,但是常用的就有几个

2.定时器只有内部计时功能,没有输出功能,因此不用配置GPIO引脚

3.Timer原理

4.CubeMX配置

Prescaler:预分频;相当于第一次分频,降到80*10^3Counter Period:计数周期;相当于第二次分频,讲到1000通过这两次分频,就实现了最终的分频效果,每1毫秒中断一次频率就降下来了。这样0.1s就要中断100次,5s就中断5000次。

5.定时器的本质就是中断,因此要配置中断的优先级内容:

二、打开工程,添加必要代码

1.tim.c就是配置完CubeMX之后自动生成的文件

2.添加必要的代码

此函数定义的位置:

发生定时器中断之后就会跳到回调函数,实际上该函数便是发生时钟中断后处理的函数(中断处理子程序):

3.子函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim->Instance==TIM2)//是timer2,且过了1ms{if(led1_flag==1)//led1要用定时器了{led1_count++;}if(led2_flag==1)//led2要用定时器了{led2_count++;}}}void led_proc(void)//led1的控制函数{if(led1_flag==1){Control_LED(LED1,ON);if(led1_count>=5000)//计数5000,即亮了5s{led1_flag = 0;led1_count = 0;Control_LED(LED1,OFF);}}}void bulingbuling(void)//led2的闪烁函数{if(led2_flag==1){if(led2_count>=100)//0.1s{led2_count = 0;HAL_GPIO_TogglePin(GPIOC,LED2);//翻转HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);}}else{Control_LED(LED2,OFF);}}void key_proc(void){char value = Key_Scan();switch(value){case 3:led1_flag = (led1_flag+1)%2;break;case 4:led2_flag = (led2_flag+1)%2;break;}}

4.主函数

变量声明:

警告:一开始led1_count函数类型是char类型的,在后面计数判断的时候出现了警告。并且LED1灯不能通过按键控制亮灭。

三、实现功能

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
stm32f103rbt6_2

stm32f103rbt6_2

2023-05-23

stm32f103rbt6_4

stm32f103rbt6_4

2024-07-03

stm32f103rbt6_5

stm32f103rbt6_5

2022-04-03

STM32F103RBT6型号说明

STM32F103RBT6型号说明

2020-12-15