中级会员
- 积分
- 218
- 金钱
- 218
- 注册时间
- 2015-12-3
- 在线时间
- 36 小时
|
本帖最后由 方圆 于 2016-3-11 22:16 编辑
入门STM8,不可避免的遇到了映射问题,这不,折腾了一天时间,终于把TIM1_CH1的捕获调通了。
第一点要关注的是,【TIM1_CH1】是复用功能,需要映射后才能正常使用。附件里有相关文档可以查看,也包括其他外设映射所对应的option byte.
第二点是触发输入信号、触发方式的设置,可以通过寄存器直接设置,但是我更喜欢用库函数设置。
寄存器版:
//TIM1->SMCR |= 0x54;//配置TIM1_SMCR寄存器的SMS=100,选择定时器为复位触发模式;
//配置TIM1_SMCR寄存器的TS=101 ,选择TI1 作为输入源。
库函数版:
// 选择有效的触发输入信号:选源触发源 ti1fp1
TIM1_SelectInputTrigger(TIM1_TS_TI1FP1);
// 触发方式:复位模式
TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET);
完整初始化函数:
void TIM1_Config(void)
{
//设置为缺省值
TIM1_DeInit();
// 1分频,TIM1时钟为16M
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 3999, 0);
// CC1通道被配置为输入,IC1映射在TI1FP1上
// 使能输入捕获,TI1FP1上升沿触发
TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00);
// 选择有效的触发输入信号:选源触发源 ti1fp1
TIM1_SelectInputTrigger(TIM1_TS_TI1FP1);
// 触发方式:复位模式
TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET);
//TIM1->SMCR |= 0x54;//配置TIM1_SMCR寄存器的SMS=100,选择定时器为复位触发模式;
//配置TIM1_SMCR寄存器的TS=101 ,选择TI1 作为输入源。
// 使能更新ch1中断
TIM1_ITConfig(TIM1_IT_CC1, ENABLE);
// 自动重装载使能
TIM1_ARRPreloadConfig(ENABLE);
TIM1_Cmd(ENABLE);
}
|
|