uart发送数据的一个奇怪问题

前后略
程序1:
uint8_t ASCTXT;
unsigned int i;
for(i=0;i<256;i++)
{
ASCTXT = i;
}

while(HAL_UART_Transmit_IT(&huart6, ASCTXT,256)!= HAL_OK)
{
}

PC端接受到结果01 02....FF,正常没问题。

程序2:
uint8_t ASCTXT;
unsigned int i;
for(i=0;i<256;i++)
{
ASCTXT = i+10; //加10,这是唯一区别的地方。
}

while(HAL_UART_Transmit_IT(&huart6, ASCTXT,256)!= HAL_OK)
{
}
PC端收到结果为:
0A 0B 0C 0D 0E 0F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09
收到数据从第7个开始异常了。
谁能给解释下为什么?我是在尝试以16进制输出ASCII的时候发现这个问题的,输出的ASCII码一直都是错误。
已邀请:

Thomas - 如:80后IT男..

赞同来自:

在第二段代码中,当i=246的时候,出现了内存溢出.
因为ASCTXT 定义的是无符号字符型变量,最大表示的数是0-255,而当i=246的时候,你给ASCTXT写入了一个‘256’,这是不被允许的。其实这个时候你的指针就乱了,指针一旦乱掉,什么奇怪的问题都会出现。
建议把第二段的循环次数修改为245次,这样你输出的数据就对了.

百战天虫

赞同来自:

唔 关于程序1,我仔细看输出数也不对了
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
就是错误起始位置不同罢了,我没有运行任何OS

BG4RFF

赞同来自:

ASCTXT =(uint8_t) i;
这样试试,我不知道把uint16_t赋给uint8_t会怎样

百战天虫

赞同来自:

问题已经找到了用的F405,cube由波特率算的分频有问题,我人工修改寄存器中分频后得到了正确结果

Thomas - 如:80后IT男..

赞同来自: 百战天虫

你配置的波特率是多少?我用cubemx配置的代码,波特率很好的。通讯一直正常

jialian4213

赞同来自:

我用F103系列也出现了这个问题,伏请博主指导啊。

要回复问题请先登录注册