查看: 4525|回复: 4

systick 中断没有响应,是配置步骤不正确吗???

[复制链接]

41

主题

59

帖子

483

积分

高级工程师

Rank: 3Rank: 3

积分
483
发表于 2021-3-15 10:01:01 | 显示全部楼层 |阅读模式
  1. #include "FM33L0XX.h"
  2. #include "fm33l0xx_rcc.h"
  3. #include "fm33l0xx_gpio.h"

  4. void systemInit(void);
  5. void ledOutputCfg(void);


  6. void SysTick_Handler(void)
  7. {
  8.     GPIO_ToggleBits(GPIOC,GPIO_Pin_0);   
  9. }



  10. int main()
  11. {
  12.    
  13.     SystemInit();
  14.     ledOutputCfg();
  15.    
  16.     while(1)
  17.     {
  18.         
  19.     }
  20. }

  21. void systemInit(void)
  22. {
  23.     RCC_RCHF_InitTypeDef RCHF_InitStruct;
  24.     RCC_SYSCLK_InitTypeDef SYSCLK_InitStruct;
  25.    
  26.     __disable_irq();
  27.    
  28.     SysTick_Config(8000000);
  29.    
  30.     for (int i = 0; i < 4000000; i++)
  31.     {
  32.     }
  33.    
  34.     RCHF_InitStruct.FSEL   = RCC_RCHF_CR_FSEL_8MHZ;     // RCHF 8M
  35.     RCHF_InitStruct.RCHFEN = ENABLE;                  // 使能 RCHF

  36.     RCC_RCHF_Init(&RCHF_InitStruct);

  37.     SYSCLK_InitStruct.SYSCLKSEL  = RCC_SYSCLK_CR_SYSCLKSEL_RCHF;    // RCHF 做主时钟
  38.     SYSCLK_InitStruct.STCLKSEL   = RCC_SYSCLK_CR_STCLKSEL_SCLK;     // SCLK 做 systick 时钟
  39.     SYSCLK_InitStruct.AHBPRES    = RCC_SYSCLK_CR_AHBPRES_DIV1;      // AHB 不分频
  40.     SYSCLK_InitStruct.APBPRES    = RCC_SYSCLK_CR_APBPRES_DIV1;      // APB 不分频
  41.     SYSCLK_InitStruct.SLP_ENEXTI = ENABLE;      // 休眠时使能外部中断采样
  42.     SYSCLK_InitStruct.LSCATS     = ENABLE;      // LSCLK 自动切换

  43.     RCC_SysClk_Init(&SYSCLK_InitStruct);
  44.    
  45.    
  46.    
  47.    
  48.    
  49.     __enable_irq();       
  50.    
  51. }


  52. void ledOutputCfg(void)
  53. {
  54.     GPIO_InitTypeDef GPIO_InitStructure;
  55.    
  56.     RCC_PERCLK_SetableEx( PADCLK,         ENABLE ); // 使能 APH GPIO 时钟
  57.    
  58.     GPIO_ResetBits(GPIOC,GPIO_Pin_0);

  59.     GPIO_InitStructure.Pin = GPIO_Pin_0;
  60.     GPIO_InitStructure.PxINEN = GPIO_IN_Dis;
  61.     GPIO_InitStructure.PxODEN = GPIO_OD_Dis;
  62.     GPIO_InitStructure.PxPUEN = GPIO_PU_Dis;
  63.     GPIO_InitStructure.PxFCR = GPIO_FCR_OUT;

  64.     GPIO_Init(GPIOC,&GPIO_InitStructure);
  65.    
  66. }
复制代码
systick 中断没有响应,是配置步骤不正确吗???
回复

使用道具 举报

41

主题

59

帖子

483

积分

高级工程师

Rank: 3Rank: 3

积分
483
 楼主| 发表于 2021-3-15 11:38:18 | 显示全部楼层
在while循环之前在重新调用一下SysTick_Config()函数就可以了
回复

使用道具 举报

151

主题

844

帖子

4391

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4391
发表于 2021-3-15 14:42:31 | 显示全部楼层
不建议你用这个定时器做中断。驱动库很多地方也用到了这个定时器。 换个定时器吧
回复

使用道具 举报

41

主题

59

帖子

483

积分

高级工程师

Rank: 3Rank: 3

积分
483
 楼主| 发表于 2021-3-15 16:01:20 | 显示全部楼层
顾博文 发表于 2021-3-15 14:42
不建议你用这个定时器做中断。驱动库很多地方也用到了这个定时器。 换个定时器吧 ...

例程里面
SysTick_Config(0x1000000UL);
这个参数都是 0x1000000, 使用咱们驱动库的话,不管系统时钟频率多少都用这个值吗?
回复

使用道具 举报

151

主题

844

帖子

4391

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4391
发表于 2021-3-16 08:36:55 | 显示全部楼层
都用这个值,具体含义可以百度下。systick是arm0内核自带的定时器。非我们设计的。网上说明一大堆。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表