你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
hjyhjy 提问时间:2018-8-20 17:25 /
大家好!
   最近我做了个小测试程序
///
void delay(u16  time)
   {
       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();
   谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!
  

收藏 评论11 发布时间:2018-8-20 17:25

举报

11个回答
hjyhjy 回答时间:2018-8-21 08:58:38
??顶一个
smallcsduck 回答时间:2018-8-21 09:24:39
你这个东西有啥浮点运算?
SystemClock_Config();里面pll配置的正确么?
主频是多少?

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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是多少?
捕获.JPG

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

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

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

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库还没接触,有必要学吗
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版