打印

ST 为什么这样设计?香主请进!

[复制链接]
2199|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
violet520|  楼主 | 2011-3-26 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32的usart,在复位后,SR寄存器中的TXE和TC标志位为1,我一使能usart就进入中断程序,后来我先把这两个标志清楚,再使能usart还是进入中断,发现使能后TC标志又为1,太郁闷了,这样的设计太垃圾了。

我都没有发送数据,为什么硬件自动把TC标志置位呢?不合乎逻辑。有什么好的解决方法?

  /* Configure the USARTx */
  USART_Init(USART1, &USART_InitStructure);
  USART_ClockInit(USART1, &USART_ClockInitStructure);
  USART_ClearITPendingBit(USART1,USART_IT_RXNE);
  USART_ClearITPendingBit(USART1,USART_IT_TC);
   
  /* Enable the USARTx */
  USART_Cmd(USART1, ENABLE);
  
  USART_ClearITPendingBit(USART1,USART_IT_RXNE);
  USART_ClearITPendingBit(USART1,USART_IT_TC);
  
   /* Enable the USART Receive interrupt: this interrupt is generated when the
   USART1 receive data register is not empty */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TC, ENABLE);
沙发
yzzly| | 2011-3-27 11:56 | 只看该作者
一个是发送完成中断,一个是发送寄存器空中断,你可以禁止TC中断

使用特权

评论回复
板凳
violet520|  楼主 | 2011-3-27 16:56 | 只看该作者
我需要TC中断,但不希望一初始化就中断,而是真正数据发送完成才进中断。不知道怎样处理?郁闷

使用特权

评论回复
地板
香水城| | 2011-3-27 21:13 | 只看该作者
我需要TC中断,但不希望一初始化就中断,而是真正数据发送完成才进中断。不知道怎样处理?郁闷
violet520 发表于 2011-3-27 16:56


TC中断要在需要的时候才使能,即在数据缓冲区空时才使能。

使用特权

评论回复
5
violet520|  楼主 | 2011-3-28 12:55 | 只看该作者
用起来很别扭,明明是发送完成中断,却没有发送数据就中断。
不知道为什么这样设计???

使用特权

评论回复
6
yinyangdianzi| | 2011-3-28 14:18 | 只看该作者
tell me why

使用特权

评论回复
7
香水城| | 2011-3-28 18:19 | 只看该作者
tell me why
yinyangdianzi 发表于 2011-3-28 14:18


cost down

使用特权

评论回复
8
zxm19820916| | 2013-3-11 12:38 | 只看该作者
我查看状态寄存器SR的内容一直为C0,即TXE,TC一直处于置位状态.
我也遇到这个问题,芯片是STM32F051C8,使用USART1时,配置TC或TXE中断使能时,一开始就进中断函数,出不来了。不知道为什么,发送中断使能应该在哪个地方使用?

使用特权

评论回复
9
zxm19820916| | 2013-3-11 12:44 | 只看该作者
香水城 发表于 2011-3-27 21:13
TC中断要在需要的时候才使能,即在数据缓冲区空时才使能。

是TXE中断吧?香主。

使用特权

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

本版积分规则

33

主题

123

帖子

1

粉丝