打印

STM32异常/中断怎么写?

[复制链接]
7103|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ATmega16|  楼主 | 2007-12-16 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32异常/中断怎么写?
比如说要写一个systick中断,怎么写?

最好不要改动stm32f10x_it.c和stm32f10x_vector.c
请问中断程序怎么写?
沙发
qihao| | 2007-12-16 15:07 | 只看该作者

比如要在 PWM中断中更新PWM 数据砸些??

使用特权

评论回复
板凳
ATmega16|  楼主 | 2007-12-16 15:10 | 只看该作者

有没有办法用SIGNAL(vecteor)来写中断?

有没有办法用SIGNAL(vecteor)来写中断?

使用特权

评论回复
地板
qihao| | 2007-12-16 15:23 | 只看该作者

I need an demo

使用特权

评论回复
5
香水城| | 2007-12-16 17:56 | 只看该作者

请问楼上两位看过那些ST提供的例子?

3楼讲的SIGNAL(vecteor)是什么?

下面这些文档和例子看过吗?这些是从浪淘沙的常见问题解答中抄来的:
  近20篇STM32应用笔记 —— STM32应用笔记汇总
  STM32的函数库和演示程序:包括函数库、USB开发套件、评估板程序和Flash Loader等 —— 点击这里浏览下载

[修改原因] 链接有误

使用特权

评论回复
6
qihao| | 2007-12-16 19:08 | 只看该作者

希望ST这里的服务不要以反问提问者这样的方式为主。

可以这么说,如果香水城的回答给我一个链接,我会马上去看,也许忍不住就跑办公室开干了。   要我去在海洋一样的资料里面去自己找,我只能等这年底的事情忙完后再说了,既是我的损失,也是你们的损失。

再说一个情况,除了没事的学生,真正单位里做主的,没有几个有空自己去慢慢找资料的。------多数情况是公司把资料送到手上也被扔到一个不知道的地方去了。

我也问问香水城,你们的文档里有PWM相关的吗? 我还真花了点时间去找,没有的!  你是不是自己也没看这些文档?



    我这些话比较**,从没在论坛里这么教训人过。  道理可不**。  希望你们做的更好,我们作为用户也能取得成功。

使用特权

评论回复
7
香水城| | 2007-12-16 19:33 | 只看该作者

楼上可能误会了,我只是想知道你看了哪些例子

我只是想知道你看了哪些例子,了解一下你是属于高手还是初学者,不想重复你已经知道的事情和例子,这样可以有的放矢,节省大家的时间;每个人都很忙,如果你是高手,我相信你不想我们在这里把你当成一窍不通的入门者吧。

如果你对这样的最简单提问感觉到冒犯了,那就请多包涵了,我必须了解你的真实需求是什么。

关于文档里是否有PWM相关的例子的问题,你可以在STM32的函数库所带的演示程序中找到。请看下面这个文件,这是所有演示程序的一个简要说明,你安装了STM32的函数库后,在根目录中有一个文件stm32lib_contents.htm与下述文件内容相同。PWM相关的例子在TIM中的Example4,和TIM1下的Example2。

打开stm32lib_contents.htm,找到我说的那一行,再点击该行即可进入相关例子的目录。
相关链接:https://bbs.21ic.com/upfiles/img/200712/20071216192222218.pdf

使用特权

评论回复
8
香水城| | 2007-12-16 22:10 | 只看该作者

为6楼的再做补充

因为你不愿意回答我在5楼的问题,只好认为你什么也没有看,什么也没有找。我在7楼所说的STM32的函数库所带的演示程序,可以在这个链接下载:
http://www.st.com/mcu/familiesdocs-110.html#Firmware

在Firmware栏目中的第一行,“ARM-based 32-bit MCU STM32F101xx and STM32F103xx firmware library”既是STM32的函数库和演示程序的安装包和说明文件。

使用特权

评论回复
9
qihao| | 2007-12-17 17:36 | 只看该作者

试过了,改常数可以看到希望的效果。

希望得到中断方式的demo。即在TIM1中断中刷新下一个周期的“占” 常数。

项目可以理解为:DC/AC逆变电源, 计划先做的是全桥驱动的。所以要在每次中断服务程序中,更改下一个周期的占空比。且是中心对齐方式。


另外:根据手册 72M,单时长为14nS。 为什么中文手册中说可以得到几十微秒的输出呢?是不建议把频率用到这么高吗?

昨天说话很不礼貌,见谅哈。

使用特权

评论回复
10
香水城| | 2007-12-17 17:59 | 只看该作者

9楼说:“根据手册72M,单时长为14nS”,请问是哪个手册?第

我不敢说所有的手册都看过了,如果能告知你说的是哪个手册?第几页?可能能够更快地找出问题所在。

网络中与现实世界一样,每个人都需要帮助,每个人都有心情好和不好的时候,大家的目的都是一致的——把工作做好并向老板交差;我们的工作做的不周之处还请朋友们指出并海涵,我们也为给您增添的麻烦道歉。

使用特权

评论回复
11
qihao| | 2007-12-17 19:42 | 只看该作者

TIM1 的工作频率不分频给TIM1

就是72M 72M的周期为13.88nS,亦即Tim1 的步长时间为这么多,可以生成最高32M,13.88nS占,13.88nS的空 的占空比的PWM输出。

现在需要的是 一个带 TIM1 中断入口的写法和在中断中更新占空数据的demo,

使用特权

评论回复
12
jessemok| | 2007-12-18 09:17 | 只看该作者

