查看: 2976|回复: 0

STM32F0学习笔记(2)

[复制链接]
  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-11-21 11:07:13 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 xinxincaijq 于 2012-11-21 11:11 编辑

    第二课  让灯闪起来systick应用实例
    一、              工程的构成

    20120806105858815009.png

    可以看到,ST官方例子中,一个Systick  Project下分成四组,分别是User,STM32F0-Discovery,STM32F0XX_StdPeriph_Driver和MDK-ARM,在每个组别下面都有一些文件。

    其中User文件组下面的文件都是针对这个Project而编写的,也是根据需要可以随时改写的。当然,这些文件的写法也有一些模板可供参考。

    STM32F0-Discovery文件夹下是关于这块板硬件的一些定义,如LED接在哪个引脚上,按钮接在哪个引脚上等等。STM32F0XX_StdPeriph_Driver文件夹则是库文件,STM32F0的功能很多,针对不同的功能,库用了不同的文件来描述。如stm32f0xx_gpio.c用来描述有关GPIO引脚的特性,这样的文件一共有10多个,显然,在一个具体的例子中并非所有功能都会用到,因此,在这组文件中只需要挑选用到的文件就行了。MDK-ARM是用来描述ARM核的文件。注意这些文件上都是有一把小钥匙的,显示这些文件是被锁住了,不能更改。

    二、              例子的研究

    把main.c文件打开,去掉那些注释,我们可以看到,它也就是那么几行:

    GPIO_InitTypeDef GPIO_InitStructure;

    static __IO uint32_t TimingDelay;

    void Delay(__IO uint32_t nTime);

    int main(void)

    {


      /* Initialize Leds mounted on STM32F0-discovery */

      STM_EVAL_LEDInit(LED3);

      STM_EVAL_LEDInit(LED4);


      /* Turn on LED3 and LED4 */

      STM_EVAL_LEDOn(LED3);

      STM_EVAL_LEDOn(LED4);


      if (SysTick_Config(SystemCoreClock / 1000))

      {

        while (1);

      }


      while (1)

      {

        STM_EVAL_LEDToggle(LED4);//反转LED4的状态(亮/灭互换)


        Delay(50);         //延时50ms


        STM_EVAL_LEDToggle(LED3);//反转LED3的状态(亮/灭互换)


        Delay(100);  //延时100ms

      }

    }


    void Delay(__IO uint32_t nTime)    //延时函数

    {

      TimingDelay = nTime;

      while(TimingDelay != 0);

    }


    void TimingDelay_Decrement(void)        //用来将TimingDelay变量减1的函数

    {

      if (TimingDelay != 0x00)

      {

        TimingDelay--;

      }

    }

    看了这几行程序,我们要解开的疑惑实在是太多了,LED3,LED4两个符号哪里来的,为什么它们就表示了板上的两个LED?为什么50就是50ms?这是怎么实现的?除开main.c文件外,其他文件有什么用处?如果一一解释,那一篇文章的篇幅就太大了,我们先抓主体,然后抠细节吧。

    打开stm32f0xx_it.c文件,去掉一堆我们暂时还不清楚什么用途的代码后,我们找到了这样的一行:

    20120806105903179010.png

    原来它在这里执行了TimingDelay_Decrement()函数。而正是这个函数让变量TimingDelay减1的。而在Delay(…)函数中,

    void Delay(__IO uint32_t nTime)    //延时函数

    {

      TimingDelay = nTime;

      while(TimingDelay != 0);

    }


    本文转自czlyzhj的博客——平凡的思考
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 01:35 , Processed in 0.129593 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.