初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2018-1-17
- 在线时间
- 11 小时
|
2金钱
项目上使用高级定时器8对PWM信号进行接收,由于电路设计的问题,只能使用定时器8的通道3.但是一直不能实现正确的接收,通道1和通道2都没有问题,换成通道3就不行了,麻烦大牛帮忙解答一下,我把中断配置的程序贴在下边,我认为有问题的地方用红色的标出来了,但是我改动这里没有解决问题,麻烦大牛帮忙解决一下,万分感谢
头文件:
#ifndef __BSP_ADVANCETIME_H
#define __BSP_ADVANCETIME_H
#include "stm32f10x.h"
#define ADVANCE_TIM TIM8
#define ADVANCE_TIM_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADVANCE_TIM_CLK RCC_APB2Periph_TIM8
#define ADVANCE_TIM_PERIOD (3000-1)
#define ADVANCE_TIM_PSC (72-1)
#define ADVANCE_TIM_IRQ TIM8_CC_IRQn
#define ADVANCE_TIM_IRQHandler TIM8_CC_IRQHandler
#define ADVANCE_TIM_CH3_GPIO_CLK RCC_APB2Periph_GPIOC
#define ADVANCE_TIM_CH3_PORT GPIOC
#define ADVANCE_TIM_CH3_PIN GPIO_Pin_8
#define ADVANCE_TIM_IC3PWM_CHANNEL TIM_Channel_3
#define Signal_Input GPIO_ReadInputDataBit(ADVANCE_TIM_CH3_PORT, ADVANCE_TIM_CH3_PIN)
void ADVANCE_TIM_Init(void);
#endif /* __BSP_ADVANCETIME_H */
.c文件的内容
#include "bsp_AdvanceTim.h"
static void ADVANCE_TIM_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = ADVANCE_TIM_IRQ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void ADVANCE_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH3_GPIO_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = ADVANCE_TIM_CH3_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(ADVANCE_TIM_CH3_PORT, &GPIO_InitStructure);
}
static void ADVANCE_TIM_Mode_Config(void)
{
TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
ADVANCE_TIM_APBxClock_FUN(ADVANCE_TIM_CLK,ENABLE);
TIM_TimeBaseStructure.TIM_Period=ADVANCE_TIM_PERIOD;
TIM_TimeBaseStructure.TIM_Prescaler= ADVANCE_TIM_PSC;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(ADVANCE_TIM, &TIM_TimeBaseStructure);
TIM_ICInitStructure.TIM_Channel = ADVANCE_TIM_IC3PWM_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_PWMIConfig(ADVANCE_TIM, &TIM_ICInitStructure);
TIM_SelectInputTrigger(ADVANCE_TIM, TIM_TS_TI1FP1);
TIM_SelectSlaveMode(ADVANCE_TIM, TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(ADVANCE_TIM,TIM_MasterSlaveMode_Enable);
TIM_ITConfig(ADVANCE_TIM, TIM_IT_CC3, ENABLE); //一开始用的定时器1,这里是TIM_IT_CC1,因为换成了通道3,所以改成了TIM_IT_CC3
TIM_ClearITPendingBit(ADVANCE_TIM, TIM_IT_CC3); //一开始用的定时器1,这里是TIM_IT_CC1,因为换成了通道3,所以改成了TIM_IT_CC3
TIM_Cmd(ADVANCE_TIM, ENABLE);
}
void ADVANCE_TIM_Init(void)
{
ADVANCE_TIM_GPIO_Config();
ADVANCE_TIM_NVIC_Config();
ADVANCE_TIM_Mode_Config();
}
/*********************************************END OF FILE**********************/
|
|