打印
[STM32L0]

L052 普通的定时器如何打开

[复制链接]
570|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 | 只看该作者
如果能提供份能正常跑起来的定时器代码也感激万分

使用特权

评论回复
5
jlyuan| | 2021-5-5 18:15 | 只看该作者
软件库里现成的外设代码啊

使用特权

评论回复
6
juventus9554| | 2021-5-5 18:17 | 只看该作者
在上面改写或者参照就简单多了

使用特权

评论回复
7
renyaq| | 2021-5-5 18:19 | 只看该作者
难道不可以用cube生成吗

使用特权

评论回复
8
chenjunt| | 2021-5-5 18:25 | 只看该作者
光看这部分代码 没有什么结论

使用特权

评论回复
9
heweibig| | 2021-5-5 18:27 | 只看该作者
中断向量指过去了吗

使用特权

评论回复
10
dingy|  楼主 | 2021-5-5 18:29 | 只看该作者
可以了,用cube生成代码就OK了

使用特权

评论回复
11
paotangsan| | 2021-6-1 15:45 | 只看该作者
开启中断使能了吗

使用特权

评论回复
12
keaibukelian| | 2021-6-1 16:50 | 只看该作者
生成的只是一个大概的框架 具体内容需要自己丰富

使用特权

评论回复
13
labasi| | 2021-6-1 16:56 | 只看该作者
定时器启动了吗

使用特权

评论回复
14
renzheshengui| | 2021-6-1 17:09 | 只看该作者
软件库里有现成的代码

使用特权

评论回复
15
wakayi| | 2021-6-1 17:11 | 只看该作者
中断啊  总中断啊  定时器使能啊 都要检查一下

使用特权

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

本版积分规则

745

主题

10920

帖子

6

粉丝