未连接引脚定义为NC之后出错
1.在这款lora 连接中,没有使用DIO4和DIO5 ,于是将其引脚定义为NC。
#define RADIO_DIO_4 NC
#define RADIO_DIO_5 NC
2.枚举中定义中将NC定义为最大值。 这里就出现了一个问题,32位的int最大值是0x7FFFFFFF 而不是 0xFFFFFFFFF(-1) 。这个就直接导致在后面进行比较的时候,定义为NC 的引脚也会验证通过。
typedef enum
{
MCU_PINS,
IOE_PINS,
IOE_1,
// Not connected
NC = (int)0x7FFFFFFF //这个最大值是正确的。
}PinNames;
3.需要先复制,后比较。不然整个值就不能被保存下来。
void GpioMcuInit( Gpio_t *obj, PinNames pin, PinModes mode, PinConfigs config, PinTypes type, uint32_t value )
{
obj->pin = pin; //要先赋值,不然后面使用时,会当做未初始化的0来使用。
if( pin < IOE_0 )
{
GPIO_InitTypeDef GPIO_InitStructure;
obj->pin = pin;
if( pin == NC )
{
return;
}
void GpioMcuSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler )
{
if( obj->pin < IOE_0 ) //如果上面没有保存,那么这里的obj->pin就会是0,而不是NC,就会出错。
{
uint32_t priority = 0;
4.枚举变量还需要注意这个问题
keil 里面的枚举变量被装换为uint8_t