你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32使用3个串口中断和1个外部中断的问题

[复制链接]
alai-1031494 提问时间:2017-10-30 16:20 /
使用USART1发送,USART2接收,USART3发送和接收,另外使用PE2作为外部中断线。
在NVIC_Configuration()中当注释钓USART3的设置时,程序运行都正常。但是不注释的时候,USART1的发送就没有了,很奇怪,哪个高人给分析分析。
void NVIC_Configuration(void)
{
        NVIC_InitTypeDef  NVIC_InitStructure;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        //USART1
        NVIC_InitStructure.NVIC_IRQChannel                                                                          = USART1_IRQn;//ÉèÖÃIRQͨµÀ
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//ÉèÖÃÏÈÕ¼ÓÅÏȼ¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority                          = 1;//ÉèÖôÓÓÅÏȼ¶       
        NVIC_InitStructure.NVIC_IRQChannelCmd                                                          = ENABLE;//ʹÄÜ»òʧÄÜIRQͨµÀ
        NVIC_Init(&NVIC_InitStructure);       
       
        //USART2
        NVIC_InitStructure.NVIC_IRQChannel                                                                          = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority                          = 2;
        NVIC_InitStructure.NVIC_IRQChannelCmd                                                          = ENABLE;
        NVIC_Init(&NVIC_InitStructure);       

        //USART3
/*        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel                                                                          = USART3_IRQn;//ÉèÖÃIRQͨµÀ
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//ÉèÖÃÏÈÕ¼ÓÅÏȼ¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority                          = 3;//ÉèÖôÓÓÅÏȼ¶       
        NVIC_InitStructure.NVIC_IRQChannelCmd                                                          = ENABLE;//ʹÄÜ»òʧÄÜIRQͨµÀ
        NVIC_Init(&NVIC_InitStructure);*/



//Int2PS
        NVIC_InitStructure.NVIC_IRQChannel                                                                          = EXTI2_IRQn;//ÉèÖÃIRQͨµÀ
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//ÉèÖÃÏÈÕ¼ÓÅÏȼ¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority                          = 0;//ÉèÖôÓÓÅÏȼ¶       
        NVIC_InitStructure.NVIC_IRQChannelCmd                                                          = ENABLE;//ʹÄÜ»òʧÄÜIRQͨµÀ
        NVIC_Init(&NVIC_InitStructure);       
}


S2_COMKA-4D.zip (5.51 MB, 下载次数: 23)
收藏 1 评论3 发布时间:2017-10-30 16:20

举报

3个回答
无薪税绵 回答时间:2017-11-23 16:34:47
看你代码中,USART3的中断没有做处理。
你添加处理代码,看看能不能进入中断。

如果不行,试试提升USART3的中断优先级。
如果还是不行,试试注释串口1和2的代码,
先试串口3,看正不正常。
正常了,再还原测试。

还有,
建议初始化串口后,用 USART_GetITStatus 函数,
把 发送完成标志 USART_FLAG_TC 清一下。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

聪聪 回答时间:2017-11-24 10:54:15
楼主,看了下你的串口中断处理函数,我的建议是你USART1发送中断完全没必要,amount最大好像72来着,发送能不用中断就不用。用类似下面这种函数发送就好了,希望对你有帮助
  1. void USART3_SendString(u8 *s)
  2. {
  3.         while(*s)
  4.         {
  5.                  USART_SendData(USART3,*s++);
  6.      while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);                    
  7.         }
  8. }
复制代码


评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

聪聪 回答时间:2017-11-24 10:59:30
刚函数发错了,你的数组里面有很多0x00。你试试这个函数
  1. void USART3_SendBuffer(u8 *s,u8 n)
  2. {
  3.         while(n--)
  4.         {
  5.                  USART_SendData(USART3,*s++);
  6.      while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);                    
  7.         }
  8. }
复制代码

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版