比如说要写一个systick中断,怎么写?

写中断函数要修改stm32f10x_it.c,可以不修改stm32f10x_vector.c。
比如说要写一个systick中断,怎么写?
//定义中断函数
void MySystick(void)
{
    ....
}
//加入到stm32f10x_it.c文件中
void SysTickHandler(void)
{
    MySystick();
}

使用特权

评论回复
13
jessemok| | 2007-12-18 10:12 | 只看该作者

TIM1中断入口的写法和在中断中更新占空数据的demo

我写过一个通过串口更改PWM周期和占空比的例子,修改了一下,有什么不正确的请指教。(main()函数自己添加)
//1.用户函数定义
u16 DutyCycle;

//定义TIM1 Channel1输出口
void GPIO_Configutation(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* GPIOA Configuration: Channel 1 Output */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure); 
  
}
//占空比 = (TIM1_Pulse = 0x800)/(TIM1_Period = 0xFFF + 1) = 0.5
void TIM1_Configuration(void)
{
    TIM1_TimeBaseInitTypeDef  TIM1_TimeBaseStructure;
    TIM1_OCInitTypeDef  TIM1_OCInitStructure;    
    TIM1_DeInit();

    /* Time Base configuration */
    TIM1_TimeBaseStructure.TIM1_Prescaler = 0x00;
    TIM1_TimeBaseStructure.TIM1_CounterMode = TIM1_CounterMode_Up;
    TIM1_TimeBaseStructure.TIM1_Period = 0xFFF;
    TIM1_TimeBaseStructure.TIM1_ClockDivision = 0x0;
    TIM1_TimeBaseStructure.TIM1_RepetitionCounter = 0x0;
    TIM1_TimeBaseInit(&TIM1_TimeBaseStructure);

    /* Channel 1 Configuration in PWM mode */
    TIM1_OCInitStructure.TIM1_OCMode = TIM1_OCMode_PWM2; 
    TIM1_OCInitStructure.TIM1_OutputState = TIM1_OutputState_Enable; 
    TIM1_OCInitStructure.TIM1_OutputNState = TIM1_OutputNState_Enable;                  
    TIM1_OCInitStructure.TIM1_Pulse = 0x800; 
    TIM1_OCInitStructure.TIM1_OCPolarity = TIM1_OCPolarity_Low; 
    TIM1_OCInitStructure.TIM1_OCNPolarity = TIM1_OCNPolarity_High;         
    TIM1_OCInitStructure.TIM1_OCIdleState = TIM1_OCIdleState_Set;
    TIM1_OCInitStructure.TIM1_OCNIdleState = TIM1_OCIdleState_Reset;          
    TIM1_OC1Init(&TIM1_OCInitStructure); 

    TIM1_ITConfig(TIM1_IT_Update,ENABLE);//TIM1更新中断使能(1)

    /* TIM1 counter enable */
    TIM1_Cmd(ENABLE);

    /* TIM1 Main Output Enable */
    TIM1_CtrlPWMOutputs(ENABLE);

}

//NVIC使能,开启TIM1更新中断,要配置两个地方(1)和(2)
void NVIC_Configuration(void)//(2)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);   

  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);

  /* TIM2 IRQ configuration Priority : 0 -------------------------------------*/
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);   
}

void RefreshDutyCycle(void)
{
    if(TIM1_GetITStatus(TIM1_IT_Update) != RESET)
    {
        DutyCycle = ...;//在此处修改数据
        TIM1->CCR1 = DutyCycle;//更新占空比
        TIM1_ClearITPendingBit(TIM1_IT_Update)//清除中断标志位
    }
}

//2.stm32f10x_it.c修改如下
void TIM1_UP_IRQHandler(void)
{
    RefreshDutyCycle();
}

使用特权

评论回复
14
浪淘沙| | 2007-12-18 10:27 | 只看该作者

12楼的做法可行

不可以不修改stm32f10x_vector.c,你加上一行不就是修改了这个文件了吗?只不过修改的很少。

谢谢13楼分享,我们还没有来得及做这样的Demo,大家都在忙巡回研讨会的事情。

使用特权

评论回复
15
qihao| | 2007-12-18 11:23 | 只看该作者

感谢13楼

把上午把  打完了就试验。

呵呵  蛮有趣的

使用特权

评论回复
16
jessemok| | 2007-12-18 12:21 | 只看该作者

大家都在忙巡回研讨会的事情

17号深圳的巡回,得了个STM32 primer,有时间拿来玩玩

使用特权

评论回复
17
jessemok| | 2007-12-18 12:23 | 只看该作者

不可以不修改stm32f10x_vector.c?

我从来不修改stm32f10x_vector.c的

使用特权

评论回复
18
hotpower| | 2007-12-18 13:04 | 只看该作者

应该研究研究stm32f10x_vector.c

使用特权

评论回复
19
jessemok| | 2007-12-18 13:29 | 只看该作者

应该研究研究stm32f10x_vector.c

同感,并且研究过。不过还没有明白多少

使用特权

评论回复
20
ATmega16|  楼主 | 2007-12-18 15:37 | 只看该作者

不知道IAR连接脚本能不能这样实现这样的功能?

不知道IAR连接脚本能不能这样实现这样的功能?  

vector.c里面连接时,如果在相应的中断向量处找不到对应的中断函数SIGNAL(vector), 
就把函数defauld_interrurt()连接到此处。 

使用特权

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

本版积分规则

109

主题

229

帖子

0

粉丝