HAL 串口的BUG 重大发现
本帖最后由 党国特派员 于 2016-11-17 16:20 编辑在NUCLEO-F412ZG上使用串口时发现的:
串口使用USART3,115200 8 NONE 1
while (1)
{
while(HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY);
HAL_UART_Transmit(&huart3,(uint8_t*)"UserA button pressed.\r\n",25,100);
while(HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY);
HAL_UART_Transmit(&huart3,(uint8_t*)"UserB button pressed.\r\n",25,100);
HAL_Delay(1000);
}
按说应该是串口输出:
UserA button pressed.
UserB button pressed.
可是结果并不是想象的那样,
输出大部分是UserA button pressed.偶尔会出现不全的第二句
大家有没有遇到过。是我哪里没有弄对?还是HAL 的BUG?
问题找到了:原来是长度没有给对。。。“\r\n” 看上去是4个字符,其实C编译的时候只是0x0D,0x0A只是表示两个字符。
总结一下,字符长度,还是用strlen函数计算比较好,我为了方便,就自己数了一下,结果就错了。
问题在这里'....\r\n",25....'
\r \n是控制字符,各占1位~~~
是不是size参数的问题? 这个,,,,还 没有用过F4的板子。 风子 发表于 2016-11-17 09:45
是不是size参数的问题?
size,我是数过的,没错。
有开发板的,可以测试下 haifeng-388081 发表于 2016-11-17 09:56
这个,,,,还 没有用过F4的板子。
有其它的开发板也可以测试,不一定非要F4的板子。 党国特派员 发表于 2016-11-17 09:56
size,我是数过的,没错。
有开发板的,可以测试下
手边没这个型号,我数的size是23,,要不你放到数组里,用sizeof试试 波特率调高些或者发送的延时加长试下! 取消按键评定部分,直接循环输出,看看是否可以循环显示A/B语句;
可以的话,再进行调试,
而且A/B按键之间没有延时,最后加了延时,所以,应该执行A语句的可能性最大; :lol:lol:lol:lol xhzheng 发表于 2016-11-17 10:36
取消按键评定部分,直接循环输出,看看是否可以循环显示A/B语句;
可以的话,再进行调试,
而且A/B按键之间 ...
我这里没有按键,就是下接输出两个语句。
页:
[1]
2