[技术问答] N76E003 双串口打开中断接收问题有问题

[复制链接]
1538|15
 楼主 | 2018-1-16 19:37 | 显示全部楼层 |阅读模式
最近使用N76E003的usart0  和 usart1开启中断接收数据,  遇到个问题如果使用usart0接收数据,usart1发送数据到PC端,程序毫无问题能稳定运行。    但是如果使用usart1接收数据,usart0发送数据到PC端,usart1只能接收一次数据过一段时间程序就飞了,这个时候如果把usart0的中断关掉 程序又没问题。  而且有点坑的是 片上调试功能使用的就是usart1的引脚,所以不能通过仿真定位问题        整个程序只是在吧发送和接收的串口对调了, 想问下是不是这款芯片usart1 和usart 0不能同时打开中断?
| 2018-1-16 21:32 | 显示全部楼层
使用一个串口就可以同时完成发送和接收啊,你怎么还两个,分别使用了一路线

使用特权

评论回复

评论

玛尼玛尼哄 2019-8-14 20:55 回复TA
@GWQ666 :没看例子吧。 
GWQ666 2019-8-14 16:08 回复TA
怎么用一个串口同时收发啊,同一个串口的话,怎么判断是发送中断还是接受中断。 
| 2018-1-17 10:38 | 显示全部楼层
一般都是用串口1作为跟电脑通信的接口。

使用特权

评论回复
| 2018-1-17 22:06 | 显示全部楼层
我记得有例子是同时开了两个串口啊。

使用特权

评论回复
| 2018-1-17 22:47 | 显示全部楼层
同时中断,需要考虑优先级吧。

使用特权

评论回复
| 2018-1-18 14:05 | 显示全部楼层
一般这种相同的外设,同时开最难搞的。

使用特权

评论回复
 楼主 | 2018-1-22 22:43 | 显示全部楼层
捉虫天师 发表于 2018-1-17 22:06
我记得有例子是同时开了两个串口啊。

有例子吗  求资料呀

使用特权

评论回复
 楼主 | 2018-1-22 22:44 | 显示全部楼层
heisexingqisi 发表于 2018-1-17 22:47
同时中断,需要考虑优先级吧。

这个还没考虑到   谢谢啦 我去看看

使用特权

评论回复
 楼主 | 2018-1-23 00:10 | 显示全部楼层
听了前面几位的回答,今天重新修改了下程序,发现是自己程序的问题      我使用usart0和usart1  使用的是官方的例子 用的V1.0.4版本。因为有使用发送函数所以TI的清除是没有放在中断里面做的,这样会导致数据发送后程序可能还一直卡在中断里面不会出来,所以我自己增加了一个标志位来判别是否清除了发送中断。usart0  和usart1 都使用的一样的方法。    可能是stm32写多了,可以单独使能发送和接收中断每太注意到这个
  1. bit usart1_ti = 0;
  2. void Send_Data_To_UART1 (UINT8 c)
  3. {
  4.     TI_1 = 0;
  5.         usart1_ti = 0;
  6.     SBUF_1 = c;
  7.     while(usart1_ti==0);
  8. }

  9. void Send_Str_To_UART1(UINT8 *str)
  10. {
  11.         while(*str != 0) {
  12.                 Send_Data_To_UART1(*str);
  13.                 str++;
  14.         }
  15. }

  16. void Send_Str_None_To_UART1(UINT8 *str,UINT8 len)
  17. {
  18.         while(len > 0) {
  19.                 Send_Data_To_UART1(*str);
  20.                 str++;
  21.                 len--;
  22.         }
  23. }


  24. /**
  25. * FUNCTION_PURPOSE: serial interrupt, echo received data.
  26. * FUNCTION_INPUTS: P0.7(RXD) serial input
  27. * FUNCTION_OUTPUTS: P0.6(TXD) serial output
  28. */
  29. void SerialPort1_ISR(void) interrupt 15
  30. {
  31.     if (RI_1==1)
  32.     {                                       /* if reception occur */
  33.         clr_RI_1;                             /* clear reception flag for next reception */
  34.         _GPS_USART_IRQHandler(SBUF_1);
  35.     }
  36.         if(TI_1 ==1) {
  37.                 clr_TI_1;
  38.                 usart1_ti = 1;
  39.         }
  40. }
复制代码

使用特权

评论回复
| 2019-8-14 16:35 | 显示全部楼层
我们有中微cms8s003,带双路运放和比较器,可以替换其它品牌003,兼容,有例程、技术支持,样品和开发工具免费送,整个市场价格无敌!2656332893

使用特权

评论回复
| 2019-8-14 20:55 | 显示全部楼层
  1. void SerialPort1_ISR(void) interrupt 15
  2. {
  3.     if (RI_1==1)
  4.     {                                       /* if reception occur */
  5.         clr_RI_1;                             /* clear reception flag for next reception */
  6.         UART_BUFFER[u16CNT] = SBUF_1;
  7.         u16CNT ++;
  8.                                 riflag =1;
  9.     }
  10.     if(TI_1==1)
  11.     {
  12.         clr_TI_1;                             /* if emission occur */
  13.     }
  14. }
复制代码

使用特权

评论回复
| 2019-8-14 20:56 | 显示全部楼层
虽然都是串口中断,但是判断的标志是不同的,一个是RI,一个是TI,一个判断接收中断,一个判断是否发送中断。

使用特权

评论回复
| 2019-8-17 10:03 | 显示全部楼层
中断标志是不同的。

使用特权

评论回复
| 2019-8-18 15:24 | 显示全部楼层
不觉不明 发表于 2018-1-22 22:44
这个还没考虑到   谢谢啦 我去看看

这个不需要特别注意,芯片上电默认模式中,串口0和串口1中断优先级本来就不一样,串口0=10,串口1=16,不会打架。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表