打印
[PIC®/AVR®/dsPIC®产品]

无法进入串口接收中断

[复制链接]
3339|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yinxiangh|  楼主 | 2020-6-29 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pzsh 于 2021-9-11 18:59 编辑

串口的发送是正常的,但是用串口助手发送数据给单片机,无法进入串口接收中断。

使用特权

评论回复
沙发
chenho| | 2020-6-29 23:14 | 只看该作者

楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
yinxiangh|  楼主 | 2020-6-29 23:16 | 只看该作者
在线调试能发现,只有烧写程序开始第一次,能进入接收中断。
具体什么原因引起,实在不清楚。

使用特权

评论回复
地板
yufe| | 2020-6-29 23:18 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
5
yinxiangh|  楼主 | 2020-6-29 23:21 | 只看该作者
void USART_Init(uint16 baud)//设置串口为8bit,1stop bit,0奇偶校验
{
    RPINR18bits.U1CTSR = 0;
    RPINR18bits.U1RXR = 17;//配置RP17为串口1的RxD引脚,实际未用此功能
    RPOR5bits.RP10R = 3;//配置RP10为串口1的TxD引脚

    U1BRG = baud;

    U1MODEbits.USIDL = 1;//模块空闲模式下不工作
    U1MODEbits.UEN   = 0;//使能U1TX,U1RX,禁用CTS、RTS引脚
#ifdef USART_HIGH_SPEED
    U1MODEbits.BRGH = 1;//高速模式
#endif
    U1MODEbits.PDSEL = 0;//8位数据位,无奇偶校验
    U1MODEbits.STSEL = 0;//1停止位
        
   
    U1MODEbits.ABAUD = 0;
    U1STAbits.URXISEL = 0;//缓冲器收到数据马上中断
    IFS0bits.U1RXIF = 0;//中断标志清零
    IEC0bits.U1RXIE = 1;//UART1接收器中断允许
    IPC2bits.U1RXIP = 7;
   
    U1MODEbits.UARTEN = 1;//使能串口
   
    U1STAbits.UTXEN = 1;//使能发送

}
初始化代码如上。

使用特权

评论回复
6
wangpe| | 2020-6-29 23:22 | 只看该作者
你的中断程序呢?

使用特权

评论回复
7
yinxiangh|  楼主 | 2020-6-29 23:25 | 只看该作者
void _ISR _U1RXInterrupt(void)
{
    static uint8 i = 0;
    //static uint8 command_flag = 0;
//    Timer1_Stop();
    IEC0bits.U1RXIE = 0;//UART1接收器中断关闭
    IFS0bits.U1RXIF = 0;//中断标志清零
    if(U1STAbits.OERR == 1){//缓冲器溢出
        U1STAbits.OERR = 0;
    }
    if(U1STAbits.URXDA == 1)//缓冲器有数据
    {
        Data_URX = U1RXREG;//获取数据,这句话非常重要
        USART_TXD_Char(0xAB);
     }
    IEC0bits.U1RXIE = 1;//UART1接收器中断允许
}
你好,这个就是中断程序

使用特权

评论回复
8
yinxiangh|  楼主 | 2020-6-29 23:28 | 只看该作者
有人知道为什么吗?

使用特权

评论回复
9
wangpe| | 2020-6-29 23:32 | 只看该作者

U1MODEbits.USIDL = 1;//模块空闲模式下不工作
改为0试过吗?

使用特权

评论回复
10
yinxiangh|  楼主 | 2020-6-29 23:34 | 只看该作者
你好,有试过,也是一样,进入不了,只有设置环回模式下,能工正常进入。

使用特权

评论回复
11
gongche| | 2020-6-29 23:36 | 只看该作者
串口挂了吧?

使用特权

评论回复
12
happy_10| | 2020-6-29 23:38 | 只看该作者
不会是输入与输出方向没有初始化?

使用特权

评论回复
13
yinxiangh|  楼主 | 2020-6-29 23:41 | 只看该作者
解决了,不是软件的问题,是硬件问题。

使用特权

评论回复
14
tian111| | 2020-6-29 23:44 | 只看该作者
我也出现这种问题,PIC24FJ256   我的是用串口3   改用串口1 就没问题。 不知楼主的啥问题解决?

使用特权

评论回复
15
zwll| | 2020-6-29 23:47 | 只看该作者
lz能不能说一下硬件啥问题,我遇到和你一样的情况,自发自收可以,但是无法收到上位机的数据

使用特权

评论回复
16
stly| | 2020-6-29 23:49 | 只看该作者
问题解决了吗?可以分享一下吗?

使用特权

评论回复
17
yinxiangh|  楼主 | 2020-6-29 23:51 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
18
CoolSilicon| | 2020-6-30 12:20 | 只看该作者
1. 芯片是什么型号?
2. IO口初始化是否 为 数字口, RX还需要设置为输入
3. 有无PPS?  端口是否印射到UART 的rx上.
4. UART是使用的 polling?还是中断?
5. polling 检查接受RX IF是否置位?
6, 若为中断方式, 是否开全局中断?是否开外设中断..
........

使用特权

评论回复
19
sdk303| | 2021-9-2 17:46 | 只看该作者
zwll 发表于 2020-6-29 23:47
lz能不能说一下硬件啥问题,我遇到和你一样的情况,自发自收可以,但是无法收到上位机的数据
...

我也遇到和你一样的问题,自收自发数据可以,上位机数据收不到,请问你后来怎么解决的?

使用特权

评论回复
20
pzsh| | 2021-9-11 18:59 | 只看该作者
用MCC生成的代码对照看一下

使用特权

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

本版积分规则

723

主题

7134

帖子

2

粉丝