我有一个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 */
复制代码另一个工程定时器部分和这个一样,可就是不进中断,我反复对比,都一样。 请问高手,可能是什么原因造成不进中断呢?谢谢!
|