支持引脚导致,编译通过,测试未通过

This commit is contained in:
nnhy 2015-09-04 10:34:55 +00:00
parent cb888f2e82
commit 04c778960e
8 changed files with 46 additions and 29 deletions

View File

@ -195,11 +195,11 @@ void AutoOpenTask(void* param);
NRF24L01::NRF24L01() { Init(); } NRF24L01::NRF24L01() { Init(); }
NRF24L01::NRF24L01(Spi* spi, Pin ce, Pin irq) /*NRF24L01::NRF24L01(Spi* spi, Pin ce, Pin irq)
{ {
Init(); Init();
Init(spi, ce, irq); Init(spi, ce, irq);
} }*/
void NRF24L01::Init() void NRF24L01::Init()
{ {
@ -233,12 +233,12 @@ void NRF24L01::Init()
LedRx = NULL; LedRx = NULL;
} }
void NRF24L01::Init(Spi* spi, Pin ce, Pin irq) void NRF24L01::Init(Spi* spi, Pin ce, Pin irq, Pin power)
{ {
if(irq != P0) //if(irq != P0)
debug_printf("NRF24L01::Init CE=P%c%d IRQ=P%c%d\r\n", _PIN_NAME(ce), _PIN_NAME(irq)); debug_printf("NRF24L01::Init CE=P%c%d IRQ=P%c%d POWER=P%c%d\r\n", _PIN_NAME(ce), _PIN_NAME(irq), _PIN_NAME(power));
else //else
debug_printf("NRF24L01::Init CE=P%c%d IRQ=P0\r\n", _PIN_NAME(ce)); // debug_printf("NRF24L01::Init CE=P%c%d IRQ=P0\r\n", _PIN_NAME(ce));
if(ce != P0) if(ce != P0)
{ {
@ -257,6 +257,12 @@ void NRF24L01::Init(Spi* spi, Pin ce, Pin irq)
_IRQ.Set(irq).Config(); _IRQ.Set(irq).Config();
_IRQ.Register(OnIRQ, this); _IRQ.Register(OnIRQ, this);
} }
if(power != P0)
{
Power.Set(power).Config();
debug_printf("打开物理电源开关\r\n");
}
// 必须先赋值后面WriteReg需要用到 // 必须先赋值后面WriteReg需要用到
_spi = spi; _spi = spi;
@ -294,9 +300,6 @@ NRF24L01::~NRF24L01()
delete _spi; delete _spi;
_spi = NULL; _spi = NULL;
delete Power;
Power = NULL;
delete LedTx; delete LedTx;
LedTx = NULL; LedTx = NULL;
@ -362,6 +365,11 @@ byte NRF24L01::WriteReg(byte reg, byte dat)
// 主要用于NRF与MCU是否正常连接 // 主要用于NRF与MCU是否正常连接
bool NRF24L01::Check(void) bool NRF24L01::Check(void)
{ {
if(!Power.Read())
{
Power = true;
debug_printf("打开物理电源开关\r\n");
}
// 检查并打开Spi // 检查并打开Spi
_spi->Open(); _spi->Open();
@ -790,14 +798,6 @@ void AutoOpenTask(void* param)
bool NRF24L01::OnOpen() bool NRF24L01::OnOpen()
{ {
if(Power && !*Power)
{
*Power = true;
debug_printf("打开物理电源开关\r\n");
}
// 检查并打开Spi
_spi->Open();
Error = 0; Error = 0;
// 配置完成以后,无需再次检查 // 配置完成以后,无需再次检查
@ -837,9 +837,9 @@ void NRF24L01::OnClose()
SetPower(false); SetPower(false);
_spi->Close(); _spi->Close();
if(Power) if(Power.Read())
{ {
*Power = false; Power = false;
debug_printf("关闭物理电源开关\r\n"); debug_printf("关闭物理电源开关\r\n");
} }
} }

View File

@ -14,6 +14,7 @@ private:
Spi* _spi; Spi* _spi;
OutputPort _CE; OutputPort _CE;
InputPort _IRQ; InputPort _IRQ;
OutputPort Power; // 设置控制2401电源的引脚 直接进行对2401的通断电操作以免死机对setPower无效
byte WriteBuf(byte reg, const byte *pBuf, byte bytes); byte WriteBuf(byte reg, const byte *pBuf, byte bytes);
byte ReadBuf(byte reg, byte *pBuf, byte bytes); byte ReadBuf(byte reg, byte *pBuf, byte bytes);
@ -53,13 +54,12 @@ public:
ushort Error; // 错误次数,超过最大错误次数则自动重置 ushort Error; // 错误次数,超过最大错误次数则自动重置
NRF24L01(); NRF24L01();
NRF24L01(Spi* spi, Pin ce = P0, Pin irq = P0); //NRF24L01(Spi* spi, Pin ce = P0, Pin irq = P0, Pin power = P0);
virtual ~NRF24L01(); virtual ~NRF24L01();
void Init(Spi* spi, Pin ce = P0, Pin irq = P0); void Init(Spi* spi, Pin ce = P0, Pin irq = P0, Pin power = P0);
bool Check(); bool Check();
bool Config(); // 完成基础参数设定,默认初始化为发送模式 bool Config(); // 完成基础参数设定,默认初始化为发送模式
OutputPort* Power; // 设置控制2401电源的引脚 直接进行对2401的通断电操作以免死机对setPower无效
bool GetPower(); // 获取当前电源状态 bool GetPower(); // 获取当前电源状态
bool SetPower(bool on); // 设置当前电源状态。返回是否成功 bool SetPower(bool on); // 设置当前电源状态。返回是否成功
bool GetMode(); // 获取当前模式是否接收模式 bool GetMode(); // 获取当前模式是否接收模式

View File

@ -1,6 +1,6 @@
#ifndef _PIN_H_ #ifndef _PIN_H_
#define _PIN_H_ #define _PIN_H_
/* 针脚 ------------------------------------------------------------------*/ /* 针脚 ------------------------------------------------------------------*/
enum Pin enum Pin
{ {
@ -132,7 +132,9 @@ enum Pin
PH12 = 0x7C, PH12 = 0x7C,
PH13 = 0x7D, PH13 = 0x7D,
PH14 = 0x7E, PH14 = 0x7E,
PH15 = 0x7F PH15 = 0x7F,
PinInvert = 0x80
}; };
#if defined(STM32F4) #if defined(STM32F4)

View File

@ -7,7 +7,7 @@
#define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6))) #define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6)))
#define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F)) #define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F))
#define _PIN(PIN) (PIN & 0x000F) #define _PIN(PIN) (PIN & 0x000F)
#define _PIN_NAME(pin) ('A' + (pin >> 4)), (pin & 0x0F) #define _PIN_NAME(pin) ('A' + ((pin & 0x7F) >> 4)), (pin & 0x0F)
/* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/ /* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/
/*STM32F030C8T6串口针脚*/ /*STM32F030C8T6串口针脚*/

View File

@ -7,7 +7,7 @@
#define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6))) #define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6)))
#define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F)) #define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F))
#define _PIN(PIN) (PIN & 0x000F) #define _PIN(PIN) (PIN & 0x000F)
#define _PIN_NAME(pin) ('A' + (pin >> 4)), (pin & 0x0F) #define _PIN_NAME(pin) ('A' + ((pin & 0x7F) >> 4)), (pin & 0x0F)
#ifdef STM32F10X_HD #ifdef STM32F10X_HD
/* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/ /* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/

View File

@ -7,7 +7,7 @@
#define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6))) #define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6)))
#define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F)) #define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F))
#define _PIN(PIN) (PIN & 0x000F) #define _PIN(PIN) (PIN & 0x000F)
#define _PIN_NAME(pin) ('A' + (pin >> 4)), (pin & 0x0F) #define _PIN_NAME(pin) ('A' + ((pin & 0x7F) >> 4)), (pin & 0x0F)
/* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/ /* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/
#ifdef STM32F427X #ifdef STM32F427X

View File

@ -33,6 +33,7 @@ Port::~Port()
// 单一引脚初始化 // 单一引脚初始化
Port& Port::Set(Pin pin) Port& Port::Set(Pin pin)
{ {
pin = (Pin)(pin & 0x7F);
// 如果引脚不变,则不做处理 // 如果引脚不变,则不做处理
if(pin == _Pin) return *this; if(pin == _Pin) return *this;
@ -56,6 +57,18 @@ Port& Port::Set(Pin pin)
return *this; return *this;
} }
Port& OutputPort::Set(Pin pin)
{
Invert = (pin & 0x80) != 0;
return Port::Set(pin);
}
Port& InputPort::Set(Pin pin)
{
Invert = (pin & 0x80) != 0;
return Port::Set(pin);
}
bool Port::Empty() const bool Port::Empty() const
{ {
if(_Pin != P0) return false; if(_Pin != P0) return false;

4
Port.h
View File

@ -19,7 +19,7 @@ public:
Pin _Pin; // 针脚 Pin _Pin; // 针脚
ushort PinBit; // 组内引脚位。每个引脚一个位 ushort PinBit; // 组内引脚位。每个引脚一个位
Port& Set(Pin pin); // 设置引脚 virtual Port& Set(Pin pin); // 设置引脚
bool Empty() const; bool Empty() const;
// 确定配置,确认用对象内部的参数进行初始化 // 确定配置,确认用对象内部的参数进行初始化
@ -63,6 +63,7 @@ public:
Config(); Config();
} }
virtual Port& Set(Pin pin); // 设置引脚
// 整体写入所有包含的引脚 // 整体写入所有包含的引脚
void Write(bool value); void Write(bool value);
void WriteGroup(ushort value); // 整组写入 void WriteGroup(ushort value); // 整组写入
@ -140,6 +141,7 @@ public:
virtual ~InputPort(); virtual ~InputPort();
virtual Port& Set(Pin pin); // 设置引脚
ushort ReadGroup(); // 整组读取 ushort ReadGroup(); // 整组读取
bool Read(); // 读取状态 bool Read(); // 读取状态
static bool Read(Pin pin); // 读取某个引脚 static bool Read(Pin pin); // 读取某个引脚