初级会员

- 积分
- 105
- 金钱
- 105
- 注册时间
- 2017-8-17
- 在线时间
- 17 小时
|

楼主 |
发表于 2018-4-10 10:11:42
|
显示全部楼层
附ZET6核心板调试成功程序:
1、库函数板:
void Encoder_Init_TIM2(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_AFIODeInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //禁止JTAG功能,把PB3,PB4作为普通IO口使用
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOA
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空输入
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // 预分频器
TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD; //设定计数器自动重装值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//选择时钟分频:不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;////TIM向上计数
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge, TIM_ICPolarity_BothEdge);
TIM_ICStructInit(&TIM_ICInitStructure);
TIM_ICInitStructure.TIM_ICFilter = 10;
TIM_ICInit(TIM2, &TIM_ICInitStructure);//根据TIM_ICInitStruct中指定的参数初始化外设TIM
TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除TIM的更新标志位
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //使能或者失能指定的TIM中断
TIM_SetCounter(TIM2,0);
TIM_Cmd(TIM2, ENABLE); //使能或者失能TIMx外设
}
2、寄存器板:
void Encoder_Init_TIM2(void)
{
GPIO_AFIODeInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //禁止JTAG功能,把PB3,PB4作为普通IO口使用
GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);
// RCC->APB2ENR|=1<<0; //开启辅助时钟
// AFIO->MAPR|=(0x01)<<8; //01部分重映射
// RCC->APB1ENR|=1<<0; //TIM2时钟使能
// RCC->APB2ENR|=1<<2; //使能PORTA时钟
// RCC->APB2ENR|=1<<3; //使能PORTB时钟
GPIOA->CRH&=0X0FFFFFFF;//PA15
GPIOA->CRH|=0X40000000;//浮空输入
GPIOB->CRL&=0XFFFF0FFF;//PB3
GPIOB->CRL|=0X00004000;//浮空输入
// TIM2->DIER|=1<<0; //允许更新中断
// TIM2->DIER|=1<<6; //允许触发中断
// MY_NVIC_Init(1,3,TIM2_IRQn,1);
TIM2->PSC = 0x0;//预分频器
TIM2->ARR = ENCODER_TIM_PERIOD;//设定计数器自动重装值
TIM2->CR1 &=~(3<<8);// 选择时钟分频:不分频
TIM2->CR1 &=~(3<<5);// 选择计数模式:边沿对齐模式
TIM2->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1
TIM2->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2
TIM2->CCER &= ~(1<<1); //CC1P='0' IC1FP1不反相,IC1FP1=TI1
TIM2->CCER &= ~(1<<5); //CC2P='0' IC2FP2不反相,IC2FP2=TI2
TIM2->CCMR1 |= 3<<4; // IC1F='1000' 输入捕获1滤波器
TIM2->SMCR |= 3<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
TIM2->CNT = 0;
TIM2->CR1 |= 0x01; //CEN=1,使能定时器
}
|
|