初始化部分
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;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void USART_SendTime(void)
{
USART_ClearFlag(USART1, USART_FLAG_TC); //清除传输完成标志位,否则可能会丢失第1个字节的数据.
USART_ITConfig(USART1, USART_IT_TC, ENABLE); //写在清除标志位后面 这样发送的数组第一位就不会丢失了
USART_SendData(USART1, USART_TX_T1BUF[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_ITConfig(USART1, USART_IT_TC, DISABLE);
USART_TXptr = 0;
}
}
准确来说应该是 发送的数组 第一位为00
一周热门 更多>