STM32异常/中断怎么写?

yxc   2007-12-16 14:34 楼主
STM32异常/中断怎么写?
比如说要写一个systick中断,怎么写?

最好不要改动stm32f10x_it.c和stm32f10x_vector.c
请问中断程序怎么写?

回复评论 (19)

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

                                  
点赞  2007-12-16 15:07

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

                                 有没有办法用SIGNAL(vecteor)来写中断?
点赞  2007-12-16 15:10

I need an demo

                                  
点赞  2007-12-16 15:23

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

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

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

[修改原因] 链接有误
点赞  2007-12-16 17:56

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

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

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

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



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

点赞  2007-12-16 19:08

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

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

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

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

打开stm32lib_contents.htm,找到我说的那一行,再点击该行即可进入相关例子的目录。
相关链接:https://bbs.eeworld.com.cn/upfiles/img/200712/20071216192222218.pdf
点赞  2007-12-16 19:33

为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的函数库和演示程序的安装包和说明文件。
点赞  2007-12-16 22:10

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

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

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


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

昨天说话很不礼貌,见谅哈。
点赞  2007-12-17 17:36

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

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

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

TIM1 的工作频率不分频给TIM1

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

现在需要的是 一个带 TIM1 中断入口的写法和在中断中更新占空数据的demo,
点赞  2007-12-17 19:42

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

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

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();
}
点赞  2007-12-18 10:12

12楼的做法可行

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

谢谢13楼分享,我们还没有来得及做这样的Demo,大家都在忙巡回研讨会的事情。
点赞  2007-12-18 10:27

感谢13楼

把上午把  打完了就试验。

呵呵  蛮有趣的
点赞  2007-12-18 11:23

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

                                 17号深圳的巡回,得了个STM32 primer,有时间拿来玩玩
点赞  2007-12-18 12:21

不可以不修改stm32f10x_vector.c?

                                 我从来不修改stm32f10x_vector.c的
点赞  2007-12-18 12:23

应该研究研究stm32f10x_vector.c

                                  
点赞  2007-12-18 13:04

应该研究研究stm32f10x_vector.c

                                 同感,并且研究过。不过还没有明白多少
点赞  2007-12-18 13:29

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

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

vector.c里面连接时,如果在相应的中断向量处找不到对应的中断函数SIGNAL(vector), 
就把函数defauld_interrurt()连接到此处。 
点赞  2007-12-18 15:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复