搜索
bottom↓
回复: 6

STM32+IAR+UCOS下的中断问题

[复制链接]

出0入0汤圆

发表于 2010-7-28 23:56:13 | 显示全部楼层 |阅读模式
先说说,几个关键函数:
bsp_int.c提供几个关键的中断操作函数:
void  BSP_IntDis        (CPU_DATA  int_id)         //关闭指定中断
void  BSP_IntDisAll    (void)                               //关闭所有中断
void  BSP_IntEn         (CPU_DATA  int_id)         //使能指定中断
void  BSP_IntVectSet (CPU_DATA       int_id,
CPU_FNCT_VOID  isr)  //用这个函数把用户编写的中断函数的首地址放在中断入口处.
中断发生后,系统调用用户中断函数.
void  BSP_IntPrioSet  (CPU_DATA    int_id,
CPU_INT08U  prio)        //设置中断优先级

实例说明如何用上面的函数:
在app_vect-v5.c中编写串口1中断服务函数:static void  BSP_IntHandlerUSART1 (void)  

执行以下三个函数完成串口1中断配置:
BSP_IntVectSet(BSP_INT_ID_USART1, BSP_IntHandlerUSART1);
BSP_IntPrioSet(BSP_INT_ID_USART1,1);   
BSP_IntEn(BSP_INT_ID_USART1);

使用uC/OS编写中断函数和使用STM32硬件函数库编写中断函数是不同的,个人推荐使用uC/OS提供的函数编写中断。
---------------------------------------------------------------------------------------------------------------
以上是网友对这个的解释,
而我对这个BSP_IntHandlerUSART1不理解,这个函数是要用作者移植好的中断入口函数,还是要自己定义,网友指的是入口,
但我在调试程序的时候,外部中断和RTC中断都是自己定义的,都可以用,
而串口中断部分,发送可以发送,但是就是进入不了串口中断函数?
问下这个函数是自己定义还是用中断入口函数?还有串口你们碰到这个问题吗?
有用过的,或者知道原理的能否给解释下。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2010-7-29 00:21:29 | 显示全部楼层
个人愚见,我的例程里不用ucos的中断设置和中断服务,反而用st的库比较方便,就像你的外部中断和RTC中断能正常工作一样!
当然中断的入口肯定是重要的,简单来说必须把你的中断服务程序挂到中断向量表里去,例如下面:
    BSP_IntHandlerUSART1,   /* 53, INTISR[ 37]  USART1 Global Interrupt.            */
我的在app_vect_v5.c文件中,你的中断服务程序至少要和向量表里的名称一样,或者把这个名字换成你自己的都行,
还有要把BSP_int.c文件中同名的函数定义注释掉,不然会冲突!你无法进usart中断也可能是这个问题!
当然,要能够进中断还有很多地方需要设置,比如开放中断、设置级别、允许中断等等,
在ucos中重要的地方是一定让SysTick为最高优先级,PendSV为最低即可!
其他的资源中断安排在之间就好!
不知这样说明白了没有?

出0入0汤圆

 楼主| 发表于 2010-7-29 12:28:16 | 显示全部楼层
究其矛盾的原因有2个,
一个是因为网上的网友说用中断入口函数,
二是我看原作者的UC/PROBE里面是自己定义的,所以自己在调试的时候产生矛盾,
现在我用到的是RTC中断,外部中断,串口接收中断,
都是用自己定义的,今天调试了下,是由于USART_ITConfig( USART1, USART_IT_RXNE, ENABLE )没开起,
导致只能发送,接收时进不了接收中断。
----------------------------------------------------------------------------------------------
现在遇到新的问题,就是
RTC中断,外部中断,串口接收中断
优先级别分别为,6,5,4,
开机正常,为什么外部中断一来,就死机了呢

出0入0汤圆

发表于 2011-11-5 12:06:54 | 显示全部楼层
同问,我现在也是遇到串口接收中断就死,郁闷中

出0入0汤圆

发表于 2011-12-28 22:14:45 | 显示全部楼层
回复【楼主位】mcu520
-----------------------------------------------------------------------

BSP_IntHandlerUSART1不理解

=>不对啊,应该是USART1_IRQHandler()要与启动文件里面 的中断入口地址名    相同。

但我在调试程序的时候,外部中断和RTC中断都是自己定义的,都可以用,

=>你这个中断 没有受系统管理吧。

出0入0汤圆

发表于 2012-5-15 21:12:59 | 显示全部楼层
这个确实比较权威,解释的比较详细……

出0入0汤圆

发表于 2012-5-18 15:33:28 | 显示全部楼层
不错不错
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 02:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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