求助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();
谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!
??顶一个 你这个东西有啥浮点运算?
SystemClock_Config();里面pll配置的正确么?
主频是多少? 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);
} 这个都是按照正点原子的模版来的,基本和标准库一样SYSCLK=72M 你看看SystemCoreClock是多少?
楼主的运行过程CPU时间都耗在指令跳转中。
整数减法运算应该没有用到浮点运算吧?楼主应该进行浮点小数运算、傅里叶运算等才能体现。 是的,我是用FFT运算电压电流了,标准库就没这问题 电子星辰 发表于 2018-8-21 10:11
你看看SystemCoreClock是多少?
就是这个 uint32_t SystemCoreClock = 72000000; /*!< System Clock Frequency (Core Clock) */
在 option里宏定义 :USE_HAL_DRIVER,STM32F103xE
G:\ 一直用库函数,hal库还没接触,有必要学吗
页:
[1]
2