基于江科大STM32和NRF24L01实现汉字、字符、数字、浮点数向电脑发送

最近在使用stm32单片机时,有一个需求,就是通过NRF24L01向电脑发送数据,学习了部分教程后,发现目前分享的程序里基本只能发送简单的16进制数,并不能发送汉字、字符、数字、浮点数等,于是在其基础上进行改进,目前可以实现发送汉字、字符、数字、浮点数,需要源码可无偿分享,联系1090632294@qq.com。

//发送数据字节函数

void NRF24L01_SendBuf(uint8_t *Buf)
{
    W_CE(0);                                    
    NRF24L01_Write_Reg(nRF_WRITE_REG + CONFIG, 0x0E);   
    W_CE(1);
    Delay_us(15);
    NRF24L01_SendTxBuf(Buf);                        
    W_CE(0);
    NRF24L01_Write_Reg(nRF_WRITE_REG + CONFIG, 0x0F);
    W_CE(1);    
}

//发送字符函数

void NRF24L01_SendString(char *String)
{
    uint8_t Psign[32] = {0};
    uint8_t SendBuf[33] = {0};
    uint8_t TSign = 0;
    for (uint8_t i = 0; i < 32; i ++)
    {
        if (String[i] != 0)
        {
            Psign[TSign] = i;
            TSign ++;
        }
    }
    if (TSign > 0)
    {
        TSign –;
    }
    SendBuf[0] = Psign[TSign] + 1;
    for (uint8_t i = 0; i < SendBuf[0]; i ++)
    {
        SendBuf[i + 1] = String[i];
    }
    NRF24L01_SendBuf(SendBuf);
    
}

//发送数字函数

void NRF24L01_SendNum(uint32_t Num)
{
    uint8_t SendBuf[2] = {0};
    SendBuf[0] = 1;
    for (uint8_t i = 0; i < 1; i ++)                            
    {
        SendBuf[i + 1] = (Num / (uint32_t)pow(10, 0 – i) % 10+'0');
    }
    
    NRF24L01_SendBuf(SendBuf);
    
}

//发送浮点数函数
void NRF24L01_SendFloatNum(double Number,int FraLength)
{
    uint32_t PowNum, IntNum, FraNum,a;
    
    /*提取整数部分和小数部分*/
    IntNum = Number;                        //直接赋值给整型变量,提取整数
    a=IntNum;
    
    Number -= IntNum;                        //将Number的整数减掉,防止之后将小数乘到整数时因数过大造成错误
    PowNum = pow(10, FraLength);        //根据指定小数的位数,确定乘数
    FraNum = round(Number * PowNum);        //将小数乘到整数,同时四舍五入,避免显示误差
    IntNum += FraNum / PowNum;                //若四舍五入造成了进位,则需要再加给整数
    int datalength=0;
    
    while(IntNum!=0)   
    {
        datalength++;
        IntNum=IntNum/10;//一共有几位整数 
    } //此时IntNum为0 需要重新给IntNum赋值
    
    IntNum=a;    
    
    NRF24L01_SendNum(IntNum);//发送整数部分
    Delay_ms(200);
    NRF24L01_SendString(".");
    Delay_ms(200);
    NRF24L01_SendNum(FraNum);//发送小数部分
    Delay_ms(200);
    
    
}

//发送中文函数

void NRF24L01_Printf(char *format, …)
{
    char String[100];                //定义字符数组
    va_list arg;                    //定义可变参数列表数据类型的变量arg
    va_start(arg, format);            //从format开始,接收参数列表到arg变量
    vsprintf(String, format, arg);    //使用vsprintf打印格式化字符串和参数列表到字符数组中
    va_end(arg);                    //结束变量arg
    NRF24L01_SendString(String);        //串口发送字符数组(字符串)
}

主程序

程序现象

作者:Super小张

物联沃分享整理
物联沃-IOTWORD物联网 » 基于江科大STM32和NRF24L01实现汉字、字符、数字、浮点数向电脑发送

发表评论