hjyhjy 发表于 2018-8-20 17:25:38

求助ST32F103VBT6 采用HAL库的问题(浮点运算占用CPU)

大家好!
   最近我做了个小测试程序
///
void delay(u16time)
   {
       u16      i=0;
       while(time--)
         {
                i=12000;
                while(i--);
         }
    }

   while(1)
    {
         delay(1000)
         LED=0;
         delay(1000);
         LED=1;
    }
   分别将此程序放置到HAL库和标准库中;HAL库程序运行, 灯的亮灭时间特别长,标准库则基本是在1S左右亮灭切换,
请大家帮忙分析 ;是什么原因。   特别是采用HAL库时,有浮点数运算,占用CPU时间特别长,占几百毫秒
HAL库的初始化跟正点原子 一样
   HAL_Init();
   SystemClock_Config();
   谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!


hjyhjy 发表于 2018-8-21 08:58:38

??顶一个

smallcsduck 发表于 2018-8-21 09:24:39

你这个东西有啥浮点运算?
SystemClock_Config();里面pll配置的正确么?
主频是多少?

hjyhjy 发表于 2018-8-21 09:27:32

void Stm32_Clock_Init(u32 PLL)
{
    HAL_StatusTypeDef ret = HAL_OK;
    RCC_OscInitTypeDef RCC_OscInitStructure;
    RCC_ClkInitTypeDef RCC_ClkInitStructure;
   
    RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;            //ʱÖÓԴΪHSE
    RCC_OscInitStructure.HSEState=RCC_HSE_ON;                              //´ò¿ªHSE
        RCC_OscInitStructure.HSEPredivValue=RCC_HSE_PREDIV_DIV1;                //HSEÔ¤·ÖƵ
    RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON;                                        //´ò¿ªPLL
    RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE;                        //PLLʱÖÓÔ´Ñ¡ÔñHSE
    RCC_OscInitStructure.PLL.PLLMUL=RCC_PLL_MUL9;                                                         //Ö÷PLL±¶ÆµÒò×Ó
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//³õʼ»¯
       
    if(ret!=HAL_OK) while(1);
   
    //Ñ¡ÖÐPLL×÷ΪϵͳʱÖÓÔ´²¢ÇÒÅäÖÃHCLK,PCLK1ºÍPCLK2
    RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;                //ÉèÖÃϵͳʱÖÓʱÖÓԴΪPLL
    RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1;                                //AHB·ÖƵϵÊýΪ1
    RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV2;                                 //APB1·ÖƵϵÊýΪ2
    RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV1;                                 //APB2·ÖƵϵÊýΪ1
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_2);        //ͬʱÉèÖÃFLASHÑÓʱÖÜÆÚΪ2WS£¬Ò²¾ÍÊÇ3¸öCPUÖÜÆÚ¡£
               
    if(ret!=HAL_OK) while(1);
}

hjyhjy 发表于 2018-8-21 09:28:24

这个都是按照正点原子的模版来的,基本和标准库一样SYSCLK=72M

电子星辰 发表于 2018-8-21 10:11:07

你看看SystemCoreClock是多少?

wenyangzeng 发表于 2018-8-21 10:49:28

楼主的运行过程CPU时间都耗在指令跳转中。
整数减法运算应该没有用到浮点运算吧?楼主应该进行浮点小数运算、傅里叶运算等才能体现。

hjyhjy 发表于 2018-8-21 15:00:28

是的,我是用FFT运算电压电流了,标准库就没这问题

hjyhjy 发表于 2018-8-21 15:05:05

电子星辰 发表于 2018-8-21 10:11
你看看SystemCoreClock是多少?
就是这个   uint32_t SystemCoreClock         = 72000000;      /*!< System Clock Frequency (Core Clock) */


在 option里宏定义 :USE_HAL_DRIVER,STM32F103xE
G:\

风忆柔情 发表于 2018-8-21 15:09:02

一直用库函数,hal库还没接触,有必要学吗
页: [1] 2
查看完整版本: 求助ST32F103VBT6 采用HAL库的问题(浮点运算占用CPU)