zlvall 2022-02-12 20:39 采纳率: 50%
浏览 292
已结题

STM32串口发送一个字符型数组上位机接受的是乱码

问题遇到的现象和发生背景

大致就是想要通过stm32将ad芯片转换的电容数值先存入一个叫cap【】的数组中(比如电容值为84.96,处理过后转为字符8 4 9 6 存入cap【6】中)正点原子的上位机接受的是显示如下图,我想让他在上位机上显示84.96,这是为什么呢?恳求各位巨佬解惑

问题相关代码,请勿粘贴截图
float cap_val = 0.0f;
unsigned char cap[6] = {'1','5','.','5','6',' '};
unsigned int capsw,capgw,capzs,capxs1,capxs2;
int main(void)
{
 cap_reszult0 = 0x1b3011;                         //这里直接给测量值赋值了,测量部分和一些不影响的代码就没有贴上来无关就没贴上来
        cap_temp = 0x1fffff;
cap_val = (double)cap_reszult0/(double)cap_temp;//0.8496 为C0/C1的比值
        cap_val = cap_val*100;//84.96 cap_val 为待测电容的容值?100为基准电容容值

        capzs = (unsigned int)cap_val;
        capsw = capzs/10;
        capgw = capzs%10;

        cap_val = cap_val - capzs;
        cap_val = cap_val*100;
        capzs = (unsigned int)cap_val;
        capxs1 = capzs/10;
        capxs2 = capzs%10;

        cap[0] = capsw + '0';
        cap[1] = capgw + '0';
        cap[3] = capxs1 + '0';
        cap[4] = capxs2 + '0';
        

UART1_Send_Array(cap,6);
}
void UART1_Send_Array(unsigned char send_array[],unsigned char num) //两个参数 一是数组(的数据) 二是数组长度1-255 
{
        //串口发送
        unsigned char i=0;  //定义一个局部变量  用来 发送字符串 ++运算


        while(i!=num)
        {
                
               USART_SendData(USART1,send_array[i]);//经过库函数  发送数据
                while( USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);  
            i++;  //值 加一         
        }
运行结果及报错内容

img

我的解答思路和尝试过的方法

本人究极小白,描述肯定很不贴切,贴的东西可能不够精准,需要补充的话可以后续贴上去,恳请各位巨佬能够指导一下该怎么做呢?

我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 关注

    unsigned char cap[6] = {'1','5','.','5','6',' '};前面的unsigned去掉。
    UART1_Send_Array函数改成下面的试试:

    void UART1_Send_Array(char send_array[],short num) //两个参数 一是数组(的数据) 二是数组长度1-255 
    {
        //串口发送
        short i=0;  //定义一个局部变量  用来 发送字符串 ++运算
        while(i!=num)
        {
            USART_SendData(USART1,send_array[i]);//经过库函数  发送数据
            while( USART_GetFlagStatus(USARTx,USART_FLAG_TXE)!=RESET);  
            i++;  //值 加一         
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 我秃了,但没强 2022-02-14 09:58
    关注

    1.

    while( USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
    

    这里的“USARTx”修改为“USART1”

    2.确认一下波特率是否为115200

    评论
  • 有问必答小助手 2022-03-19 15:58
    关注
    您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
    PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 2月12日

悬赏问题

  • ¥15 初学者c语言题目解答
  • ¥15 div editable中的光标问题
  • ¥15 mysql报错1415Not allowed to return a result set from a trigger 不知如何修改
  • ¥60 Python输出Excel数据整理,算法较为复杂
  • ¥15 回答几个问题 关于数据库
  • ¥15 51单片机串口通信问题,未完成且要修改
  • ¥15 百鸡问题 c++编程问题(相关搜索:输出数据)
  • ¥30 如何在CMD中设置代理
  • ¥15 我有一块薛定谔的硬盘
  • ¥15 微信小游戏开发2D碰撞检测问题