我在我的项目中使用
STM32F103CB。但是我发现定时器中断最快时间不能小于1us。
定时器预分频器为 0,递增计数器模式,计数器周期为 36,无内部时钟分频和自动重载使能。当定时器中断发生时。我依次将 Pin 设置为高低。但是从管脚输出的时间是1us。
/*
tiM2 初始化函数 */
void MX_TIM2_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 36;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
如果(HAL_TIM_Base_Init(&htim2)!= HAL_OK)
{
错误处理程序();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
如果 (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
{
错误处理程序();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
如果(HAL_TIMEx_MasterConfigSynchronization(&htim2,&sMasterConfig)!= HAL_OK)
{
错误处理程序();
}
}
/**
* @brief 此函数处理 TIM2 全局中断。
*/
void TIM2_IRQHandler(void)
{
/* 用户代码开始 TIM2_IRQn 0 */
TIM2->SR &= ~(1 << 0);
静态 uint8_t bPin = 0;
bPin = !bPin;
如果(bPin)
{
GPIOB->BSRR = 0x8000;
}
别的
{
GPIOB->BSRR = 0x80000000;
}
/* 用户代码结束 TIM2_IRQn 0 */
/* 用户代码开始 TIM2_IRQn 1 */
/* 用户代码结束 TIM2_IRQn 1 */
}
0