stm32串口为何就是发不对

[复制链接]
2651|7
 楼主| z1y1m1 发表于 2012-11-21 22:45 | 显示全部楼层 |阅读模式
本人使用stm32F103的芯片,使用以下代码
USART_SendData(USART1, 100);
while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

USART_SendData(USART1, 200);
while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

USART_SendData(USART1, 300);//abs((int16_t)(angle*100)));
while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

USART_SendData(USART1, 500);//abs((int16_t)(angle*100)));
while( USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET );

为何每次接收到的数据都是100 200 44 244
后两个数字就是不正确,原因何在呢,有谁遇到过这个问题吗?
lqab1983 发表于 2012-11-22 09:25 | 显示全部楼层
我和你问题差不多,也总是发不正常。但是我是加了printf("\r\n");后不行,
        if(USART_GetFlagStatus(USART1 , USART_IT_RXNE) == SET)
                {
                    /* 向串口发送接收到的数据 */
                    while(USART_GetFlagStatus(USART1,USART_IT_TXE) == SET)
                                {
                                        USART_SendData(USART1 , USART_ReceiveData(USART1));
                                /* 短延时,保证收发稳定性 */
                                           for(i = 0; i < 500; i ++);
                                //        printf("\n");   为什么加了回车会出现收发内容不全的现象?
                                }
                        }
IJK 发表于 2012-11-22 09:31 | 显示全部楼层
LZ的问题其实不是问题,而是LZ的使用方法不对:
USART_SendData(USART1, unsigned_char_data);
USART_SendData 发送的是8位的数据,300=0x12c就只发送低字节0x2c=44,500=0x1f4就只发送低字节0xf4=244
yinchunhua 发表于 2012-11-22 14:56 | 显示全部楼层
楼上正解,unsigned char 类型最大255
300 和500均超出了范围,只保留最低字节。
beyond696 发表于 2012-11-22 17:18 | 显示全部楼层
多看看C语言吧,基础知识
李淡淡 发表于 2013-11-22 20:26 | 显示全部楼层
USART_DR的数据位只有8位(如果你配置的是8位)吧,即最大值256
handlike 发表于 2013-11-22 21:27 | 显示全部楼层
发送时是字节发送,一个字节最大值是0xff=255,不要不加思索弄个数就往USART1里放好不。
解博 发表于 2013-11-22 22:36 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部