STM32F103 HAL库 TIM通用定时器-内部定时功能实现 ing...
定时器分类介绍(来自野火指南者开放板资料)
STM32CubeMX 配置文件
- 找到对应STM32型号,配置SYS和RCC串口烧录和外部晶振的选择
- 找到对应TIMx定时器,选择 internal clock (内部时钟源)一般均选择这个选项。其他都不需要选。
3.时钟配置
一般均设为最大 72Mhz
4.parameter Settings
PSC 预分频器值(PSC):0~65535 (分频值)
Counter Mode :UP (定时器计数模式)
Counter Period(ARR):1~65536 (自动重载值)
auto-reload preload:Enable (自动转入重载值?)
定时时间计算:
HCLK=72Mhz
定时时间(秒)=1/(HCLK)(PSC+1)(ARR+1)
最终计算出来的是以秒为单位* 注意!!!
NVIC Setting 配置 (使能)
例程代码
HAL库TIM中断开启函数
__HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);//清除TIM定时器标志位
HAL_TIM_Base_Start_IT(&htim3);//开启内部定时器tim3
TIM初始化函数
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED_ON_GPIO_Port, LED_ON_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = LED_ON_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_ON_GPIO_Port, &GPIO_InitStruct);
}
HAL库TIM中断回调函数配置
//TIM定时返回函数
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)//回调函数
{
if(htim->Instance == TIM3)//判断进入回调函数方式?
{
__HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);//清除标志位
HAL_TIM_Base_Stop_IT(&htim3);//停止定时器
printf("1");//测试USART打印函数
HAL_GPIO_TogglePin(LED_ON_GPIO_Port, LED_ON_Pin);//LED端口反转
HAL_TIM_Base_Start_IT(&htim3);//开启定时器
}
}
USART 打印函数配置
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 1000);
return (ch);
}