首页 >> 大全

使用定时器编写led闪烁

2023-10-06 大全 30 作者:考证青年

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

使用定时器编写led闪烁 # # 配置RCC(系统时钟)# #b配置GPIO口# #c配置时钟# # d导出keil5文件 总结

准备工作

使用软件:keil5、

定时器:TIM2

硬件:野火f407开发板

硬件IO:PF8(喜欢蓝色就选择了蓝灯)

一、实现功能

主要使用TIM2定时500ms,然后在定时器中断里写GPIO电平翻转从而达到闪烁的效果(函数)

蓝灯每隔1s亮

本章博客将主要讲述上的定时器配置

二、使用步骤 1.生成初始化代码 # # 配置RCC(系统时钟)

先进去RCC配置界面,然后在时钟源那里选择晶振陶瓷谐振器。

HCLK那个地方的值可以自己填写,我填32MHZ,则挂载TIM2的总线APB1的时钟在上面时钟树上显示32MHZ,这个频率将与定时器的配置有关。

# #b配置GPIO口

定时器闪光灯程序__定时闪烁电路梯形图

在准备工作里知道使用的是PF8

当芯片引脚比较多查找引脚不方便时,可以使用右下角的搜索窗口快速定位到引脚

然后在PF8引脚上右键单击。选择,将引脚设置为输出

先点击GPIO进入GPIO配置页面(多种方法,点击右侧列表的GPIO也能进)

观察准备工作中贴出啦的原理图,可以看到只有当PF8输出低电平时,二极管正向导通,灯亮。故将GPIO的初始状态设置为高,则初始状态下灯是灭的。

GPIO模式设置为推挽输出。推挽输出指不管是低电平还是高电平都有很强的驱动能力,而开漏输出无法输出真正的高电平,需借助上下拉电阻。总的来说,一般情况下,都是推挽输出。而在需要使用开漏输出的线与功能时,才会把GPIO配置成开漏输出,比如I2C在从应答主的场景中用到了线与特性。在这种情况下,GPIO配置成开漏输出。(如果这篇文章一不小心被你看到了,我提前谢谢你能帮我补充开漏输出的场所,新人小白感激不尽!)

上拉即初始状态输出为高,下拉即初始位置为低,既不上拉也不下拉,此时输出状态不确定。

至于输出速度,我平常接触到的项目没什么要求就设置为low

# #c配置时钟

进入时钟配置页面。将时钟来源设置为内部时钟

进入参数设置界面。我要设置一个500ms的定时器。有计算公式

t = (+1)( +1)/CLK

其中是预分频器的值; 是定时器周期;CLK是定时器时钟频率。公式里的加一是因为、 都是从0开始。值得注意的是,、 都是16位,设值范围是0~65535, 若超过65535会出问题。

举个栗子。我设置500m可以设置(31999+1)(499+1)/32MHZ=0.5s

当然也可以设置为(3999+1)(3999+1)/32MHZ

定时器闪光灯程序__定时闪烁电路梯形图

组合的方法太多了!

# # d导出keil5文件

设置文件名称、位置(全英文,谢谢!!)、我使用的是keil5,选择导出keil5

按图片中①②勾选,然后点击③处生成代码

大功告成

2.keil5中操作

/* USER CODE BEGIN 2 /与 / USER CODE END 2 */间写T(&htim2);跳转进入该函数可以看到,语句的作用是开启定时器中断使能

第二个需要干的就是写回调函数,这个回调函数名字是已经定义好了的,用户只需写函数内容。

我这里写的是先判断是不是定时器2,这个判断主要是针对多个定时器中断的情况下判断,我这里只有定时器2,可以不要if判断。判断完成后翻转GPIO的电平达到灯闪烁的效果。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2){HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_8);}}

综上:主函数里面用户只需做两个事。一是打开使能,二是写回调函数

总结

哈哈哈,第一个发表的博文,,记录自己的生活。虽然并不是一篇开始写的博文,草稿箱里还有几篇没写完的博文,时间长了就懒得再去写了。我爱小狼狗,虽然自己是条小懒。

学了32固件库半途而废的我真心感觉真香。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了