打印

STM32变波特率通迅

[复制链接]
2378|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duyinqian1986|  楼主 | 2011-6-22 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//4800发0x00
USART1->BRR = 0x3A98;
USART_SendData(USART1,0x00);
        while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE))


               {}

//变波特率为9600
USART1->BRR = 0x1D4C;
USART_SendData(USART1,0x55);
         while(!USART_GetFlagStatus(USART1,USART_FLAG_TXE))


               {}

为什么在发送0x00的时候也是9600的波特率?
沙发
IJK| | 2011-6-23 09:28 | 只看该作者
按这个流程:
Disable USART1
改变波特率
Enable USART1
发送 数据

使用特权

评论回复
板凳
香水城| | 2011-6-23 10:05 | 只看该作者
要等前面的数据发送完毕,再转换波特率。

使用特权

评论回复
地板
duyinqian1986|  楼主 | 2011-6-27 22:27 | 只看该作者
不行。单步的时候很正常,一串动做下来就不对了

使用特权

评论回复
5
香水城| | 2011-6-28 10:20 | 只看该作者
USART_FLAG_TXE不表示发送结束,只表示发送缓冲区空。

使用特权

评论回复
6
hjiongh| | 2011-6-28 11:18 | 只看该作者
单步的时候是有延时的

使用特权

评论回复
7
duyinqian1986|  楼主 | 2011-6-28 15:24 | 只看该作者
解决了。
在USART初始化时ENBALE,
在变波特率时,不要DISABLE。片段如下:
                                        //4800发0x00
                                        USART1->BRR = 0x3A98;
                                        USART_ClearFlag(USART1,USART_FLAG_TC);
                                        USART_SendData(USART1,0x00);
                                           while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

                                        //变波特率为9600
                                        USART1->BRR = 0x1D4C;
                                        //USART_ClearFlag(USART1,USART_FLAG_TC);
                                        USART_SendData(USART1,0x55);
                                        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
谢谢香水城的提醒。

使用特权

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

本版积分规则

0

主题

41

帖子

1

粉丝