微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 教你如何点亮STM32F0DISCOVERY的LED(程序++)

教你如何点亮STM32F0DISCOVERY的LED(程序++)

时间:10-02 整理:3721RD 点击:


点个LED看似简单,实际上它是在了解ST的编程特点及寄存器控制基础上的。

一、启动

ST的公司的例程中,使用startup_stm32f030x8.s文件作为启动时执行的第一步。在这个文件里要执行的工作是:

n        初始化SP;

n        初始化PC指针 --- 指向iar_program_start

n        设置中断向量表各exception的地址

n        配置系统时钟

n        转向C语言的main函数


复位入口的指令为:

Reset_Handler

       LDR     R0, =SystemInit

       BLX     R0                              // 调用SystemInit()函数。这个函数在

                                                               //  system_stm32f0xx.c文件中。

       LDR     R0, =__iar_program_start

       BX      R0                              // 跳转主程序


可见,ST公司的方法,对系统时钟等的初始化,并不是在main()函数中执行的。

SystemInit()函数中,设置RCC的几个寄存器,初始化系统时钟。

…………

#ifdefined (PLL_SOURCE_HSI)
  /* At this stage the HSI is already enabled */
   …………
#else
#if defined (PLL_SOURCE_HSE)
  /* Enable HSE */   
  …………
#endif


二、延时函数

在早期的单片机应用中,一般使用循环来延时,而M0有SYSTICK,使用它延时就可不占CPU时间。

1、配置Systick

使用SysTick_Config()函数完成。

2、在中断SysTick_Handler中实现计数

void SysTick_Handler(void)

{

  if(TimingDelay != 0x00)

  {

   TimingDelay--;

  }

}

三、IO控制

stm32f030的IO功能主要有

l        输入悬空

l        输入上拉

l        输入下拉

l        模拟信号

l        输出开漏加上拉或下拉

l        输出推挽加上拉或下拉

l        其它功能推挽上拉或下拉

l        其它功能开漏上拉或下拉

IO的控制寄存器实现以上功能。有端口上(下)拉控制寄存器、置位寄存器、清0寄存器、切换寄存器等12个控制寄存器。对LED的控制,使用数据输出寄存器。


四、程序

int main(void)

{

       LEDInit(LED3);

       LEDInit(LED4);


       /*Turn on LED3 and LED4 */

       LEDOn(LED3);

       LEDOn(LED4);


       if(SysTick_Config(SystemCoreClock / 1000))

       {

              /*Capture error */

              while(1);

       }


       for(;;)

       {

   /* Toggle LED4 */

    LEDToggle(LED4);


   /* Insert 50 ms delay */

   Delay(50);


   /* Toggle LED3 */

   LEDToggle(LED3);


   /* Insert 100 ms delay */

   Delay(100);

       }

}


我顶我顶我顶我顶

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top