STM32 库函数的学习1——#if #endif的应用

        初始化函数,结构体的定义。一直用,不过还真不知道是个结构体呢,所以对结构体这个用法不熟练呢,近期学习正点原子的视频了解到了。

        h就是头文件函数库,结构就是:

        #ifndef  __LED_H__
        #define __LED_H__//如果没有定义,下面就定义一下,有的话就不进行下面的定义了。


        #endif

        其中LED可以根据需要定义,其他三个英文一起,就是防止多次定义。这个我只在头文件用到了,不过应该也可以在函数里面用到。

        引申有个#if 0   #endif,跟#if 1   #endif,“#if” 后面的0   表示到“#endif”位置 里面所有的函数不会被运行(这里的函数可以代替/* */,注释掉里面函数。);“#if” 后面的1    表示到“#endif”位置里面的函数会被运行(这里的函数就相当于把/* */去掉,恢复正常函数。)。这里我比较喜欢用,毕竟如果我们需要注释掉的函数不运行的时候,直接改成0,那样可以继续编写其他函数,如果需要在用到的话,就改成1就好了。

        如果使用“//”的话就不能收起来,查看的时候中间会隔很多行。

        如果使用“/* */”的话,虽然可以收起来,但是如果后面设计过程,需要用到来测试的话,可能会出现意外,行少的话还知道另一半在那里,但是如果超过屏幕显示,而且很多行的话,也为了以后作为参考不便于删掉,就可能找不到,容易出现错误。

        所以用#if    #endif的话很方便,使用的时候变成1,而且如果是测试函数的话也知道,编写的时候可以弄一些参考函数在里面,以后如果要用的话可以直接知道是那些。

        对于跑马灯的实验设置中的亮灭用到的下面函数,根据外面电路来确定使用哪个函数来点亮灯。

        GPIO_SetBits(GPIOx,GPIO_Pin_x)//这个是输出高电平,如果led灯接到地的话,可以使用这个来电亮。

        GPIO_ResetBits(GPIOx,GPIO_Pin_x)//这个是输出低电平,如果led灯接到电源的话,可以使用这个来电亮。

        这个在运行时候可以设置管脚高低电平,并用万用表来检查输出是0还是3.3v,来确认单片机的外围电路是否正常,之前我遇到过使用这两个函数,测量单片机管脚,结果电压没变化,而且查找电路也没有问题,后来才发现设计电路的时候用到了PB4端口。这就提到了PB3、PB4、PA15、PA13和PA14这几个管脚的问题了,它们默认不是I/O口,我们如果要用到的话,需要重映射一下。这里我查了一下是三种模式:

        ①GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//这种重映射情况就是把PB3、PB4、PA15这三个引脚用作普通GPIO,而把PA13和PA14这两个引脚用作SWD的调试功能。    

        ②GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//这种重映射情况是把这五个引脚全部用作普通GPIO,因此将不能再用JTAG/SWD仿真器进行调试,但可以使用ST-LINK。

        ③GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE);//这种重映射情况下仅仅把PB4这一个引脚作为普通GPIO,JTAG/SWD可以正常使用,但是JTAG没有复位功能。

        我只用到了第二项,毕竟我设计的使用会用到SWD的调试功能的,所以PA13和PA14是重来没作为I/O使用的。

        而且可以使用 GPIO_SetBits(GPIOx,GPIO_Pin_x)跟GPIO_ResetBits(GPIOx,GPIO_Pin_x)来确认是否变成I/O口,能否控制高低电平来确认函数是否正确。

        至于寄存器版本,我觉得了解一下就好,我也不怎么用,所以也就不描叙出来了,而且学起来还真记不太住呢。

        补:基本上都是我结合以前研发时候遇到的一些问题,加上学习到自己了解的。如果出错的话,应该是我后面在学到新知识以后再回来修改吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

esmember

感谢大家喜欢我遇到的问题分享。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值