欢迎光临散文网 会员登陆 & 注册

野火STM32学习笔记(构建库函数模型第五节课)提高程序的可移植性

2023-08-22 11:06 作者:是晃晃叔叔  | 我要投稿

可移植性高的必要性

        举个例子,当我们使用不同的板子时,LED灯的接口可能不一样,这个时候大家如果再使用野火课程的程序就会,出现很多的问题,野火指南者板子的LED灯是PB口,原理图如图所示:

        如果其他的板子是PC口,或者是PD口呢?我们就要修改很多很多东西,比如时钟,端口号,初始化的端口等等,如图所示:

        我们如果一个一个去改这些,很有可能会漏改,如何避免这样的情况呢,我们可以对硬件进行封装。封装的方法也是使用宏定义。

        我们用初始化一个GPIO来举例子,它涉及到端口,是一个绿灯。那我们就设置这样一个宏定义,在main函数的头文件下面写:

#define    LED_G_GPIO_PORT                        GPIOB(LED灯_绿色_GPIO端口)          

        这是关于控制哪一个GPIO口的,下面还需要封装一下可以使GPIO时钟的使能代码,宏定义就这样写:

#define      LED_G_GPIO_CLK_ENABLE               RCC->APB2ENR  |=  ( (1) << 3 )(我们还没有写关于RCC的固件库,因此只能先把寄存器编程的控制时钟的部分拷贝过来) 

         再一个我们就要封装定义的引脚了,这样写:

#define LED_G_GPIO_PIN                    GPIO_Pin_0



这些宏定义设定好以后,GPIO的初始化函数改成这样,可以看到它的可读性和可移植性有明显提高:

上面三个宏定义,即LED_G_GPIO_PORT,LED_G_GPIO_CLK_ENABLE ,LED_G_GPIO_PIN在程序中每遇到它们就会被替换成GPIOB,RCC->APB2ENR  |=  ( (1) << 3 ),GPIO_Pin_0了,最后我们于main函数里再写一个LED灯闪烁函数看看效果。

LED灯闪烁函数

闪烁需要延时函数,我们使用一个软件延时:


写在main函数的宏定义下面就行,接着在初始化函数下面写一个while循环:

可以看到GPIO的置位复位函数里面的GPIOB,GPIO_Pin_0都被替换了,但是效果是一样的,我们程序的可移植性就这样可以提高了,下次我们要使红色灯亮,只需要在宏定义这样添加。


我们就这样提高封装硬件提高了程序的可移植性。

野火STM32学习笔记(构建库函数模型第五节课)提高程序的可移植性的评论 (共 条)

分享到微博请遵守国家法律