大学生
最后登录1970-1-1
在线时间 小时
注册时间2017-1-4
|
- void ADVANCE_TIM_IRQHandler (void)
- {
- if(TIM_GetITStatus(ADVANCE_TIM, TIM_IT_Update) != RESET){
- TIM_ICUserValueStructure.Capture_Period ++;
- TIM_ClearITPendingBit(ADVANCE_TIM, TIM_IT_Update);
- }
- if ( TIM_GetITStatus(ADVANCE_TIM, TIM_IT_CC1) != RESET)
- {
- // 第一次捕获
- if ( TIM_ICUserValueStructure.Capture_StartFlag == 0)
- {
- TIM_SetCounter(ADVANCE_TIM, 0);
- TIM_ICUserValueStructure.Capture_Period = 0;
- TIM_ICUserValueStructure.Capture_CcrValue = 0;
- TIM_ICUserValueStructure.Capture_StartFlag = 1;
- }else{
- TIM_ICUserValueStructure.Capture_CcrValue = TIM_GetCapture1(ADVANCE_TIM);
- TIM_ICUserValueStructure.Capture_StartFlag = 0;
- TIM_ICUserValueStructure.Capture_FinishFlag = 1;
- }
- TIM_ClearITPendingBit (ADVANCE_TIM,TIM_IT_CC1);
- }
- }
复制代码- #ifndef __GENERAL_TIM_H
- #define __GENERAL_TIM_H
- #include "stm32f4xx.h"
- /* 高级控制定时器PWM输入捕获 */
- /* PWM输入捕获引脚 */
- #define ADVANCE_ICPWM_PIN GPIO_Pin_6
- #define ADVANCE_ICPWM_GPIO_PORT GPIOC
- #define ADVANCE_ICPWM_GPIO_CLK RCC_AHB1Periph_GPIOC
- #define ADVANCE_ICPWM_PINSOURCE GPIO_PinSource6
- #define ADVANCE_ICPWM_AF GPIO_AF_TIM8
- #define ADVANCE_IC1PWM_CHANNEL TIM_Channel_1
- /* 高级控制定时器 */
- #define ADVANCE_TIM TIM8
- #define ADVANCE_TIM_CLK RCC_APB2Periph_TIM8
- /* 捕获/比较中断 */
- #define ADVANCE_TIM_IRQn TIM8_CC_IRQn
- #define ADVANCE_TIM_IRQHandler TIM8_CC_IRQHandler
- typedef struct
- {
- uint8_t Capture_FinishFlag; // 捕获结束标志位
- uint8_t Capture_StartFlag; // 捕获开始标志位
- uint16_t Capture_CcrValue; // 捕获寄存器的值
- uint16_t Capture_Period; // 自动重装载寄存器更新标志
- }TIM_ICUserValueTypeDef;
- extern TIM_ICUserValueTypeDef TIM_ICUserValueStructure;
- void TIMx_Configuration(void);
- #endif /* __GENERAL_TIM_H */
复制代码
- <DIV class=blockcode>
- <BLOCKQUOTE>#include "bsp_advance_tim.h"
- TIM_ICUserValueTypeDef TIM_ICUserValueStructure = {0, 0, 0, 0};
- static void TIMx_GPIO_Config(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_AHB1PeriphClockCmd (ADVANCE_ICPWM_GPIO_CLK, ENABLE);
- GPIO_PinAFConfig(ADVANCE_ICPWM_GPIO_PORT,ADVANCE_ICPWM_PINSOURCE,ADVANCE_ICPWM_AF);
- GPIO_InitStructure.GPIO_Pin = ADVANCE_ICPWM_PIN;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_Init(ADVANCE_ICPWM_GPIO_PORT, &GPIO_InitStructure);
- }
- static void TIMx_NVIC_Configuration(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- // 设置中断组为0
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
- // 设置中断来源
- NVIC_InitStructure.NVIC_IRQChannel = ADVANCE_TIM_IRQn;
- // 设置抢占优先级
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- // 设置子优先级
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
- static void TIM_PWMINPUT_Config(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_ICInitTypeDef TIM_ICInitStructure;
- RCC_APB2PeriphClockCmd(ADVANCE_TIM_CLK, ENABLE);
- TIM_TimeBaseStructure.TIM_Period = 0xFFFF-1;
- TIM_TimeBaseStructure.TIM_Prescaler = 1800-1;
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
- TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);
- TIM_ICInitStructure.TIM_Channel = ADVANCE_IC1PWM_CHANNEL;
- TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
- TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
- TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
- TIM_ICInitStructure.TIM_ICFilter = 0x0;
- TIM_ICInit(ADVANCE_TIM, &TIM_ICInitStructure);
- TIM_ClearFlag(ADVANCE_TIM, TIM_FLAG_Update|TIM_IT_CC1); //清除更新和捕获中断标志位
- TIM_ITConfig (ADVANCE_TIM, TIM_IT_Update | TIM_IT_CC1, ENABLE );//开启更新和捕获中断
- TIM_Cmd(ADVANCE_TIM, ENABLE);
- }
- void TIMx_Configuration(void)
- {
- TIMx_GPIO_Config();
- TIMx_NVIC_Configuration();
- TIM_PWMINPUT_Config();
- }
- /*********************************************END OF FILE**********************/
复制代码 这个是参照F103的定时器进行输入捕获测量外部信号脉冲修改的,我的作用是想测量外部信号的频率,在板子上面下载之后数据显示正确,期望大家可以帮忙看看谢谢 |
|