打印

STM32 中断学习

[复制链接]
2454|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
machunshui|  楼主 | 2009-3-3 14:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CM3可以实现256个异常和中断,

其中异常占用16个向量位置,

中断占用占用240个向量位置.

STM32作为一种具体的芯片,

实现了16个异常(其中6个保留),

实现了60个中断,

所以就有两个中断设置使能寄存器ISER0和ISER1,

每个可以控制32个中断的使能,

也有两个中断清除寄存器ICER0和ICER1.


例如RTC中断,向量位置为3,即RTC向量地址为4*(16+3)= 0x4C位置.

要实现RTC中断处理,

首先在启动文件中0x4C位置放入RTC_IRQHandler()函数的首地址,(keil编译器自动生成)

然后设置ISER0 |= (0x01 << 3);即可.



实际上CM3的中断使用远比arm7简单,

可是由于ST和luminary都推行库,手册里面也不提中断寄存器,

我们看到的库例子,却非常繁杂,一个简单的中断实现都让我们看半天.






沙发
香水城| | 2009-3-3 21:51 | 只看该作者

哈哈,不是中断学习,是学习中断

顺序很重要的~~~~~

使用特权

评论回复
板凳
machunshui|  楼主 | 2009-3-3 23:21 | 只看该作者

是学习stm32中断之后继续stm32学习

是学习stm32中断之后继续stm32学习

今天看了rtc例子,
发现stm32的RTC还是非常烦杂的,如果不是之前看过手册,
根本就看不懂,
这一点远不如lpc2000的RTC易用.

使用特权

评论回复
地板
myfaith| | 2009-3-6 12:04 | 只看该作者

我不用想用库

自己搞个外部中断搞两三天还没搞好,不用库的中断该如何做?

使用特权

评论回复
5
machunshui|  楼主 | 2009-3-6 13:07 | 只看该作者

简单描述

void InitExti0()
{
配置外部中断0,

EXTI->IMR |= 0x01;//取消外部中断0屏蔽未
NVIC->ISER[0] |= (0x01 << 6);//设置中断使能寄存器,使能6号中断,即外部中断0中断
}


void EXTI0_IRQHandler(void)//中断处理函数,函数名称由启动汇编文件定义决定
{
............
}

void main()
{
...
InitExti0();
...

while(1)
{
;
}

}

使用特权

评论回复
6
yihanqing| | 2009-3-9 16:29 | 只看该作者

谢谢

这么一说就很明白了,
和51很象嘛....

使用特权

评论回复
7
skyfight| | 2009-3-13 14:24 | 只看该作者

我也发现库不好用

  觉得写的很繁琐

使用特权

评论回复
8
渤海三叠浪| | 2009-4-2 13:49 | 只看该作者

顶一下

使用特权

评论回复
9
jlwg| | 2009-4-5 12:56 | 只看该作者

说库不好用的是还没入门的人士

库把寄存器操作的一些繁琐的部分给封装了,如果您不用库,也就是说您觉得您写的一定会比厂家提供的好。厂家的专门有经验丰富的工程师对自己的cpu写的封装库,并且一直在不断完善。
 说实在的,stm32的库写得真得很不错。您要是觉得库不好用的话,您自己写的也不见得怎么高明。
  为什么有些人觉得库不好用?个人觉得,stm32是款很优秀的cpu,但是stm32整个系统在设计之初的寄存器的规划不是很恰当。导致了现在软件实现的复杂。但是cpu已经设计成这样了,那么我们该用现成的库还是要用。傻子才不走捷径。

使用特权

评论回复
10
smallfishyjt| | 2009-4-12 01:32 | 只看该作者

版本升级兼容问题

我到是觉得库里面的函数很好用
不用我去操作里面的寄存器了
并且很直观 通过函数名和参数就能够知道配置的是什么 
只是有点怀疑库函数的准确性呵呵

有一点我不是很明白 就是每次进行版本升级时为什么库函数无法向下兼容
这样导致升级前的程序就需要逐一去修改 重新测试
当我从3.20升级到3.40时修改以前的程序就花费了我两天的时间 那个郁闷啊

使用特权

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

本版积分规则

153

主题

3224

帖子

4

粉丝