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