第一步,配置时钟,主频64M;
第二步:设置定时器16,分频后(64/63+1)1M;此处不选择自动重装;
第三步:确定生成代码,查看配置是否一致;
/*
* delay.h
*
* Created on: Jan 2, 2025
* Author: Lin
*/
#ifndef INC_DELAY_H_
#define INC_DELAY_H_
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed long int32_t;
/*!< Unsigned integer types */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
typedef int32_t s32;
typedef int16_t s16;
typedef int8_t s8;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
void delay_ms(u16 nms);
void delay_us(u32 nus);
#endif /* INC_DELAY_H_ */
第四步:添加延时函数的头文件《delay.h》;
/*
* delay.c
*
* Created on: Jan 2, 2025
* Author: Lin
*/
#include "delay.h"
#include "main.h"
extern TIM_HandleTypeDef htim16;
//nus 最小延时nus=2 2us
void delay_us(u32 nus)
{
__HAL_TIM_SET_COUNTER(&htim16, 0);
__HAL_TIM_ENABLE(&htim16);
while (__HAL_TIM_GET_COUNTER(&htim16) < nus);
__HAL_TIM_DISABLE(&htim16);
}
//nms 最大延时不建议超过65ms
void delay_ms(u16 nms)
{
__HAL_TIM_SET_COUNTER(&htim16, 0);
__HAL_TIM_ENABLE(&htim16);
while (__HAL_TIM_GET_COUNTER(&htim16) < nms*1000);
__HAL_TIM_DISABLE(&htim16);
}
//-------end-----------//
第五步:添加延时函数C代码《delay.c》
/* USER CODE END WHILE */
delay_ms(50);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
delay_us(50);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
/* USER CODE BEGIN 3 */
最后一步:在主函数main.c文件中添加测试代码,用示波器测试波形是否成功。