HAL STM32主从定时器联级使用
-
具体介绍参考STM32参考手册
-
🌿主从定时器联级:使用一个定时器作为另一个定时器的预分频器。
-
🍁时钟关系:
-
🌿TIM1 和TIM8 控制寄存器 2(TIMx_CR2)相关位:
- 🔖主定时器需要使能
TRGO
.从定时器的输入触发源选择ITRx
.
- 🌿从模式控制寄存器(TIMx_SMCR):
🛠STM32CubeMX配置方法
- 🔧主定时器配置。(使能
TRGO
选项)
- 🔨从定时器配置
- 🔖以上配置,实现的是定时器1更新中断6次后,从定时器触发一次。
📙业务代码
- 🌿main函数
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
__HAL_TIM_CLEAR_IT(&htim1, TIM_IT_UPDATE);
__HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE); //开启TIM3的更新中断
HAL_TIM_Base_Start_IT(&htim1); //启动定时器
__HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);
__HAL_TIM_ENABLE_IT(&htim2, TIM_IT_UPDATE); //开启TIM3的更新中断
HAL_TIM_Base_Start_IT(&htim2); //启动定时器
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while(1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
- 🌿中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1) {
if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) {
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
}
}
if(htim->Instance == TIM2) {
if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) {
HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);
__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
}
}
}
📚测试工程
链接:https://pan.baidu.com/s/1m-ZbaD-LQuQIu26hSKdlXg?pwd=qm3b
提取码:qm3b