打印
[STM32F1]

STM32CubeMx 生成定时器代码后无法进入中断

[复制链接]
3713|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
[size=13.6364px]STM32Cube 是一个全面的软件平台,包括了ST产品的每个系列。平台包括了STM32Cube 硬件抽象层(一个STM32抽象层嵌入式软件,确保在STM32系列最大化的便携性)和一套的中间件组件(RTOS, USB, FatFs, TCP/IP,  Graphics, 等等).
[size=13.6364px]
  • 直观的STM32微控制器的选择和时钟树配置
  • 微控制器图形化配置外围设备和中间件的功能模式和初始化参数
  • C代码生成项目覆盖STM32微控制器的初始化符合IAR™,Keil的™和GCC编译器。

对于新的产品设计,我们强烈推荐使用STM32Cube来加速你的开发过程,并为以后的产品平台移植打下良好的基础。


接下来使用STM32CubeMx实现最简单的TIM1的10ms定时中断功能。
1.选择对应MCU型号(此处就不上图了)
2.仿真接口选择为SW,RCC选择外部时钟,开启定时器主模式,选择内部时钟源。
3.配置时钟树各分频参数。
4.配置定时器预分频72,定时周期为10000个时钟周期,上升计数模式。
5.生成代码。
使用MDK4.72打开代码并编译后,烧录到开发板仿真调试,在定时器中断函数中添加断点,发现定时器并未启动和产生中断。
查看定时器相关寄存器,定时器启动控制位CEN和中断控制位UIE没有置位。
查看生成的源代码,在函数HAL_TIM_Base_MspInit中,并没有开启定时器,只是预留了用户添加代码的区域,所以用户需添加启动定时器和中断的代码
HAL_TIM_Base_Start_IT(tim_baseHandle);
    HAL_TIM_Base_Start(tim_baseHandle);


void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{

  if(tim_baseHandle->Instance==TIM1)
  {
  /* USER CODE BEGIN TIM1_MspInit 0 */

  /* USER CODE END TIM1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_TIM1_CLK_ENABLE();

    /* Peripheral interrupt init */
    HAL_NVIC_SetPriority(TIM1_UP_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);
  /* USER CODE BEGIN TIM1_MspInit 1 */

    HAL_TIM_Base_Start_IT(tim_baseHandle);
    HAL_TIM_Base_Start(tim_baseHandle);
               
  /* USER CODE END TIM1_MspInit 1 */
  }
}


至此,仿真调试可以进入定时器中断。

搜狗截图20161213181721.jpg (117.99 KB )

2

2

搜狗截图20161213182001.jpg (174.44 KB )

3

3

搜狗截图20161213182155.jpg (139.43 KB )

4

4

搜狗截图20161213182744.jpg (213.1 KB )

5

5

搜狗截图20161213183008.jpg (72.74 KB )

6

6

搜狗截图20161213183105.jpg (67.57 KB )

7

7
沙发
mmuuss586| | 2016-12-13 20:13 | 只看该作者
谢谢楼主分享经验;

使用特权

评论回复
板凳
dongnanxibei| | 2016-12-13 22:12 | 只看该作者
没看明白,楼主是说这代码有问题呢,还是解决了问题

使用特权

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

本版积分规则

7

主题

10

帖子

0

粉丝