本文主要是介绍HAL STM32主从定时器联级使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
这篇关于HAL STM32主从定时器联级使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!