STM32异常/中断怎么写?
比如说要写一个systick中断,怎么写?
最好不要改动stm32f10x_it.c和stm32f10x_vector.c
请问中断程序怎么写?
有没有办法用SIGNAL(vecteor)来写中断?
有没有办法用SIGNAL(vecteor)来写中断?
请问楼上两位看过那些ST提供的例子?
3楼讲的SIGNAL(vecteor)是什么?
下面这些文档和例子看过吗?这些是从浪淘沙的常见问题解答中抄来的:
近20篇STM32应用笔记 ——
STM32应用笔记汇总 STM32的函数库和演示程序:包括函数库、USB开发套件、评估板程序和Flash Loader等 ——
点击这里浏览下载[修改原因] 链接有误
希望ST这里的服务不要以反问提问者这样的方式为主。
可以这么说,如果香水城的回答给我一个链接,我会马上去看,也许忍不住就跑办公室开干了。 要我去在海洋一样的资料里面去自己找,我只能等这年底的事情忙完后再说了,既是我的损失,也是你们的损失。
再说一个情况,除了没事的学生,真正单位里做主的,没有几个有空自己去慢慢找资料的。------多数情况是公司把资料送到手上也被扔到一个不知道的地方去了。
我也问问香水城,你们的文档里有PWM相关的吗? 我还真花了点时间去找,没有的! 你是不是自己也没看这些文档?
我这些话比较操蛋,从没在论坛里这么教训人过。 道理可不操蛋。 希望你们做的更好,我们作为用户也能取得成功。
楼上可能误会了,我只是想知道你看了哪些例子
我只是想知道你看了哪些例子,了解一下你是属于高手还是初学者,不想重复你已经知道的事情和例子,这样可以有的放矢,节省大家的时间;每个人都很忙,如果你是高手,我相信你不想我们在这里把你当成一窍不通的入门者吧。
如果你对这样的最简单提问感觉到冒犯了,那就请多包涵了,我必须了解你的真实需求是什么。
关于文档里是否有PWM相关的例子的问题,你可以在STM32的函数库所带的演示程序中找到。请看下面这个文件,这是所有演示程序的一个简要说明,你安装了STM32的函数库后,在根目录中有一个文件stm32lib_contents.htm与下述文件内容相同。PWM相关的例子在TIM中的Example4,和TIM1下的Example2。
打开stm32lib_contents.htm,找到我说的那一行,再点击该行即可进入相关例子的目录。
相关链接:
https://bbs.eeworld.com.cn/upfiles/img/200712/20071216192222218.pdf
为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的函数库和演示程序的安装包和说明文件。
试过了,改常数可以看到希望的效果。
希望得到中断方式的demo。即在TIM1中断中刷新下一个周期的“占” 常数。
项目可以理解为:DC/AC逆变电源, 计划先做的是全桥驱动的。所以要在每次中断服务程序中,更改下一个周期的占空比。且是中心对齐方式。
另外:根据手册 72M,单时长为14nS。 为什么中文手册中说可以得到几十微秒的输出呢?是不建议把频率用到这么高吗?
昨天说话很不礼貌,见谅哈。
9楼说:“根据手册72M,单时长为14nS”,请问是哪个手册?第
我不敢说所有的手册都看过了,如果能告知你说的是哪个手册?第几页?可能能够更快地找出问题所在。
网络中与现实世界一样,每个人都需要帮助,每个人都有心情好和不好的时候,大家的目的都是一致的——把工作做好并向老板交差;我们的工作做的不周之处还请朋友们指出并海涵,我们也为给您增添的麻烦道歉。
TIM1 的工作频率不分频给TIM1
就是72M 72M的周期为13.88nS,亦即Tim1 的步长时间为这么多,可以生成最高32M,13.88nS占,13.88nS的空 的占空比的PWM输出。
现在需要的是 一个带 TIM1 中断入口的写法和在中断中更新占空数据的demo,
比如说要写一个systick中断,怎么写?
写中断函数要修改stm32f10x_it.c,可以不修改stm32f10x_vector.c。
比如说要写一个systick中断,怎么写?
//定义中断函数
void MySystick(void)
{
....
}
//加入到stm32f10x_it.c文件中
void SysTickHandler(void)
{
MySystick();
}
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();
}
12楼的做法可行
不可以不修改stm32f10x_vector.c,你加上一行不就是修改了这个文件了吗?只不过修改的很少。
谢谢13楼分享,我们还没有来得及做这样的Demo,大家都在忙巡回研讨会的事情。
感谢13楼
把上午把 打完了就试验。
呵呵 蛮有趣的
大家都在忙巡回研讨会的事情
17号深圳的巡回,得了个STM32 primer,有时间拿来玩玩
不可以不修改stm32f10x_vector.c?
我从来不修改stm32f10x_vector.c的
应该研究研究stm32f10x_vector.c
同感,并且研究过。不过还没有明白多少
不知道IAR连接脚本能不能这样实现这样的功能?
不知道IAR连接脚本能不能这样实现这样的功能?
vector.c里面连接时,如果在相应的中断向量处找不到对应的中断函数SIGNAL(vector),
就把函数defauld_interrurt()连接到此处。