原创 STM32F0学习笔记(2)

2012-8-6 11:04 5574 16 18 分类: MCU/ 嵌入式

第二课  让灯闪起来systick应用实例

一、              工程的构成

20120806105858815009.png

 

可以看到,ST官方例子中,一个Systick  Project下分成四组,分别是UserSTM32F0-DiscoverySTM32F0XX_StdPeriph_DriverMDK-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--;

  }

}

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

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

20120806105903179010.png

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

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

{

  TimingDelay = nTime;

  while(TimingDelay != 0);

}

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2015-7-31 15:01

你好,请问下,这里这个TIM1_TimeBaseInit( 15, TIM1_COUNTERMODE_UP, 1000, 0 );,第一个参数15,解析说是16分频,请问下,我现在15改成16有什么差别吗 ?是时钟变了吗?

用户1814892 2015-5-13 10:57

赞!

用户377235 2014-3-17 15:06

void main() { uint8 i; HAL_BOARD_INIT(); //时钟设置 PCA9554ledInit(); while(1) //流水灯 { for (i=0;i<7;i++) { ctrPCA9554LED(i,ON); Wait(100); ctrPCA9554LED(i,OFF); Wait(100); } } } 如何能实现让小灯全部亮,全部灭循环???

teach51_109853927 2012-8-6 11:06

不完整,但没办法,说我起过字数了,,接下面一篇吧。
相关推荐阅读
teach51_109853927 2015-10-25 22:37
带“锁定输出”的数控稳压电源(二)
3.控制程序编写        硬件电路设计完成后,就要编写软件了。软件基本上可以分为键盘驱动,PWM生成,功能实现等部分。 3.1 键盘处理程序        STC单片机的引脚可以...
teach51_109853927 2014-03-02 12:17
带“锁定输出”的数控稳压电源(一)
本文是探索“开源培训”思想的作品。 所谓“开源培训”是指在某个社区,各志愿者提供有一定实用价值和教学价值的作品,同时详细说明制作过程,并提供制作所需的各类资源,帮助入门者快速找到适合自己的项目...
teach51_109853927 2014-02-22 21:15
《单片机项目教程》、《单片机项目教程C语言版》电子课件
《单片机项目教程》电子课件 http://pan.baidu.com/s/1kT2Yb6f 《单片机项目教程C语言版》电子课件 http://pan.baidu.com/s/1gd5O...
teach51_109853927 2014-02-22 21:05
《单片机应用与接口技术》相关资源
单片机应用与接口技术    机械工业出版社出版,江苏省教育厅推荐教材 《单片机应用与接口技术》课件 http://pan.baidu.com/s/1c0kpzUg 《单片机应用与接...
teach51_109853927 2014-02-22 15:25
便携式无线抢答器
本产品专门为开展活动时需要用到抢答器的场合设计,已制作成品,读者可以参考作为练手之用。 如图1所示左边为信号接收装置(主持人用),右边两个为发射装置(比赛选手用)。都只需要使用干电池供电即可。...
teach51_109853927 2014-02-22 15:22
Modbus通讯协议
Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协...
EE直播间
更多
我要评论
2
16
关闭 站长推荐上一条 /3 下一条