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

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@
#define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6)))
#define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F))
#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)针脚 ------------------------------------------------------------------*/
/*STM32F030C8T6串口针脚*/

View File

@ -7,7 +7,7 @@
#define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6)))
#define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F))
#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
/* 通用同步/异步收发器(USART)针脚 ------------------------------------------------------------------*/

View File

@ -7,7 +7,7 @@
#define _GROUP(PIN) ((GPIO_TypeDef *) (GPIOA_BASE + (((PIN) & (uint16_t)0xF0) << 6)))
#define _PORT(PIN) (1 << ((PIN) & (uint16_t)0x0F))
#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)针脚 ------------------------------------------------------------------*/
#ifdef STM32F427X

View File

@ -33,6 +33,7 @@ Port::~Port()
// 单一引脚初始化
Port& Port::Set(Pin pin)
{
pin = (Pin)(pin & 0x7F);
// 如果引脚不变,则不做处理
if(pin == _Pin) return *this;
@ -56,6 +57,18 @@ Port& Port::Set(Pin pin)
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
{
if(_Pin != P0) return false;

4
Port.h
View File

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