OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8079|回复: 3

关于用CC4触发AD中断的问题

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2014-7-11
在线时间
0 小时
发表于 2014-7-11 21:05:52 | 显示全部楼层 |阅读模式
5金钱
我想用TIM1的CC4触发中断,计数模式是中央对齐模式,我想在下降沿触发中断,TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;在这里设置了,后来读取计数器值发现总是在上升沿触发中断,很困惑,求教原子哥
[mw_shl_code=c,true]void TIM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //基本结构体变量定义 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); //打开定时器时钟 TIM_DeInit(TIM1); TIM_TimeBaseStructure.TIM_Period = 2249; //计数值 TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频,此值+1为分频的除数 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟因子 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; //计数模式选择 TIM_CounterMode_Up向上计数 TIM_CounterMode_Dowm向下计数 //TIM_CounterMode_CenterAligned1 中心对齐方式1(下降触发) TIM_CounterMode_CenterAligned2 中心对齐方式2(上升触发) TIM_CounterMode_CenterAligned3 中心对齐方式3(上升下降触发) TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; /*TIM_OCMode_Timing输出比较时间模式(输出引脚冻结无效) TIM_OCMode_Active输出比较主动模式(匹配时设置输出引脚为有效电平,当计数值为比较/捕获寄存器值相同时,强制输出为高电平) TIM_OCMode_Inactive输出比较非主动模式(匹配时设置输出引脚为无效电平,当计数值为比较/捕获寄存器值相同时,强制输出为低电平) TIM_OCMode_Toggle输出比较触发模式(翻转。当计数值与比较/捕获寄存器值相同时,翻转输出引脚的电平) TIM_OCMode_PWM1向上计数时,当TIMx_CNT < TIMx_CCR*时,输出电平有效,否则为无效。向下计数时,当TIMx_CNT > TIMx_CCR*时,输出电平无效,否则为有效 TIM_OCMode_PWM2与PWM1模式相反*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //OC输出使能 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互补输出使能 TIM_OCInitStructure.TIM_Pulse = 100; //比较/PWM 通道的值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; /*输出比较极性的指的是你在比较匹配之后输出口输出的极性。 这个函数就是让你设置有效极性,也就是设置比较输出的有效电平。 你可以设置为高电平有效或者低电平有效。 如果设置为高电平有效,那么当定时器比较匹配之后,输出口输出高电平,否则就反一下。*/ TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //set当MOE=0时,如果实现了OC*N,则死区后OC*=1;reset当MOE=0时,如果实现了OC*N,则死区后OC*=0 TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; //set当MOE=0时,死区后OC*N=1;reset当MOE=0时,死区后OC*N=0 TIM_OC1Init(TIM1, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = 100; TIM_OC2Init(TIM1, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_Pulse = 100; TIM_OC3Init(TIM1, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//CCR4这个输出使能后才能用来触发ADC1的注入通道采样 TIM_OCInitStructure.TIM_Pulse = 1; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OC4Init(TIM1, &TIM_OCInitStructure); TIM_ClearFlag(TIM1, TIM_IT_Update); TIM_ClearFlag(TIM1, TIM_IT_Break); TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE); TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); TIM_ITConfig(TIM1, TIM_IT_Break, ENABLE); TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; TIM_BDTRInitStructure.TIM_DeadTime = 136; TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable; TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low; TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable; TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); TIM_SelectOutputTrigger( TIM1, TIM_TRGOSource_Update ); TIM_Cmd(TIM1, ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); }[/mw_shl_code]

这是定时器设定

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2016-3-11
在线时间
0 小时
发表于 2016-3-11 11:09:17 | 显示全部楼层
当选定外部触发信号后,只有它的上升沿可以启动转换,这在手册中有。
PWM为中央对齐模式时,即使只上升沿可触发,也是可以可以通过修改CC4的PWM模式1/2,实现整个pwm周期的任意时刻的触发。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-3-11 23:37:44 | 显示全部楼层
帮顶
回复

使用道具 举报

5

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2017-4-27
在线时间
58 小时
发表于 2018-2-2 21:56:56 | 显示全部楼层
本帖最后由 sjh2101 于 2018-2-2 22:49 编辑

pwm1或2模式+极性控制,应该可行。这样就是4种方案了。试试看。
网上关于“用TIM1产生6路ADC,用CCR4触发ADC1的注入通道采样”的文章,最近终于发现原文:
[STM32] TIM1 to generate 6 ADC, with the CCR4 trigger the injection channel samp
地址在http://www.programering.com/a/MTM1EDMwATA.html。但是没有一个中文网页提到这个英文网页。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表