下面测试效果一样
while (1)
{
HAL_GPIO_TogglePin(GPIOC, LEDRED_Pin|LEDGREE_Pin|LEDBLUE_Pin);
// HAL_Delay(200);
for(int i=0;i<1000;i++)TIM6_Delay(200);
}
直接套路吧 简简单单
我是72MHZ
void MX_TIM6_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim6.Instance = TIM6;
htim6.Init.Prescaler = 72-1;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 1000-1;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
}
void TIM6_Delay(int us)
{
uint16_t differ=us;
if(differ>999)return;
HAL_TIM_Base_Start(&htim6);
__HAL_TIM_SET_COUNTER(&htim6,0);
while(__HAL_TIM_GET_COUNTER(&htim6) < differ);
HAL_TIM_Base_Stop(&htim6);
}
原理 F=72 000000 / 72 *1000 =1000 -----T = 1MS
那么1MS计数从0到1000 表示1MS
从0--1000之间选几个数 比如100 从0到100那就是100US