之前一直用的是
[mw_shl_code=c,true]USART_SendData(USART1,0x06);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); [/mw_shl_code]
这种发送方式,然后发送多个字节的时候,就在外面加一个while,或者for。但是后来发现,这种写法经常会出现问题,
在中断比较多的时候,会出现程序死机的现象。还有就是这样的发送,如果发送很长的数据,就会占用很长的时间。
在我做项目的时候,纠结的要死。
后来我的老师提供了一种方法,现在来分享下!!希望对大家有用!!
首先,我们打开串口发送中断(谢谢提醒,开发送中断是这个函数 USART_ITConfig(USART1,USART_IT_TC,ENABLE);
),
//对应的请标志的USART_ClearITPendingBit(USART1,USART_IT_TC);
当我们需要发送数据时:
先发送一个字节,
这时候程序会进入中断,
清发送中断的标志,
在中断里发送第二个字节的数据。
由于第二个字节的数据发送完成以后,没有清除中断标志,所以在出中断以后,由于中断的标志还在,所以再一次进中断。
这样的话,就可以在中断发送完成剩下的数据了。
下面把程序中断部分的代码贴一下。
Usart_Data_Len表示要发送的数据的长度
简单的就是这样了,但这样发送有一个问题,比如
aa 32 34 54 56 24 23
用这种发送方法之后就会变成这样
aa
23 24 56 54 34 32
后来我自己捣鼓了一下
这样就可以顺序的发送数据啦。。。。。
---------------------------------
1.中断打断了,标志还在,继续跑。
2.出中断再进中断
一周热门 更多>