打印
[STM32F0]

stm32f051 ucos 官方代码 求教

[复制链接]
1256|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qbasicljx|  楼主 | 2016-3-9 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看到 ucos 的节拍控制 它的设定函数是这样的#define OS_TICKS_PER_SEC 1000


OS_CPU_SysTickInit(OS_TICKS_PER_SEC);

函数代码如下
#define  OS_CPU_CM0_NVIC_ST_RELOAD  (*((volatile INT32U *)0xE000E014uL)) /* SysTick Reload  Value Reg. */


void  OS_CPU_SysTickInit (INT32U  cnts)
{
    INT32U  prio;
   
    OS_CPU_CM0_NVIC_ST_RELOAD = cnts - 1u;

    prio  = OS_CPU_CM0_NVIC_PRIO_ST;
    prio &= ~(OS_CPU_CM0_NVIC_PRIO_MIN);
    prio |= OS_CPU_CM0_NVIC_PRIO_MIN;
                                                 /* Set prio of SysTick handler to min prio.           */
    OS_CPU_CM0_NVIC_PRIO_ST   = prio;
                                                 /* Enable timer.                                      */
    OS_CPU_CM0_NVIC_ST_CTRL  |= OS_CPU_CM0_NVIC_ST_CTRL_CLK_SRC | OS_CPU_CM0_NVIC_ST_CTRL_ENABLE;
                                                 /* Enable timer interrupt.                            */
    OS_CPU_CM0_NVIC_ST_CTRL  |= OS_CPU_CM0_NVIC_ST_CTRL_INTEN;
}


感觉这样设置不对的样子,感觉应该是
OS_CPU_CM0_NVIC_ST_RELOAD = 时钟源/cnts-1;  
对stm32f051 不熟悉 求教

沙发
HORSE7812| | 2016-3-9 11:19 | 只看该作者
cnts =  时钟源/OS_TICKS_PER_SEC

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
qbasicljx + 3
板凳
qbasicljx|  楼主 | 2016-3-9 11:43 | 只看该作者
本帖最后由 qbasicljx 于 2016-3-9 11:45 编辑

草 代码只看了一半 原来
static  void  AppTaskStart (void *p_arg)
{
    CPU_INT32U  cpu_clk_freq;
    CPU_INT32U  cnts;


    (void)p_arg;                                                /* Note #1                                             */


    OS_CPU_SysTickInit(OS_TICKS_PER_SEC);                       /* Initialize tick counter                              */


    BSP_Init();                                                 /* Initialize BSP functions                             */
    CPU_Init();                                                 /* Initialize the uC/CPU services                       */


    cpu_clk_freq = BSP_CPU_ClkFreq();                           /* Determine SysTick reference freq.                    */
    cnts         = cpu_clk_freq                                 /* Determine nbr SysTick increments                     */
                 / (CPU_INT32U)OS_TICKS_PER_SEC;

    OS_CPU_SysTickInit(cnts);      
                             /* Init uC/OS periodic time src (SysTick).              */



为什么要定义两次 系统时钟呢
还有那个 cpu_init() 是做什么的 我觉得旧版的 ucos2 好像没有这个东西

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

113

帖子

0

粉丝