[STM32L0] L052 普通的定时器如何打开

[复制链接]
901|14
 楼主| dingy 发表于 2021-5-5 18:07 | 显示全部楼层 |阅读模式
刚接触STM32L0系列的芯片,现在的SDK都是通过st的工具cube mx生成的,但定时器没有跑进设定的中断去。
heweibig 发表于 2021-5-5 18:10 | 显示全部楼层
看看代码哪里出了问题
 楼主| dingy 发表于 2021-5-5 18:12 | 显示全部楼层

void SysBaseTimerInit(void)
{
        /* USER CODE BEGIN TIM21_Init 0 */

        /* USER CODE END TIM21_Init 0 */

        TIM_SlaveConfigTypeDef sSlaveConfig = {0};
        TIM_MasterConfigTypeDef sMasterConfig = {0};
        TIM_OC_InitTypeDef sConfigOC = {0};

        /* USER CODE BEGIN TIM21_Init 1 */

        /* USER CODE END TIM21_Init 1 */
        htim21.Instance = TIM21;
        htim21.Init.Prescaler = 1600;
        htim21.Init.CounterMode = TIM_COUNTERMODE_UP;
        htim21.Init.Period = 10000;
        htim21.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
        htim21.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
        if (HAL_TIM_Base_Init(&htim21) != HAL_OK)
        {
                _Error_Handler(__FILE__, __LINE__);
        }
        if (HAL_TIM_OC_Init(&htim21) != HAL_OK)
        {
                _Error_Handler(__FILE__, __LINE__);
        }
        sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
        sSlaveConfig.InputTrigger = TIM_TS_ITR0;
        if (HAL_TIM_SlaveConfigSynchronization(&htim21, &sSlaveConfig) != HAL_OK)
        {
                _Error_Handler(__FILE__, __LINE__);
        }
        sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
        sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
        if (HAL_TIMEx_MasterConfigSynchronization(&htim21, &sMasterConfig) != HAL_OK)
        {
                _Error_Handler(__FILE__, __LINE__);
        }
        sConfigOC.OCMode = TIM_OCMODE_TIMING;
        sConfigOC.Pulse = 0;
        sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
        sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
        if (HAL_TIM_OC_ConfigChannel(&htim21, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
        {
                _Error_Handler(__FILE__, __LINE__);
        }
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef * htim)
{
        //if(htim->Instance == TimHandle.Instance)
        {
                if(a == 1)
                {
                        LED1_WRITE(0);
                        a = 0;
                }
                else
                {
                        a = 1;
                        LED1_WRITE(1);
                }
        }
}



void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{
        if(htim_base->Instance==TIM21)
        {
                /* USER CODE BEGIN TIM21_MspInit 0 */

                /* USER CODE END TIM21_MspInit 0 */
                /* Peripheral clock enable */
                __HAL_RCC_TIM21_CLK_ENABLE();
                /* TIM21 interrupt Init */
                HAL_NVIC_SetPriority(TIM21_IRQn, 0, 2);
                HAL_NVIC_EnableIRQ(TIM21_IRQn);
                /* USER CODE BEGIN TIM21_MspInit 1 */

                /* USER CODE END TIM21_MspInit 1 */
        }
}
 楼主| dingy 发表于 2021-5-5 18:14 | 显示全部楼层
如果能提供份能正常跑起来的定时器代码也感激万分
jlyuan 发表于 2021-5-5 18:15 | 显示全部楼层
软件库里现成的外设代码啊
juventus9554 发表于 2021-5-5 18:17 | 显示全部楼层
在上面改写或者参照就简单多了
renyaq 发表于 2021-5-5 18:19 | 显示全部楼层
难道不可以用cube生成吗
chenjunt 发表于 2021-5-5 18:25 | 显示全部楼层
光看这部分代码 没有什么结论
heweibig 发表于 2021-5-5 18:27 | 显示全部楼层
中断向量指过去了吗
 楼主| dingy 发表于 2021-5-5 18:29 | 显示全部楼层
可以了,用cube生成代码就OK了
paotangsan 发表于 2021-6-1 15:45 | 显示全部楼层
开启中断使能了吗
keaibukelian 发表于 2021-6-1 16:50 | 显示全部楼层
生成的只是一个大概的框架 具体内容需要自己丰富
labasi 发表于 2021-6-1 16:56 | 显示全部楼层
定时器启动了吗
renzheshengui 发表于 2021-6-1 17:09 | 显示全部楼层
软件库里有现成的代码
wakayi 发表于 2021-6-1 17:11 | 显示全部楼层
中断啊  总中断啊  定时器使能啊 都要检查一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

745

主题

10920

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部