打印
[STM32L0]

L052 普通的定时器如何打开

[复制链接]
860|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chh44|  楼主 | 2019-5-13 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触STM32L0系列的芯片,现在的SDK都是通过st的工具cube mx生成的,但定时器没有跑进设定的中断去。
请大神帮忙看看代码哪里出了问题,如果能提供份能正常跑起来的定时器代码也感激万分


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 */
        }
}

使用特权

评论回复
沙发
蝴蝶泉2018| | 2019-5-15 11:52 | 只看该作者
软件库里现成的外设代码啊,在上面改写或者参照就简单多了

使用特权

评论回复
板凳
heimaojingzhang| | 2019-6-12 09:34 | 只看该作者
难道不可以用cube生成吗

使用特权

评论回复
地板
keaibukelian| | 2019-6-12 10:01 | 只看该作者
光看这部分代码 没有什么结论

使用特权

评论回复
5
labasi| | 2019-6-12 10:04 | 只看该作者
中断向量指过去了吗

使用特权

评论回复
6
chh44|  楼主 | 2019-6-15 17:22 | 只看该作者
可以了,用cube生成代码就OK了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Hello world!

4

主题

60

帖子

2

粉丝