打印

stm32串口为何就是发不对

[复制链接]
2150|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均超出了范围,只保留最低字节。

使用特权

评论回复
5
beyond696| | 2012-11-22 17:18 | 只看该作者
多看看C语言吧,基础知识

使用特权

评论回复
6
李淡淡| | 2013-11-22 20:26 | 只看该作者
USART_DR的数据位只有8位(如果你配置的是8位)吧,即最大值256

使用特权

评论回复
7
handlike| | 2013-11-22 21:27 | 只看该作者
发送时是字节发送,一个字节最大值是0xff=255,不要不加思索弄个数就往USART1里放好不。

使用特权

评论回复
8
解博| | 2013-11-22 22:36 | 只看该作者
是的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

16

帖子

1

粉丝