关于滴答寄存器问题

2019-08-14 02:26发布

本人菜鸟,之前在网上查看相关滴答寄存器,动手操作了下,运行发现得不到自己想要的延迟效果,请教下各位大神,代码如下:
#include "delay.h"
#include "stm32f1xx_hal.h"

void SystemClock_Config()
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

        // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次,即HAL_Delay函数延时基准为1ms
        // HAL_RCC_GetHCLKFreq()/100000         10us中断一次,即HAL_Delay函数延时基准为10us
        // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次,即HAL_Delay函数延时基准为1us
  //HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);  // 配置并启动系统滴答定时器
/* 系统滴答定时器时钟源 */
//  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);
  /* 系统滴答定时器中断优先级配置 */
// HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

void delay_ms(u32 nms)
{

  SysTick->LOAD=(u32)(9000*nms);
  SysTick->VAL=0x00;
  SysTick->CTRL=0x01;
  while((SysTick->CTRL)>>16==0)
  {
    ;
  }
  SysTick->CTRL=0x01;
  SysTick->VAL=0x00;
}

void delay_us(u32 nus)
{
   SysTick->LOAD=(u32)(9*nus);
     SysTick->VAL=0x00;
    SysTick->CTRL=0x01;
    while((SysTick->CTRL)>>16==0)
    {
    ;
    }
    SysTick->CTRL=0x01;
    SysTick->VAL=0x00;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。