Ejemplo n.º 1
0
/*!
 *  @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);         //保持复用不变,仅仅改变配置选项
        }

    }
}
Ejemplo n.º 2
0
/*!
 *  @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();

}