STM32CubeMX开发之路—9使用TIM实现微秒级别的延时
运行环境
- Windows10
- STM32CubeMX___Version 5.0.0
- Keil5(MDK5)___Version 5.15
简介
本例程主要讲解如何使用是定时器实现微秒级别的延时。
STM32CubeMx基本配置
基础配置过程请参考 STM32CubeMx(Keil5)开发之路—配置第一个项目
printf重定向例程请参考 STM32CubeMx(Keil5)开发之路——3发送USART数据和printf重定向
STM32CubeMx PWM配置
1——点击TIM3进行设置
2——选择 “Internal Clock” 选项
3——点击下方Parameter Settings
4——照下图所示设置预分频等参数
代码修改
1——选择main.c文件
2——代码区添加如下微秒延时代码
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);
return ch;
}
/* 进行5000微秒以内的延时*/
void delay_us(uint16_t us)
{
/* 中断会打断微秒延时函数,
* 但计数器计数不会停
* 防止计数器增加到65535之后重新开始计数
*/
uint16_t differ=50000-us;
HAL_TIM_Base_Start(&htim3);
__HAL_TIM_SET_COUNTER(&htim3,differ);
while(differ<50000)
{
differ=__HAL_TIM_GET_COUNTER(&htim3);
}
HAL_TIM_Base_Stop(&htim3);
}
/* USER CODE END 0 */
接着在mian函数中添加如下测试代码
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
printf("this is 1 us Delay");
for(i=0;i<1000;i++)
{
delay_us(4000);
}
}
/* USER CODE END 3 */
烧录代码后打开出口调试助手,正确的话会看到大约没4秒输出一次 " this is 1 us Delay " 信息
备注:提供一下个人微信号 Hleafleafleaf,欢迎加好友,共同学习!共同进步!