最近突然想研究研究STM32,看到几乎所有的教程上都是用C编单片机程序的,让一直研究C艹的我编写起来很不适应,今天研究了一中午,成功地将一个 单个LED的驱动封装成了一个Arduino风格的类库,使用起来非常方便,方法如下。
在开始之前,建议按照STM32模板建立方法此文中描述的方法将工程需要的基本库放到一个文件夹中,这样在添加.c和.h文件的时候会更加容易。
1. 为了将驱动封装到一个类中,首先定义驱动代码的头文件 led.h。
#ifndef LED_H
#define LED_H
#include "stm32f10x_gpio.h"
class Led
{
enum State{HIGH, LOW};
public:
Led(GPIO_TypeDef* GPIOX, uint16_t GPIO_Pin_x, State s = HIGH);
virtual ~Led();
void Open();
void Close();
inline bool IsOpen() const {return isOpen;}
private:
GPIO_TypeDef* GPIOX;
uint16_t GPIO_Pin_x;
bool isOpen;
};
#endif
2. 接下来定义这个类的实现,新建一个.cpp文件,注意不能是.c否则无法通过编译。
#include "led.h"
Led::Led(GPIO_TypeDef* GPIOX, uint16_t GPIO_Pin_x, State s)
{
isOpen =false;
this->GPIOX = GPIOX;
this->GPIO_Pin_x = GPIO_Pin_x;
// 设置端口时钟
if (GPIOX == GPIOA)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
}
else if (GPIOX == GPIOB)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
}
else if (GPIOX == GPIOC)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}
else if (GPIOX == GPIOD)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
}
else if (GPIOX == GPIOE)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
}
else if (GPIOX == GPIOF)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
}
else if (GPIOX == GPIOG)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
}
GPIO_InitTypeDef init;
// 配置IO口
init.GPIO_Pin = GPIO_Pin_x;
init.GPIO_Mode = GPIO_Mode_Out_PP;
init.GPIO_Speed = GPIO_Speed_50MHz;
// 初始化IO口
GPIO_Init(GPIOX, &init);
if (s == HIGH)
{
GPIO_SetBits(GPIOX, GPIO_Pin_x);
}
else
{
GPIO_ResetBits(GPIOX, GPIO_Pin_x);
}
}
Led::~Led()
{
}
void Led::Open()
{
GPIO_ResetBits(GPIOX, GPIO_Pin_x);
isOpen = true;
}
void Led::Close()
{
GPIO_SetBits(GPIOX, GPIO_Pin_x);
isOpen = false;
}
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main()
{
Delayer mydelay;
Led myLed(GPIOA, GPIO_Pin_2);
while (1)
{
myLed.Open();
myDelay.Delay(500);
myLed.Close();
myDelay.Delay(500);
}return 0; }
如果想实现控制多个GPIO口,可以实例化多个对象,或者重载类的构造函数。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/qq_19672579/article/details/47187383