打印
[STM8]

STM8L串口发送中断一直触发

[复制链接]
16386|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
donsbin|  楼主 | 2015-7-12 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人小白一个,查询发送可以的。现在想通过串口中断来发送。可是调试发现一直触发中断,查询出不来了。上代码

//初始化
void USART_Config(void)  
{  
    GPIO_Init(GPIOC,2,GPIO_Mode_In_PU_No_IT);
    GPIO_Init(GPIOC,3,GPIO_Mode_Out_PP_High_Fast);
    CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);      
    USART_DeInit(USART1);        
    USART_Init(USART1,(uint32_t)9600, USART_WordLength_8b, USART_StopBits_1,  
    USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Rx | USART_Mode_Tx));  
    USART_ITConfig(USART1,(USART_IT_RXNE|USART_IT_TC),ENABLE);  //使能发送接收中断
    ITC_SetSoftwarePriority(USART1_TX_IRQn, ITC_PriorityLevel_1); //优先级
    ITC_SetSoftwarePriority(USART1_RX_IRQn, ITC_PriorityLevel_1);
    USART_Cmd(USART1,ENABLE);   
}  


//发送中断
INTERRUPT_HANDLER(Uart_TX_IRQHandler,27)
{
    USART_SendData8(USART1,(unsigned char)TxBuff[cunt]);
    USART_ClearFlag(USART1,USART_IT_TC);
    USART_ITConfig(USART1,USART_IT_TC,ENABLE);  
}

求解答
沙发
NE5532| | 2015-7-12 10:35 | 只看该作者
ISR里面不是重新发送了数据么,那发完了还不是应该进来?而且ISR里面还设什么enable,一看就是乱来。小白不怕,怕不思考的小白。

使用特权

评论回复
板凳
donsbin|  楼主 | 2015-7-12 11:31 | 只看该作者
NE5532 发表于 2015-7-12 10:35
ISR里面不是重新发送了数据么,那发完了还不是应该进来?而且ISR里面还设什么enable,一看就是乱来。小白不 ...

不好意思,受教了。改了下还是这种情况。

INTERRUPT_HANDLER(Uart_TX_IRQHandler,27)
{
  if (flag)        
  {
      USART_SendData8(USART1,(unsigned char)TxBuff[txbtm++]);
      if(txbtm > 10)
       {
            flag = 0;
            txbtm  = 0;
       }
  }
  USART_ClearITPendingBit(USART1,USART_IT_TC);
  //USART_ITConfig(USART1,USART_IT_TC,ENABLE);
}

使用特权

评论回复
地板
NE5532| | 2015-7-12 12:43 | 只看该作者
txbtm是全局变量么?把这个变量通过串口发出来看,在变化么?

使用特权

评论回复
5
冰河w| | 2015-7-12 13:15 | 只看该作者
楼主对程序理解的不是很深入呀

使用特权

评论回复
6
donsbin|  楼主 | 2015-7-12 13:47 | 只看该作者
NE5532 发表于 2015-7-12 12:43
txbtm是全局变量么?把这个变量通过串口发出来看,在变化么?

自己配了下寄存器,可以了。
原因还没找到,不过还是谢谢

使用特权

评论回复
7
XC456| | 2015-7-12 14:39 | 只看该作者
硬件电路确定没有问题吗?改下触发方式看看,标志位什么的

使用特权

评论回复
8
donsbin|  楼主 | 2015-7-12 14:51 | 只看该作者
XC456 发表于 2015-7-12 14:39
硬件电路确定没有问题吗?改下触发方式看看,标志位什么的

我用官方的库函数,查询发送,中断接收都是可以的。
都是如果存在初始化使能发送中断,就会不停进入串口发送中断服务函数。

使用特权

评论回复
9
lgq1542380129| | 2015-7-12 17:23 | 只看该作者
donsbin 发表于 2015-7-12 14:51
我用官方的库函数,查询发送,中断接收都是可以的。
都是如果存在初始化使能发送中断,就会不停进入串口 ...

楼主初始化的时候,清发送标志位看看呢。

使用特权

评论回复
10
尤彼卡| | 2015-7-12 22:17 | 只看该作者
标志位是不是每次都得清

使用特权

评论回复
11
feilusia| | 2015-7-13 05:44 | 只看该作者
usart_it_tc 楼主,这个是啥

使用特权

评论回复
12
XC456| | 2015-7-13 08:37 | 只看该作者
donsbin 发表于 2015-7-12 14:51
我用官方的库函数,查询发送,中断接收都是可以的。
都是如果存在初始化使能发送中断,就会不停进入串口 ...

中断标志位及时清除了吗?

使用特权

评论回复
13
donsbin|  楼主 | 2015-7-13 09:29 | 只看该作者
feilusia 发表于 2015-7-13 05:44
usart_it_tc 楼主,这个是啥

TC:发送完成
当包含有数据的一帧发送完成后,由硬件将该位置位。如果UART_CR2中的TCIEN为1,则产生中断。

使用特权

评论回复
14
donsbin|  楼主 | 2015-7-13 09:37 | 只看该作者
我看论坛里有人说过:
TXE:发送数据寄存器空    触发中断
TC:发送完成                触发中断
而我使能的是发送完成触发中断

USART_ITConfig(USART1,(USART_IT_RXNE|USART_IT_TC),ENABLE);  //使能发送接收中断

中断标识我没进一次都是清除的。

USART_ClearITPendingBit(USART1,USART_IT_TC);

更有帖子里说使能发送中断就是要一直触发的,不发送就关闭中断。
:dizzy:准备先试试看吧

使用特权

评论回复
15
feilusia| | 2015-7-13 11:21 | 只看该作者
donsbin 发表于 2015-7-13 09:29
TC:发送完成
当包含有数据的一帧发送完成后,由硬件将该位置位。如果UART_CR2中的TCIEN为1,则产生中断 ...

USART_ITConfig(USART1,(USART_IT_RXNE|USART_IT_TC),ENABLE);  //使能发送接收中断
为啥需要“USART_IT_TC”?

使用特权

评论回复
16
donsbin|  楼主 | 2015-7-13 11:27 | 只看该作者
问题已解决!感谢大家的帮助。:D

使用特权

评论回复
17
feilusia| | 2015-7-13 11:30 | 只看该作者
donsbin 发表于 2015-7-13 11:27
问题已解决!感谢大家的帮助。

恭喜~分享一下解决办法吧

使用特权

评论回复
18
donsbin|  楼主 | 2015-7-13 11:37 | 只看该作者
feilusia 发表于 2015-7-13 11:30
恭喜~分享一下解决办法吧

14楼我已经说明了问题。两个中断选一个使用

使用特权

评论回复
19
wjl520tyy| | 2017-9-15 14:09 | 只看该作者
您好,我想问一下,你这个是怎么实现发送中断的
请求代码

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

96

帖子

2

粉丝