STM32F103系列(十):使用固件库点亮LED

1、硬件设计
STM32与LED的连接见图1-1所示,这是一个RGB灯,由红蓝绿3个小灯构成,使用PWM控制时可以混合成256种不同的颜色。
在这里插入图片描述这些LED的阴极都连接到STM32的GPIO引脚,只要我们控制GPIO引脚的电平输出状态,即可控制LED的亮灭。

2、软件设计
为了使工程更加有条理,我们把LED控制相关的代码独立分开存储,方便以后移植。在“工程模板”之上新建bsp_led.c及bsp_led.h文件,其中的bsp即Board Support Packet的缩写(板级支持包),这些文件也可根据个人喜好命名,不属于STM32标准库的内容,是由我们自己根据应用需要编写的。

2.1 编程要点
1)使能GPIO端口时钟;
2)初始化GPIO目标引脚为推挽输出模式;
3)编写简单测试程序,控制GPIO引脚输出高、低电平。

2.2 代码分析
1.LED引脚宏定义
在编写应用程序的过程中,要考虑更改硬件环境的情况,例如LED的控制引脚与当前的不一样,我们希望程序只需要做最小的修改即可在新的环境正常运行。这个时候一般把硬件相关的部分使用宏来封装,若更改了硬件环境,只修改这些硬件相关的宏即可。这些定义一般存储在头文件,即本例子中的bsp_led.h文件中,见代码清单1-1。
代码清单1-1 LED控制引脚相关的宏

    1 // R-红色
    2 #define LED1_GPIO_PORT       GPIOB
    3 #define LED1_GPIO_CLK        RCC_APB2Periph_GPIOB
    4 #define LED1_GPIO_PIN        GPIO_Pin_5
    5 // G-绿色
    6 #define LED2_GPIO_PORT       GPIOB
    7 #define LED2_GPIO_CLK        RCC_APB2Periph_GPIOB
    8 #define LED2_GPIO_PIN        GPIO_Pin_0
    9 // B-蓝色
   10 #define LED3_GPIO_PORT       GPIOB
   11 #define LED3_GPIO_CLK        RCC_APB2Periph_GPIOB
   12 #define LED3_GPIO_PIN        GPIO_Pin_1

以上代码分别把控制LED的GPIO端口、GPIO引脚号以及GPIO端口时钟封装起来了。在实际控制的时候我们就直接用这些宏,以达到应用代码与硬件无关的效果。

其中的GPIO时钟宏RCC_APB2Periph_GPIOB是STM32标准库定义的GPIO端口时钟相关的宏,它的作用与GPIO_Pin_x这类宏类似,用于指示寄存器位,方便库函数使用,下面初始化GPIO时钟的时候可以看到它的用法。

2.控制LED亮灭状态的宏定义
为了方便控制LED,我们把LED常用的亮、灭及状态反转的控制也直接定义成宏,见代码清单1-2。
代码清单1-2 控制LED亮灭的宏

 1 /* 直接操作寄存器的方法控制IO */
 2 #define digital Hi(p,i)         {p->BSRR=i;}     //输出高电平
 3 #define digital Lo(p,i)         {p->BRR=i;}      //输出低电平
 4 #define digital Toggle(p,i)     {p->ODR ^=i;}    //输出反转状态
 5
 6
 7 /* 定义控制IO的宏 */
 8 #define LED1_TOGGLE    digital Tog
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值