论坛元老
 
- 积分
- 3571
- 金钱
- 3571
- 注册时间
- 2014-12-2
- 在线时间
- 365 小时
|
发表于 2016-3-4 20:21:31
|
显示全部楼层
本帖最后由 xkwy 于 2016-3-4 20:24 编辑
在启动之前使用TIM->EGR[UG]触发一次更新就行了:
[mw_shl_code=c,true]void TIM3_init(uint32_t ms)
{
/* Enable TIM3 Clock */
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = 7200 - 1; /* CNT clock: 0.1 ms */
TIM3->ARR = (ms*10) - 1; /* period */
TIM3->CR1 = TIM_CR1_CEN; /* Counter enable */
TIM3->DIER = TIM_DIER_UIE; /* Update interrupt enable */
TIM3->EGR = TIM_EGR_UG;
TIM3->SR = 0;
NVIC_ClearPendingIRQ(TIM3_IRQn);
NVIC_EnableIRQ(TIM3_IRQn);
}[/mw_shl_code]
(使用UG会触发一次UIF,所以随后必须清除TIM->SR[UIF],并清除NVIC的中断等待)
---------分割线-------------
如果没有问题,还可以使用TIM->CR1[URS]静默方式Update(这样就不必清除中断标志了):
[mw_shl_code=c,true]void TIM3_init(uint32_t ms)
{
/* Enable TIM3 Clock */
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = 7200 - 1; /* CNT clock: 0.1 ms */
TIM3->ARR = (ms*10) - 1; /* period */
TIM3->CR1 = (TIM_CR1_URS|TIM_CR1_CEN); /* URS, Counter enable */
TIM3->DIER = TIM_DIER_UIE; /* Update interrupt enable */
TIM3->EGR = TIM_EGR_UG;
NVIC_EnableIRQ(TIM3_IRQn);
}
[/mw_shl_code]
附:TIM->CR1[URS]:
至于非得为什么这样,或许ST有他的考量吧。。。
|
|