mcu520 发表于 2010-7-28 23:56:13

STM32+IAR+UCOS下的中断问题

先说说,几个关键函数:
bsp_int.c提供几个关键的中断操作函数:
voidBSP_IntDis      (CPU_DATAint_id)         //关闭指定中断
voidBSP_IntDisAll    (void)                               //关闭所有中断
voidBSP_IntEn         (CPU_DATAint_id)         //使能指定中断
voidBSP_IntVectSet (CPU_DATA       int_id,
CPU_FNCT_VOIDisr)//用这个函数把用户编写的中断函数的首地址放在中断入口处.
中断发生后,系统调用用户中断函数.
voidBSP_IntPrioSet(CPU_DATA    int_id,
CPU_INT08Uprio)      //设置中断优先级

实例说明如何用上面的函数:
在app_vect-v5.c中编写串口1中断服务函数:static voidBSP_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中断都是自己定义的,都可以用,
而串口中断部分,发送可以发送,但是就是进入不了串口中断函数?
问下这个函数是自己定义还是用中断入口函数?还有串口你们碰到这个问题吗?
有用过的,或者知道原理的能否给解释下。

dy008 发表于 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为最低即可!
其他的资源中断安排在之间就好!
不知这样说明白了没有?

mcu520 发表于 2010-7-29 12:28:16

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

gdf78 发表于 2011-11-5 12:06:54

同问,我现在也是遇到串口接收中断就死,郁闷中

peixiuhui 发表于 2011-12-28 22:14:45

回复【楼主位】mcu520
-----------------------------------------------------------------------

BSP_IntHandlerUSART1不理解

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

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

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

shanyuanle 发表于 2012-5-15 21:12:59

这个确实比较权威,解释的比较详细……

buttonsjj 发表于 2012-5-18 15:33:28

不错不错
页: [1]
查看完整版本: STM32+IAR+UCOS下的中断问题