用 C++ 的方式写一个通用的 IO 库
新建两个文件 xtp_io.h
和 xtp_io.cpp
,在该两个文件中定义一个 IO class
,然后实现3个类函数:high()
、low()
、toggle()
。
xtp_io.h
#pragma once
#include "xtp_defines.h"
#if defined AT32
#include "at32f413.h"
#endif
namespace XTP {
class IO;
}
class XTP::IO
{
public:
IO();
~IO();
#if defined AT32
static void high(gpio_type* _gpio, uint16_t pins);
static void low(gpio_type* _gpio, uint16_t pins);
static void toggle(gpio_type* _gpio, uint16_t pins);
#endif
};
xtp_io.cpp
#include "xtp_io.h"
/// @brief 输出高电平
/// @param _gpio
/// @param pins
void XTP::IO::high(gpio_type* _gpio, uint16_t pins)
{
#if defined AT32
gpio_bits_write(_gpio, pins, TRUE);
#endif
}
/// @brief 输出低电平
/// @param _gpio
/// @param pins
void XTP::IO::low(gpio_type* _gpio, uint16_t pins)
{
#if defined AT32
gpio_bits_write(_gpio, pins, FALSE);
#endif
}
/// @brief 反转 IO
/// @param _gpio
/// @param pins
void XTP::IO::toggle(gpio_type* _gpio, uint16_t pins)
{
#if defined AT32
_gpio->odt ^= pins;
#endif
}
我们可以根据不同的单片机平台来通过宏定义来实现不同的硬件相关API
。我使用的默认是 AT32
单片机。
使用
首先包含 xtp_io.h 头文件,让后直接通过命名空间::类名::函数名()的方式来调用。
void Led::off()
{
XTP::IO::low(m_gpiox, m_pins);
}