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

[复制链接]
3505|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中断要在需要的时候才使能,即在数据缓冲区空时才使能。
 楼主| violet520 发表于 2011-3-28 12:55 | 显示全部楼层
用起来很别扭,明明是发送完成中断,却没有发送数据就中断。
不知道为什么这样设计???
yinyangdianzi 发表于 2011-3-28 14:18 | 显示全部楼层
tell me why
香水城 发表于 2011-3-28 18:19 | 显示全部楼层
tell me why
yinyangdianzi 发表于 2011-3-28 14:18


cost down
zxm19820916 发表于 2013-3-11 12:38 | 显示全部楼层
我查看状态寄存器SR的内容一直为C0,即TXE,TC一直处于置位状态.
我也遇到这个问题,芯片是STM32F051C8,使用USART1时,配置TC或TXE中断使能时,一开始就进中断函数,出不来了。不知道为什么,发送中断使能应该在哪个地方使用?
zxm19820916 发表于 2013-3-11 12:44 | 显示全部楼层
香水城 发表于 2011-3-27 21:13
TC中断要在需要的时候才使能,即在数据缓冲区空时才使能。

是TXE中断吧?香主。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

123

帖子

1

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