sw4stm32中如何使能中断功能
How to enable interrupt function in sw4stm32
我使用 SW4STM32 工具链,我想在 STM32103RET 中溢出时使用定时器 2 点亮 LED,
这是我打开和关闭 LED 的功能。
void TurnOnLed(){
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
}
void TurnOffLed()
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET);
}
stm32 cube mx设置了timer2初始化,不知道timer2溢出时调用了哪个函数?
您需要通过函数启动定时器
HAL_TIM_Base_Start_IT(&htimX);
并首次实现名为 HAL_TIM_PeriodElapsedCallback
:
的回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIMx) {
}
}
如果您对HAL_Driver一无所知,您可能会从以下位置找到很多信息:
- STM32F0xx HAL_Driver description 或其他家庭只需在 st.com
上搜索 HAL Driver
- 您可以查看 HAL 驱动程序使用示例(因为您使用的是 CubeMX,所以您可以在
C:/Users/%USERNAME%/STM32Cube/Repository/
目录中找到它)
- 只需打开
stm32f?xx_hal_tim.c
并查看有哪些功能,查看他们的评论以了解他们在做什么。并查看从 HAL_TIM_IRQHandler
调用了哪些函数以了解命名回调的方式。
首先,您必须配置您的定时器:
/* TIM2 init function */
static void MX_TIM2_Init(void)
{
TIM_SlaveConfigTypeDef sSlaveConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 10000;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1000;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
sSlaveConfig.InputTrigger = TIM_TS_ITR0;
if (HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
}
第二次使用这个函数来处理中断:
void TIM2_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_10);
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); //clear interrupt flag
//HAL_Delay(500);
}
不要忘记在 main() 函数中启用中断:
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(TIM2_IRQn);// Enable interrupt from TIM3 (NVIC level)
我使用 SW4STM32 工具链,我想在 STM32103RET 中溢出时使用定时器 2 点亮 LED, 这是我打开和关闭 LED 的功能。
void TurnOnLed(){
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_SET);
}
void TurnOffLed()
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_10,GPIO_PIN_RESET);
}
stm32 cube mx设置了timer2初始化,不知道timer2溢出时调用了哪个函数?
您需要通过函数启动定时器
HAL_TIM_Base_Start_IT(&htimX);
并首次实现名为 HAL_TIM_PeriodElapsedCallback
:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIMx) {
}
}
如果您对HAL_Driver一无所知,您可能会从以下位置找到很多信息:
- STM32F0xx HAL_Driver description 或其他家庭只需在 st.com 上搜索
- 您可以查看 HAL 驱动程序使用示例(因为您使用的是 CubeMX,所以您可以在
C:/Users/%USERNAME%/STM32Cube/Repository/
目录中找到它) - 只需打开
stm32f?xx_hal_tim.c
并查看有哪些功能,查看他们的评论以了解他们在做什么。并查看从HAL_TIM_IRQHandler
调用了哪些函数以了解命名回调的方式。
HAL Driver
首先,您必须配置您的定时器:
/* TIM2 init function */
static void MX_TIM2_Init(void)
{
TIM_SlaveConfigTypeDef sSlaveConfig;
TIM_MasterConfigTypeDef sMasterConfig;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 10000;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1000;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
{
Error_Handler();
}
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
sSlaveConfig.InputTrigger = TIM_TS_ITR0;
if (HAL_TIM_SlaveConfigSynchronization(&htim2, &sSlaveConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
}
第二次使用这个函数来处理中断:
void TIM2_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_10);
__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_UPDATE); //clear interrupt flag
//HAL_Delay(500);
}
不要忘记在 main() 函数中启用中断:
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(TIM2_IRQn);// Enable interrupt from TIM3 (NVIC level)