打印

关于USART的一个问题!

[复制链接]
2148|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
天灵灵|  楼主 | 2009-3-26 00:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天调试串口程序(查询方式)时候遇到一个问题,不知道是什么原因,不知道别人遇到没有。

初始化串口时的一个顺序问题,具体如下:

1)
USART_Init(USART1,&USART_InitStructure); 
USART_Cmd(USART1, ENABLE);  
2)    
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    

当如上所示的顺序 先1)后2)初始化串口时,当编程成功“第一次复位”全速跑的时候
程序肯定死在,
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
  {
  }
TXE 总为0 即数据还没有被转移到移位寄存

但是我软件复位,或是硬件复位程序,程序就可以正确跑了,没问题了。

当先2)后1)初始化串口时就没这问题。

请教 各位大侠原因!!!!!
沙发
香水城| | 2009-3-26 07:02 | 只看该作者

当然需要先给外设提供时钟再初始化了

所以需要先2)后1)初始化串口。

没有时钟什么都不能工作。

使用特权

评论回复
板凳
天灵灵|  楼主 | 2009-3-26 11:53 | 只看该作者

请教香主

初始化也不工作,就是设置寄存器啊,为什么还要时钟呢??
不懂

再有,如果后给时钟不能工作的话,为什么我复位后就能跑了?

使用特权

评论回复
地板
alenthj| | 2009-3-26 12:43 | 只看该作者

请参考RCC那部分

里面有个时钟图。程序上电默认的是内部8M时钟,但USART1时钟需要初始化才能连接上。

使用特权

评论回复
5
香水城| | 2009-3-26 21:47 | 只看该作者

一般芯片中的数字部分都是同步设计,这种设计需要有时钟

如果真想搞清楚,请选学数字逻辑课程。

使用特权

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

本版积分规则

8

主题

31

帖子

0

粉丝