/*! * @brief 初始化key端口(key 小于 KEY_MAX 时初始化 对应端口,否则初始化全部端口) * @param KEY_e KEY编号 * @since v5.0 * Sample usage: KEY_init (KEY_U); //初始化 KEY_U */ void key_init(KEY_e key) { if(key < KEY_MAX) { gpio_init(KEY_PTxn[key], GPI, 0); port_init_NoALT(KEY_PTxn[key], PULLUP); //保持复用不变,仅仅改变配置选项 } else { key = KEY_MAX; //初始化全部 按键 while(key--) { gpio_init(KEY_PTxn[key], GPI, 0); port_init_NoALT(KEY_PTxn[key], PULLUP); //保持复用不变,仅仅改变配置选项 } } }
/*! * @brief NRF24L01+初始化,默认进入接收模式 * @return 初始化成功标记,0为初始化失败,1为初始化成功 * @since v5.0 * Sample usage: while(!nrf_init()) //初始化NRF24L01+ ,等待初始化成功为止 { printf("\n NRF与MCU连接失败,请重新检查接线。\n"); } printf("\n NRF与MCU连接成功!\n"); */ uint8 nrf_init(void) { //配置NRF管脚复用 spi_init(NRF_SPI, NRF_CS, MASTER,12500*1000); //初始化SPI,主机模式 gpio_init(NRF_CE_PTXn, GPO, LOW); //初始化CE,默认进入待机模式 gpio_init(NRF_IRQ_PTXn, GPI, LOW); //初始化IRQ管脚为输入 port_init_NoALT(NRF_IRQ_PTXn, IRQ_FALLING | PULLUP); //初始化IRQ管脚为下降沿 触发中断 //配置NRF寄存器 NRF_CE_LOW(); nrf_writereg(NRF_WRITE_REG + SETUP_AW, ADR_WIDTH - 2); //设置地址长度为 TX_ADR_WIDTH nrf_writereg(NRF_WRITE_REG + RF_CH, CHANAL); //设置RF通道为CHANAL nrf_writereg(NRF_WRITE_REG + RF_SETUP, 0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启 nrf_writereg(NRF_WRITE_REG + EN_AA, 0x01); //使能通道0的自动应答 nrf_writereg(NRF_WRITE_REG + EN_RXADDR, 0x01); //使能通道0的接收地址 //RX模式配置 nrf_writebuf(NRF_WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); //写RX节点地址 nrf_writereg(NRF_WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //选择通道0的有效数据宽度 nrf_writereg(FLUSH_RX, NOP); //清除RX FIFO寄存器 //TX模式配置 nrf_writebuf(NRF_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); //写TX节点地址 nrf_writereg(NRF_WRITE_REG + SETUP_RETR, 0x0F); //设置自动重发间隔时间:250us + 86us;最大自动重发次数:15次 nrf_writereg(FLUSH_TX, NOP); //清除TX FIFO寄存器 nrf_rx_mode(); //默认进入接收模式 NRF_CE_HIGH(); return nrf_link_check(); }