[应用相关] STM32 HAL/LL混合库查询方式实现精确微秒延时

[复制链接]
806|7
 楼主| 慢动作 发表于 2021-11-30 23:11 | 显示全部楼层 |阅读模式
HAL与LL库查询方式实现精确微秒或毫秒延时,可以用于IO口模拟I2C、SPI通信等。通过HAL实现初始化5us初始化,后面在延时函数中可以再设置延时值。
 楼主| 慢动作 发表于 2021-11-30 23:14 | 显示全部楼层
1. 定时器实现1us延时
7959061a63fb4c9aa7.png
 楼主| 慢动作 发表于 2021-11-30 23:14 | 显示全部楼层
中断Enable不打钩
 楼主| 慢动作 发表于 2021-11-30 23:15 | 显示全部楼层
 楼主| 慢动作 发表于 2021-11-30 23:16 | 显示全部楼层
 楼主| 慢动作 发表于 2021-11-30 23:16 | 显示全部楼层
复制必要库文件,.c/.h单独一个文件,设置好。
 楼主| 慢动作 发表于 2021-11-30 23:23 | 显示全部楼层
 楼主| 慢动作 发表于 2021-11-30 23:32 | 显示全部楼层
本帖最后由 慢动作 于 2021-11-30 23:34 编辑

生成代码如下:
  1. /* TIM3 init function */
  2. void MX_TIM3_Init(void)
  3. {
  4.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  5.   TIM_MasterConfigTypeDef sMasterConfig = {0};

  6.   htim3.Instance = TIM3;
  7.   htim3.Init.Prescaler = 72-1;
  8.   htim3.Init.CounterMode = TIM_COUNTERMODE_DOWN;
  9.   htim3.Init.Period = 5-1;
  10.   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  11.   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  12.   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  13.   {
  14.     Error_Handler();
  15.   }
  16.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  17.   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  18.   {
  19.     Error_Handler();
  20.   }
  21.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  22.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  23.   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  24.   {
  25.     Error_Handler();
  26.   }
  27. }

您需要登录后才可以回帖 登录 | 注册

本版积分规则

82

主题

1071

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部