中级会员
 
- 积分
- 322
- 金钱
- 322
- 注册时间
- 2014-10-29
- 在线时间
- 37 小时
|

楼主 |
发表于 2015-8-24 13:24:36
|
显示全部楼层
我有看了一下程序和数据手册,是不是可以这样理解:当TC置1后,清除的方法是 “由软件序列清除该位(先读USART_SR,然后写入USART_DR)。” 那么在主函数中的for循环中有读USART_SR寄存器的操作(while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);) ,然后等下一个for到来后,将下一个字节放入DR中。但是顺序是不是没有按照“先读USART_SR,然后写入USART_DR”来清除TC位,例如:发送第一个数据时(再将数据放入DR之前TC已经为1)将数据放入DR后,发送等待TC=1(while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET)),好、此时判断成立,那么下一个for循环时我们的操作是先将数据放入DR,后判断读的USART_SR,这样是不是没有起到清除TC位的目的(此时TC是否仍然是1)? 总之我现在的迷茫点在于:既然我们使用TC判断发送完成,那么一开始TC就是1,怎样用,还有在发送的哪个过程TC被清为0,如果没有被清0,那么这样判断是不是有缺陷? 谢谢! |
|