本帖最后由 delphiliu 于 2012-5-22 17:06 编辑
最近用STM32做全彩的LED显示屏,总是出现画面的闪烁,怀疑是速度太慢了,今天测试,用STM32跑主循环,主循环只有一条翻转指令,结果用示波器测量发现频率只有1M多点。下面是我的时钟设置,8M的外部晶振,DLL作为系统时钟72M。PCLK2是72M,PCLK1是36M。问题出在哪里呢?第一次使用STM32,还请高手指点一二。
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); //将外设RCC寄存器重设为默认值
RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振HSE
HSEStartUpStatus=RCC_WaitForHSEStartUp(); //等待HSE起振
if(HSEStartUpStatus==SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //预取指缓存使能
FLASH_SetLatency(FLASH_Latency_2); //设置代码延时值 2 延时周期
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK)RCC_HCLK_Div1 APB时钟=系统时钟
RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(PCLK2)RCC_HCLK_Div1 APB时钟=HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(PCLK1)RCC_HCLK_Div2 APB1时钟=HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //设置PLL时钟源及倍频系数
RCC_PLLCmd(ENABLE); //使能或失能PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET) //等待指定的RCC标志位设置成功,等待PLL初始化成功
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置系统时间(SYSCLK),设置PLL为系统时钟源
while(RCC_GetSYSCLKSource()!=0x08) //等待PLL成功用于系统时钟的时钟源
{ //0x00:HSI作为系统时钟
} //0x04:HSE作为系统时钟
//0x08:PLL作为系统时钟
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
ok,言之有理!
- #include "proj_incs.h"
- #define GPIO_LED_1 IO_EFM32_OBJECT_POLARITY_DEF(C,13,0) //PC13,极性0(低电平表示ON,高电平表示OFF)
- #define IO_DELAY()
- int main()
- {
- CHIP_Init();
-
- CMU_HFRCOBandSet(cmuHFRCOBand_28MHz); //设置HFRCO频率为28M
- CMU_ClockSelectSet(cmuClock_CORE,cmuSelect_HFRCO); //选择时钟为内部HFRCO
-
- CMU_ClockEnable(cmuClock_GPIO, true); //使能GPIO时钟
- GPIO_LED_1<<IO_ON<<IO_MAKE_MODE_PUSHPULL; //GPIO_LED_1设置PUSHPULL输出,初始ON
-
- while(1)
- {
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- }
- }
复制代码IO频率(整波形)频率是F_CPU/6- //------------------------------------------------------------------
- #include "proj_incs.h"
- #define GPIO_LED_1 IO_STM32_OBJECT_POLARITY_DEF(B,7,0) //PB7,低电平为ON
- int main(void)
- {
- SystemInit();
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_LED_1<<IO_OFF<<IO_MAKE_OUT_PP_50M;
-
- while(1)
- {
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- GPIO_LED_1<<1;
- GPIO_LED_1<<0;
- }
- }
复制代码试了下STM32,主频72M IO速度18M
主频24M IO速度12M
这个要记录一下,虽然没用过STM32
和库函数没关系。
对了,你是不是启用了参数检测?
在config.h里面有个宏定义
一周热门 更多>