OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4091|回复: 9

UART3不进中断 大神们看下啊 指点

[复制链接]

10

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2017-3-27
在线时间
66 小时
发表于 2017-6-13 18:01:11 | 显示全部楼层 |阅读模式
10金钱
UART可以发送单个字符,当加入中断后 无法进入中断 代码如下 :void USART3_IRQHandler(void)                        //′®¿ú3ÖD¶Ï·tÎñ3ìDò
{
        u8 Res;
#if SYSTEM_SUPPORT_OS                
        OSIntEnter();   
#endif
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
        {
                Res =USART_ReceiveData(USART3);       
               
                if((USART3_RX_STA&0x8000)==0)
                {
                        if(USART3_RX_STA&0x4000)
                        {
                                if(Res!=0x0a)USART3_RX_STA=0;
                                else USART3_RX_STA|=0x8000;         
                        }
                        else //»1ûêÕμ½0X0D
                        {       
                                if(Res==0x0d)USART3_RX_STA|=0x4000;
                                else
                                {
                                        USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ;
                                        USART3_RX_STA++;
                                        if(USART3_RX_STA>(USART_REC_LEN-1))USART3_RX_STA=0;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ          
                                }                 
                        }
                }                    
  }
#if SYSTEM_SUPPORT_OS         //èç1ûSYSTEM_SUPPORT_OSÎaÕæ£¬ÔòDèòaÖ§3ÖOS.
        OSIntExit();                                                                                           
#endif
}

#endif


代码几乎跟UART1的中断函数一样,只是把接收状态标志改了USART3_RX_STA,缓冲区改为USART3_RX_BUF;别的地方基本没变。跟中断相关的操作 我也基本配置了
#define EN_USART3_RX                         1        //定义使能接收
在串口3中还包含了
#if EN_USART3_RX       
        USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//¿aÆôÏà1ØÖD¶Ï

        //Usart1 NVIC ÅäÖÃ
  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;               
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;               
        NVIC_Init(&NVIC_InitStructure);       
#endif


没办法进中断,大神看下啊。
在线等,实在是搞不明白。。。


最佳答案

查看完整内容[请看2#楼]

http://www.openedv.com/forum.php?mod=viewthread&tid=82521&extra= 看这个贴
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-6-13 18:01:12 | 显示全部楼层
回复

使用道具 举报

6

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2014-7-18
在线时间
23 小时
发表于 2017-6-13 18:13:55 | 显示全部楼层
代码都没给全,时钟打开了吗,端口对不对..
回复

使用道具 举报

10

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2017-3-27
在线时间
66 小时
 楼主| 发表于 2017-6-13 18:28:42 | 显示全部楼层
都对,不用中断的话,主函数
USART_SendData(USART3,'c');
可以实现,但是加入中断的话,源代码的通信协议以0D 0A结尾
我这里没变,我编写了一个测试函数,
void ceshi (   )
{
           u8 len1,j;
                if(USART3_RX_STA&0x8000)
                {                                          
                        len1=USART3_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
                        if(USART3_RX_BUF[0]==0x13)
                        {
           USART_SendData(USART3,'b');
                                       
                  }
                        USART3_RX_STA=0;       
   }
}
用电脑定时发送13 0d 0a
在主函数调用这个函数
发现没进入中断,大神指点下啊
回复

使用道具 举报

10

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2017-3-27
在线时间
66 小时
 楼主| 发表于 2017-6-13 18:44:36 | 显示全部楼层
VIP小太子456 发表于 2017-6-13 18:13
代码都没给全,时钟打开了吗,端口对不对..


都对,不用中断的话,主函数
USART_SendData(USART3,'c');
可以实现,但是加入中断的话,源代码的通信协议以0D 0A结尾
我这里没变,我编写了一个测试函数,
void ceshi (   )
{
           u8 len1,j;
                if(USART3_RX_STA&0x8000)
                {                                          
                        len1=USART3_RX_STA&0x3fff;//μÃμ½′Ë′νóêÕμ½μÄêy¾Y3¤¶è
                        if(USART3_RX_BUF[0]==0x13)
                        {
           USART_SendData(USART3,'b');
                                       
                  }
                        USART3_RX_STA=0;        
   }
}
用电脑定时发送13 0d 0a
在主函数调用这个函数
发现没进入中断,大神指点下啊
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-6-13 18:50:01 | 显示全部楼层
要学会论坛搜索
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-6-13 18:53:25 | 显示全部楼层
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
后面还有一个串口初始化来着,要加上  类似NVIC_Init(&NVIC_InitStructure);  
回复

使用道具 举报

10

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2017-3-27
在线时间
66 小时
 楼主| 发表于 2017-6-14 08:15:52 | 显示全部楼层
执迷 发表于 2017-6-13 18:53
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
后面还有一个串口初始化来着,要加上  类似NVIC_Init(& ...

老铁  加了, 串口发单个字符可以发送,用中断的话就无法进入中断,
回复

使用道具 举报

10

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2017-3-27
在线时间
66 小时
 楼主| 发表于 2017-6-14 18:22:20 | 显示全部楼层
Sun_Fly 发表于 2017-6-13 18:01
http://www.openedv.com/forum.php?mod=viewthread&tid=82521&extra=
看这个贴

兄弟我串口可以用,就中断有问题, 看下我帖子内容,实在是不知道怎么回事
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2018-4-12
在线时间
8 小时
发表于 2018-5-3 01:01:20 | 显示全部楼层
想问下楼主最后是怎么解决的,我和你的问题一样……
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 11:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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