你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HAL 串口的BUG 重大发现

[复制链接]
党国特派员 提问时间:2016-11-17 09:25 /
本帖最后由 党国特派员 于 2016-11-17 16:20 编辑

在NUCLEO-F412ZG上使用串口时发现的:
串口使用USART3,115200 8 NONE 1
  1.   while (1)
  2.   {

  3.         while(HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY);
  4.         HAL_UART_Transmit(&huart3,(uint8_t*)"UserA button pressed.\r\n",25,100);
  5.         while(HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY);
  6.         HAL_UART_Transmit(&huart3,(uint8_t*)"UserB button pressed.\r\n",25,100);
  7.         HAL_Delay(1000);
  8.   }

复制代码
按说应该是串口输出:
UserA button pressed.
UserB button pressed.
可是结果并不是想象的那样,
输出大部分是UserA button pressed.偶尔会出现不全的第二句
大家有没有遇到过。是我哪里没有弄对?还是HAL 的BUG?

问题找到了:原来是长度没有给对。。。“\r\n” 看上去是4个字符,其实C编译的时候只是0x0D,0x0A只是表示两个字符。
总结一下,字符长度,还是用strlen函数计算比较好,我为了方便,就自己数了一下,结果就错了。


收藏 1 评论18 发布时间:2016-11-17 09:25

举报

18个回答
wolfgang2015 回答时间:2016-11-17 13:18:56
问题在这里'....\r\n",25....'

\r \n是控制字符,各占1位~~~
风子 回答时间:2016-11-17 09:45:19
是不是size参数的问题?
haifeng-388081 回答时间:2016-11-17 09:56:06
这个,,,,还 没有用过F4的板子。
党国特派员 回答时间:2016-11-17 09:56:41
风子 发表于 2016-11-17 09:45
是不是size参数的问题?

size,我是数过的,没错。
有开发板的,可以测试下
党国特派员 回答时间:2016-11-17 09:57:27
haifeng-388081 发表于 2016-11-17 09:56
这个,,,,还 没有用过F4的板子。

有其它的开发板也可以测试,不一定非要F4的板子。
风子 回答时间:2016-11-17 09:58:19
党国特派员 发表于 2016-11-17 09:56
size,我是数过的,没错。
有开发板的,可以测试下

手边没这个型号,我数的size是23,,要不你放到数组里,用sizeof试试
creep 回答时间:2016-11-17 10:33:48
波特率调高些或者发送的延时加长试下!
xhzheng 回答时间:2016-11-17 10:36:03
取消按键评定部分,直接循环输出,看看是否可以循环显示A/B语句;
可以的话,再进行调试,
而且A/B按键之间没有延时,最后加了延时,所以,应该执行A语句的可能性最大;
忘记一切Q 回答时间:2016-11-17 10:44:01
党国特派员 回答时间:2016-11-17 11:18:46
xhzheng 发表于 2016-11-17 10:36
取消按键评定部分,直接循环输出,看看是否可以循环显示A/B语句;
可以的话,再进行调试,
而且A/B按键之间 ...

我这里没有按键,就是下接输出两个语句。
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版