STM32F4光盘扩展例程 USOSIII 系统轮询时间慢

2019-07-21 03:36发布

原子哥,STM32F4光盘的扩展例程中的UCOSIII例程在“探索者STM32F4开发板”上跑,任务运行正常,改到STM32F407VET6上,任务运行比较很慢,尤其最后一个任务轮询到第一个任务,延时好久,请问是什么原因,谢谢!附件是我的工程。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
taizonglai
1楼-- · 2019-07-21 06:21
你的STM32F407VET6的板子的晶振没有问题吧,不会是没有倍频或者使用了内部晶振。你是直接使用我们的工程的吗?你用我们的工程,只是改一下芯片试试。
lucjn
2楼-- · 2019-07-21 07:33
回复【2楼】zuozhongkai:
---------------------------------
晶振没有问题。
void delay_init(u8 SYSCLK)
{
#ifdef OS_CRITICAL_METHOD //????OS_CRITICAL_METHOD?¨????,???÷????ucosII??.
u32 reload;
#endif  
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
fac_us=SYSCLK/8; //??????·?????ucos,fac_us???è??????

#ifdef OS_CRITICAL_METHOD  //????OS_CRITICAL_METHOD?¨????,???÷????ucosII??.
reload=SYSCLK/8; //???????????????? ??????K    
reload*=1000000/OS_TICKS_PER_SEC;//?ù??OS_TICKS_PER_SEC?è?¨?????±??
//reload??24???????÷,×??ó??:16777216,??168M??,????0.7989s×ó??
fac_ms=1000/OS_TICKS_PER_SEC;//?ú±íucos???????±??×???????    
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;    //????SYSTICK????
SysTick->LOAD=reload;  //??1/OS_TICKS_PER_SEC??????????
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;    //????SYSTICK
#else
fac_ms=(u16)fac_us*1000;//·?ucos??,?ú±í????ms?è????systick?±????   
#endif //SYSTEM_SUPPORT_UCOS
}
这个函数是配置系统“滴答”时钟的么?怎么没有配置RCC,SYSCLK是多少,程序里配置系统时钟是在哪里?
lucjn
3楼-- · 2019-07-21 10:58
找到了,配置RCC,在SystemInit()中,我想改成外部时钟,怎么改啊。
; Reset handler
Reset_Handler    ROC
                 EXPORT  Reset_Handler             [WEAK]
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP
正点原子
4楼-- · 2019-07-21 15:27
 精彩回答 2  元偷偷看……
lucjn
5楼-- · 2019-07-21 16:39
回复【5楼】正点原子:
---------------------------------
在“探索者STM32F4开发板”上,可以进入外部时钟配置,但是换到自己的板子上,进入到如下部分,等待外部时钟就绪,不通过,判断后直接退出。
和开发板上电路一样,区别是开发板用的“STM32F407ZGT6”,自己的板子用的是“STM32F407VET6”
  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  }

  if (HSEStatus == (uint32_t)0x01)
  {
正点原子
6楼-- · 2019-07-21 19:29
回复【6楼】lucjn:
---------------------------------
 说明你的外部晶振电路有问题.

一周热门 更多>