论坛» 嵌入式开发» STM32

【转】STM32实战项目-HAL裸机开发01-回调函数流水灯

工程师
2020-12-28 10:03 1楼


大家好!我是天天爱笑的肖小笑

本次给大家带来的是STM32基于HAL库开发,如何用回调函数实现流水灯。

开发所用的芯片为:stm32f103c8t6;话不多说,开始整活儿。

一、先熟悉一下硬件电路

1609143315848930.png

灯亮 - GPIO输出高电平

灯灭 - GPIO输出低电平

二、技术讲解

1.回调函数

一般解释:回调函数就是一个通过函数指针调用的函数。如果你把函数的地址传递给中间函数的形参,中间函数通过函数指针调用其所指向的函数时,我们就说这是回调函数。

通俗解释:函数Fun1调用函数Fun2,同时将函数Fun3作为形参传递给Fun2,此时,Fun1为应用层函数,Fun2为中间层函数,Fun3为回调函数,回调函数是一种说法而已。

伪代码:

Fun1()

{

Fun2(Fun3);

}

意义何在:

① 利于代码结构,将代码分为应用层,中间层,硬件驱动层,彼此独立,方便程序的编辑,阅读,修改与移植;

② 结构化编程时,结构体只需要定义中间函数,减小内存的开销。

为什么不在Fun2里面直接调用Fun3?

伪代码:

Fun1()

{

Fun2()

{

Fun3_1();

Fun3_2();

......

}

}

通过函数指针的好处是,Fun2与Fun3实现隔离,比如Fun3具有多个功能函数,增加或减少时,不需要修改Fun2的代码。

2.代码实现

1609143568597599.jpg


1609143596299825.jpg

<中间函数>

1609143619588274.jpg

<底层驱动函数>

1609143640498081.jpg

<应用层>


三、HAL库函数

1609143677900782.jpg

说明:视频详细讲解各个函数以及应用情况。

四、编程说明

1、STM32cubeMX初始化

1609143715243827.jpg

说明:初始化3个LED灯为推挽输出,默认高电平,亮灯。

2、文件结构如下

1609143736755926.jpg

说明,程序在标准的程序框架基础上设计。

3、运行函数

1609143757634277.jpg


非常感谢大家的支持,我会尽我最大的能力将最好的资源带给大家。一起加油吧!

本贴属于转载,如有侵权请联系删除。

工程师
2020-12-30 22:13 2楼

学习一下

工程师
2021-01-12 23:22 3楼

代码写的非常不错的

助工
2022-01-13 12:12 4楼

硬件家园可以可以


菜鸟
2022-01-13 15:57 5楼

点灯的门槛一下子抬高了

专家
2022-01-20 05:36 6楼

感谢分享

专家
2022-01-20 06:44 7楼

谢谢分享!

专家
2022-01-20 07:03 8楼

谢谢分享

专家
2022-01-20 07:21 9楼

谢谢分享

菜鸟
2022-01-20 07:58 10楼

精髓在LED_t结构体

共23条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]