• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

求教一个HAL库usart输出字符串的问题

lixiang 2019-08-14 浏览量:2737
用cubemx配置的工程,用STM301F103RE芯片的串口2发送内容,代码大致如下:
uint8_t TemNow[]="Temp=22.3";
HAL_UART_Transmit(&huart2 TemNowsizeof(TemNow)0xFFFF);


但是用串口监视发现,每次串口输出的时候都会有0x00作为结束,我不想要这个0x00结束符,现在想的土办法是将输出的字节数减1来解决。
HAL_UART_Transmit(&huart2 TemNowsizeof(TemNow)-10xFFFF);

请问大家有没有更好的办法?以及为什么会出现这样的情况?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:4
  • 0x00是作为结束字段,确实是你在TemNow长度中使用过的,你的处理办法是正确的啊。

    至于原因,应该是赋值时出现的错误,你可以尝试打印,数组TemNow的长度,相信是符合你认为的长度+1的。


  • 所有字符串默认会添加0作为结束符,你用默认长度定义的字符串,22.3长度为5。要想只发有效字符要把sizeof改为 strlen,并包含string.h头文件。

  • 改成这样就可以了:HAL_UART_Transmit(&huart2 TemNowstrlen(TemNow)-10xFFFF);

    sizeof() 统计的是这个TemNow所占内存大小。

    strlen() 统计的是是这个变量字符串的大小​长度

  • 像这种未定义的数组长度,最后都会有个\0作为结束符,如果要去掉这个\0,最好就是使用确定长度的数组

相关问题

问题达人换一批

求教一个HAL库usart输出字符串的问题