野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14200|回复: 2

USART发送中断的问题

[复制链接]
发表于 2015-12-24 11:11:05 | 显示全部楼层 |阅读模式
extern u8 RxBuf[20],Rxcount,Txcount;
void USART1_IRQHandler(void)
{
        if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
        {
                USART_ClearITPendingBit(USART1,USART_IT_RXNE);
                RxBuf[Rxcount++]=USART_ReceiveData(USART1);
        }
        if(USART_GetITStatus(USART1,USART_IT_TC)!=SET)
        {
                if(Txcount<Rxcount)
                {
                        USART_SendData(USART1, RxBuf[Txcount++]);
                }
                else
                {
                        USART_ClearITPendingBit(USART1,USART_IT_TC);
                        USART_ITConfig(USART1,USART_IT_TC,DISABLE);
                        memset(RxBuf,0,Rxcount);
                        Rxcount=Txcount=0;
                }
               
        }
}

void TIM2_IRQHandler(void)
{
        if(Rxcount>7)
        {
                USART_ITConfig(USART1,USART_IT_TC,ENABLE);
        }
}
每次收到8个以上字符,则启动发送中断,把收到的数据发送回去,我是用的时USART_IT_TC,但是这个只能进入一次发送中断
之后就不能再进入发送中断了,但是如果换成USART_IT_TXE则可以每次都进入发送中断,这是为什么???

回复

使用道具 举报

 楼主| 发表于 2015-12-24 11:21:19 | 显示全部楼层
  if(USART_GetITStatus(USART1,USART_IT_TC)!=SET)这个地方写错了,应该是  if(USART_GetITStatus(USART1,USART_IT_TC)!=RESET),就是换成这样还是不行
回复 支持 反对

使用道具 举报

发表于 2015-12-24 11:33:25 | 显示全部楼层
USART_IT_TC是发送完成中断标志
USART_IT_TXE是发送数据寄存器为空中断标志
你还需要好好分析你的程序逻辑
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 13:52 , Processed in 0.027035 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表