初级会员

- 积分
- 57
- 金钱
- 57
- 注册时间
- 2013-9-27
- 在线时间
- 0 小时
|
发表于 2013-10-30 12:12:23
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
u16 TPAD_Get_Val(void)
{
TPAD_Reset();
while((TIM5->SR&0X02)==0)//等待捕获上升沿 问:是0X04还是0X02?
{
if(TIM5->CNT>TPAD_ARR_MAX_VAL-500)return TIM5->CNT;//超时了,直接返回CNT的值 问:超时返回的CNT的值起什么作用呢?
};
return TIM5->CCR2;
}
这段程序有两个问题,如上面程序注释部分。
void TIM5_CH2_Cap_Init(u16 arr,u16 psc)
{
//此部分需手动修改 IO口设置
RCC->APB1ENR|=1<<3; //TIM5 时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFFF0F; //PA1 输入
GPIOA->CRL|=0X00000040; //浮空输入
TIM5->ARR=arr; //设定计数器自动重装值//刚好1ms
TIM5-> SC=psc; //预分频器,1M的计数频率
TIM5->CCMR1|=1<<8; //CC2S=01 选择输入端 IC2映射到TI2上
TIM5->CCMR1|=0<<12; //IC2F=0011 配置输入滤波器 8个定时器时钟周期滤波 问:0<<12还是0吧?怎么是0011了呢?应该是0x3<<12吧?
TIM5->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频
TIM5->CCER|=0<<5; //CC2P=0 上升沿捕获
TIM5->CCER|=1<<4; //CC2E=1 允许捕获计数器的值到捕获寄存器中
TIM5->CR1|=0x01; //使能定时器5
}
这段程序的问题也在注释部分。 |
|