未连接引脚定义为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

posted @ 2022-10-22 17:24  SpinJump  阅读(94)  评论(0编辑  收藏  举报