中级会员
 
- 积分
- 259
- 金钱
- 259
- 注册时间
- 2018-3-27
- 在线时间
- 40 小时
|
5金钱
初始化部分
USART_ITConfig(USART1, USART_IT_TC, ENABLE);//Tramsimssion Complete后,才产生中断. 开TC中断必须放在这里,否则还是会丢失第一字节
USART_Cmd(USART1, ENABLE); //使能串口1
----------------------------------
void USART_SendTime(void)
{
USART_ClearFlag(USART1, USART_FLAG_TC); //清除传输完成标志位,否则可能会丢失第1个字节的数据.
USART_SendData(USART1, USART_TX_BUF[USART_TXptr++]); //向串口1发送数据
}
-----------------------------------
void USART1_IRQHandler(void) //串口1中断服务程序
{
if( USART_GetITStatus(USART1, USART_IT_TC) == SET )
{
USART_SendData(USART1, USART_TX_T1BUF[USART_TXptr]); //向串口1发送数据
USART_TXptr++;
}
if(USART_TXptr >=20)
{
USART_ClearFlag(USART1, USART_FLAG_TC); //不然TC一直是set, TCIE也是打开的,导致会不停进入中断. clear掉即可,不用关掉TCIE
USART_TXptr = 0;
}
}
|
最佳答案
查看完整内容[请看2#楼]
已经解决问题
void USART_SendTime(void)
{
USART_ClearFlag(USART1, USART_FLAG_TC); //清除传输完成标志位,否则可能会丢失第1个字节的数据.
USART_ITConfig(USART1, USART_IT_TC, ENABLE); //写在清除标志位后面 这样发送的数组第一位就不会丢失了
USART_SendData(USART1, USART_TX_T1BUF); //向串口1发送数据
}
void ...
|