我有一个STM32L4R5的板子,有一个工程用到定时器6,可以进中断。
部分代码如下:
static void MX_TIM6_Init(void)
{
/* USER CODE BEGIN TIM6_Init 0 */
/* USER CODE END TIM6_Init 0 */
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM6_Init 1 */
/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
htim6.Init.Prescaler = 16;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 14286;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM6_Init 2 */
/* USER CODE END TIM6_Init 2 */
}
主程序部分:
MX_TIM6_Init();
HAL_TIM_Base_Start_IT(&htim6);
中断服务程序
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
if(!KeyCanChange)return; //如果正在处理按键,则不再扫描键盘
//开始键盘扫描
//保存按键状态到当前按键情况
//KeyCurrent总共有8个bit
//当某个开关按下时,对应的bit为1
KeyCurrent=(HAL_GPIO_ReadPort(GPIOC)&0x0f); //读取键值,GetKeyValue()其实是个宏,不是函数,
//这里故意写成函数的样子,美观。它的定义在
//key.h文件中
if(KeyCurrent!=KeyOld) //如果两次值不等,说明按键情况发生了改变
{
KeyNoChangedTime=0; //键盘按下时间为1
KeyOld=KeyCurrent; //保存当前按键情况
return; //返回
}
else
{
KeyNoChangedTime++; //按下时间累计
if(KeyNoChangedTime>=1) //如果按下时间足够
{
KeyNoChangedTime=1;
KeyPress=KeyOld; //保存按键
KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的键
KeyUp|=KeyLast&(~KeyPress); //求出新释放的键
KeyLast=KeyPress; //保存当前按键情况
}
}
//HAL_GPIO_TogglePin(LD1_GPIO_Port, LD1_Pin);
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
/* USER CODE END TIM6_DAC_IRQn 1 */
}
/* USER CODE END 1 */
另一个工程定时器部分和这个一样,可就是不进中断,我反复对比,都一样。
请问高手,可能是什么原因造成不进中断呢?谢谢!
|